Part.1 ์น์๋ฒ๋ ๋ฌด์์ธ๊ฐ
๐ ์ด ๊ธ์ ์ ์ฐ๋๊ฐ
2์ ์ด ํํ ๋งํ๋ ๋ฐฑ์๋๋ฅผ ๋ชจ๋ ๊ฒฝํํด ๋ดค๋ค. flask๋ฅผ ์ด์ฉํด ์น์ ๋ง๋ค๋ฉด์ ํ๋ก ํธ์๋์ ๋ํ ๋งค๋ ฅ๋ ๋๋ผ๊ณ DB์ ๋ํด ๋ ์๊ณ ์ถ๊ณ ๋ ๊ฐ์ฅ ๋ฒ ์ด์ค์ธ ๋ฐฑ์๋ ๊ณต๋ถ๋ ํด๋ณด๊ณ ์ถ๋จ ์๊ฐ์ด ๋ค์๋ค. 4์ ์ด ์ด์ด ์ข๊ฒ๋ django๋ฅผ ๊ณต๋ถํ ์ ์์๋๋ฐ ์ ๋๋ก ํด๋ณด๊ณ ์ถ์ ๋ง์์ ๋ ์๊ฐ์ ์ฒซ ์์์ ๊ทผ๋ฐ, ๋๋์ฒด ์๋ฒ๊ฐ ๋ญ์ผ?์๋ค. ๊ทธ๋ ๊ฒ ์๋ฒ๋ฅผ ๊ณต๋ถํ๋ค ๋ณด๋ HTTP๋ ๋ญ๋ฐ? ๋ก ๋น ์ ธ ๊ฒฐ๊ตญ ์๋ฒ์ ๋คํฌ์ํฌ์ ๋ํด ๊ฑฐ์ ์ผ์ฃผ์ผ ๋์ ๊ณต๋ถํ๋๋๋ค. ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ถ๋ฆฌ๋์ด ์์ด์ผ ํ๋์ง, http ํ๋กํ ์ฝ์ ์ด๋ป๊ฒ ์๋ํ๋์ง, ์น ์๋ฒ์ ๋ํ ์ ๋ฐ์ ์ธ ์ดํด์ db๋ฅผ ๊ฐ์ ธ์ค๋ api์ ๋ํ ์ดํด๊น์ง ๋ ์ด๊ฑธ ๊ตฌํํ๊ธฐ ์ํ python webframework ๊น์ง ๊ทธ ์ฒซ ํ์ด์ง๋ก์ ์น์๋ฒ๋ ๋ฌด์์ธ๊ฐ๋ฅผ ์์ฑํ๊ณ ์๋๋ฐ ๋ค ์ฐ๊ณ ๋ณด๋ ์๊ฐ๋ณด๋ค ๋ณ๊ฒ ์๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ ๊ทผ๋ฐ ์ ์ด๋ ๊ฒ ์ด๋ ค์ ์๊น? ํ๋์ document๋ฅผ ๋ณด๊ณ ๊ณต๋ถํ์ง ๋ชปํด์ ๊ทธ๋ฐ๊ฐใ
ใ
์ฌํผ ์ด๊ฑด ์น์๋ฒ์ ์ฒซ ํ์ด์ง๋ก ๋ ๋ฒ์งธ๋ ์ง์ง HTTP ํ๋กํ ์ฝ์ ๋ํ ํฌ์คํ
์ธ ๋ฒ์งธ๋ ๊ทธ๋ ๊ฒ ๊ณต๋ถํ๋ค ๋ณด๋ ๋์ฉ๋ ์๋ฒ ํธ๋ํฝ ์ฒ๋ฆฌ๊ฐ ๊ถ๊ธํด์ ธ ๋ ๊ณต๋ถํ๊ณ ๊ทธ๋ ๊ฒ ์๋ฒ์ ์ํคํ
์ฒ๋ก ๋์ด๊ฐ๊ฒ ๋ ์ด์ผ๊ธฐ๊น์ง... ์ํคํ
์ฒ, ์๋ฒ, ๋คํธ์ํฌ์ ๋ํ ํฌ์คํ
์ ์์ํด ๋ณด๋ ค ํ๋ค!
๋ชฉํ
์ด ๊ธ์ ์ฝ๊ณ web server/ http/ web server์ was์ ์ฐจ์ด ๊ทธ๋ฆฌ๊ณ WSGi/python framework/ API
์ฆ ๋ฐฑ์๋ ๋ก์ง์ ๋ํด ์ ๋ฐ์ ์ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋ค.
1. web server?
์น ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ
HTTP ํ๋กํ ์ฝ๋ก ์์ฒญ์ ๋ฐ์,
HTML ๋ฌธ์ ๋ฑ๊ณผ ๊ฐ์ ์ ์ ์น ํ์ด์ง๋ฅผ ์๋ตํด์ฃผ๋ ์ํํธ์จ์ด
1-1. ํ๋์จ์ด vs ์ํํธ์จ์ด
- ํ๋์จ์ด ์ธก๋ฉด,
- web server๋ web server์ ์ํํธ์จ์ด์ website์ ์ปดํฌ๋ํธ ํ์ผ๋ค์ ์ ์ฅํ๋ ์ปดํจํฐ (์ปดํฌ๋ํธ ํ์ผ์๋ HTML ๋ฌธ์, images, CSS stylesheets, ๊ทธ๋ฆฌ๊ณ JavaScript files ๋ฑ)
- Web server๋ ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ด ์น์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ค์ด ์น ์๋ฒ์ ๋ฐ์ดํฐ(์ปดํฌ๋ํธ ํ์ผ๋ค)๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ค.
- ์ํํธ์จ์ด ์ธก๋ฉด,
- web server๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์น ์ฌ์ฉ์๊ฐ ์ด๋ป๊ฒ ํธ์คํธ ํ์ผ๋ค์ ์ ๊ทผํ๋์ง๋ฅผ ๊ด๋ฆฌํ๋ค.
- HTTP ์๋ฒ๋ URL(Web addresses)๊ณผ HTTP(๋น์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋กํ ์ฝ)์ ์ํํธ์จ์ด ์ผ๋ถ์ด๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์น ์๋ฒ์์ ๋ถ๋ ค์ง ํ์ผ์ ํ์๋ก ํ ๋, ๋ธ๋ผ์ฐ์ ๋ HTTP๋ฅผ ํตํด ํ์ผ์ ์์ฒญ-> ์์ฒญ์ด ์ฌ๋ฐ๋ฅธ ์น ์๋ฒ(ํ๋์จ์ด)์ ๋๋ฌํ์์ ๋ -> HTTP ์๋ฒ(software)๋ ์์ฒญ๋ ๋ฌธ์๋ฅผ HTTP๋ฅผ ์ด์ฉํด ์ ๋ฌ
์น ์ฌ์ดํธ๋ฅผ ๊ณต๊ฐํ๊ธฐ ์ํด์๋, ๋น์ ์ ์ ์ ํน์ ๋์ ์น ์๋ฒ๊ฐ ํ์ํ๋ค.
- ์ ์ ์น ์๋ฒ: HTTP ์๋ฒ (์ํํธ์จ์ด)๊ฐ ์๋ ์ปดํจํฐ(ํ๋์จ์ด)๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์๋ฒ๊ฐ ๊ทธ ๋ถ๋ ค์ง ํ์ผ์ ๋น์ ์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ์กํ๊ธฐ ๋๋ฌธ์ "์ ์ " ์น ์๋ฒ
- ๋์ ์น ์๋ฒ: ์ ์ ์น ์๋ฒ์ ์ถ๊ฐ์ ์ธ ์ํํธ์จ์ด(๋๋ถ๋ถ ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค)๋ก ๊ตฌ์ฑ. ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ HTTP ์๋ฒ๋ฅผ ํตํด ๋น์ ์ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ถ๋ ค์ง ํ์ผ๋ค์ ์ ์กํ๊ธฐ ์ ์, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์ ๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์ "๋์ " ์น ์๋ฒ
- ์ต์ข ์นํ์ด์ง๋ค์ ์์ฑํ๊ธฐ ์ํด, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์จ ์ปจํ ์ธ ๋ค๋ก ์ด๋ฃจ์ด์ง HTML ํ ํ๋ฆฟ์ ์ฑ์ด๋ค. ์ฌ์ดํธ๋ค์ ์ ์ฒ๊ฐ์ ์นํ์ด์ง๋ค์ ๊ฐ์ง๊ณ ์์ง๋ง, ๊ทธ๊ฒ๋ค์ ์ค์ ์ HTML ๋ฌธ์๊ฐ ์๋๋ผ ์ค์ง ์ฝ๊ฐ์ HTML ํ ํ๋ฆฟ๊ณผ ์์ฒญ ํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋์ด์๋ค
1-2. ํธ์คํ ํ์ผ๋ค
์น ์๋ฒ๋ ์ฒ์์ HTML ๋ฌธ์๋ผ๊ณ ๋ถ๋ฆฌ๋ ์น ์ฌ์ดํธ์ ํ์ผ๋ค๊ณผ ์ด๋ฏธ์ง, CSS ์คํ์ผ์ํธ, JavaScript ํ์ผ, ํฐํธ, ๋น๋์ค๋ฅผ ํฌํจํ ๊ด๋ จ๋ ๊ฒ๋ค์ ์ ์ฅํด์ผํ๋ค.
๊ธฐ์ ์ ์ผ๋ก, ์ปดํจํฐ์ ์๋ ๊ทธ ํ์ผ๋ค์ ๋ถ๋ฌ์ฌ์ ์์ง๋ง, ๊ทธ๊ฒ๋ค์ ์ ๋ดํ๋ ์น ์๋ฒ์ ์ ์ฅํ๋๊ฒ์ด ํจ์ฌ ๋ ํธ๋ฆฌํจ.
์ ๋ดํ๋ ์น์๋ฒ๋:
- ํญ์ ์คํ ์ค์ด๊ณ
- ํญ์ ์ธํฐ๋ท๊ณผ ์ฐ๊ฒฐ๋์ด ์๊ณ
- ํญ์ ๊ฐ์ IP์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ(๋ชจ๋ ISPs (en-US)๊ฐ ํ ๋ผ์ธ์ ๋ํด ๊ณ ์ ๋ IP์ฃผ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์๋๋๋ค.)
- ์ 3์์ ์ํด ์ ์ง๋ณด์ ๋๋ค.
์ข์ ํธ์คํ
์ ๊ณต์๋ฅผ ์ฐพ๋ ๊ฒ์ ๋น์ ์ ์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ํต์ฌ ๋ถ๋ถ.
์น ํธ์คํ
์๋ฃจ์
์ ์ค์ ํ๋ค๋ฉด, ๊ทธ์ ์น ์๋ฒ์ ํ์ผ๋ค์ ์
๋ก๋ ํ๋ฉด ๋๋ค.
1-3. HTTP
์น ์๋ฒ๋ HTTP (hypertext transfer protocol)์ ์ํ ์ง์. ์ด๋ฆ์ด ์๋ฏธํ๋ฏ์ด, HTTP๋ ์ด๋ป๊ฒ ๋ ์ปดํจํฐ๊ฐ์ hypertext(์๋ฅผ ๋ค์ด, ์ฐ๊ฒฐ๋ ์น ๋ฌธ์)๋ฅผ ์ ์กํ๋ protocol.
ํ๋กํ ์ฝ์ ๋ ์ปดํจํฐ๊ฐ์ ํต์ ๋ฅผ ์ํ ๊ท์น์ ์งํฉ. HTTP๋ ๋ฌธ์๋ก ๋, ๋ ๋ฆฝ์ ์ธ ํ๋กํ ์ฝ์ ๋๋ค.
- Textual(๋ฌธ์๋ก ๋): ๋ชจ๋ ๋ช ๋ น์ด๋ค์ ๊ธฐ๋ณธ ๋ฌธ์์ด๋ฉฐ ์ฌ๋๋ค์ด ์ฝ์ ์ ์์ต๋๋ค.
- Stateless(๋
๋ฆฝ์ ์ธ): ์๋ฒ ํน์ ํด๋ผ์ด์ธํธ๋ ์ด์ ์ ํต์ ์ ๊ธฐ์ตํ์ง ์๋๋ค/ HTTP์๋ง ์์กดํ๋ฉด, ์๋ฒ๋ ๋น์ ์ด ์
๋ ฅํ ๋น๋ฐ๋ฒํธ ํน ๋น์ ์ด ์ฒ๋ฆฌํ ๋จ๊ณ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์
๊ทธ๋ฌํ ์ผ๋ค์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ํ์ํ๋ค.
HTTP๋ ์ด๋ป๊ฒ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ์ ํ๋์ง ๋ช ํํ ๊ท์น์ ์ ๊ณต
- ์ค์ง ํด๋ผ์ด์ธํธ๋ง์ด HTTP ์์ฒญ์ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์๋ฒ์๊ฒ๋ง ๋ณด๋ผ ์ ์์ต๋๋ค. ์๋ฒ๋ ์ค์ง ํด๋ผ์ด์ธํธ์ HTTP ์์ฒญ์ ์๋ตํ ์ ์์ต๋๋ค.
- HTTP๋ฅผ ํตํด ํ์ผ์ ์์ฒญํ ๋, ํด๋ผ์ด์ธํธ๋ ๋ฐ๋์ URL ํ์ผ๋ค์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- ์น ์๋ฒ๋ ๋ฐ๋์ ์ต์ํ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ HTTP ์์ฒญ์ ์๋ตํด์ผํฉ๋๋ค.
๋ ์์ธํ๊ฒ๋ ๋ค์ ํฌ์คํ ์ฐธ๊ณ
2. Back-end
2-1. Static Pages์ Dynamic Pages
- Static Pages
Web Server๋ ํ์ผ ๊ฒฝ๋ก ์ด๋ฆ์ ๋ฐ์ ๊ฒฝ๋ก์ ์ผ์นํ๋ file contents๋ฅผ ๋ฐํํ๋ค.
ํญ์ ๋์ผํ ํ์ด์ง๋ฅผ ๋ฐํํ๋ค.
Ex) image, html, css, javascript ํ์ผ๊ณผ ๊ฐ์ด ์ปดํจํฐ์ ์ ์ฅ๋์ด ์๋ ํ์ผ๋ค - Dynamic Pages
์ธ์์ ๋ด์ฉ์ ๋ง๊ฒ ๋์ ์ธ contents๋ฅผ ๋ฐํํ๋ค.
์ฆ, ์น ์๋ฒ์ ์ํด์ ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ํตํด์ ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๋ฌผ * Servlet: WAS ์์์ ๋์๊ฐ๋ Java Program
๊ฐ๋ฐ์๋ Servlet์ doGet()์ ๊ตฌํํ๋ค.
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
2-2. Web Server์ WAS์ ์ฐจ์ด
Web Server
- Web Server์ ๊ฐ๋
: ์ํํธ์จ์ด์ ํ๋์จ์ด๋ก ๊ตฌ๋ถ๋๋ค.
- 1) ํ๋์จ์ด: Web ์๋ฒ๊ฐ ์ค์น๋์ด ์๋ ์ปดํจํฐ
- 2) ์ํํธ์จ์ด: ์น ๋ธ๋ผ์ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ HTTP ์์ฒญ์ ๋ฐ์ ์ ์ ์ธ ์ปจํ ์ธ (.html .jpeg .css ๋ฑ)๋ฅผ ์ ๊ณตํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ
- Web Server์ ๊ธฐ๋ฅ
- HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ ๋๋ ์น ํฌ๋กค๋ฌ)์ ์์ฒญ์ ์๋น์ค ํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ค.
- ์์ฒญ์ ๋ฐ๋ผ ์๋์ ๋ ๊ฐ์ง ๊ธฐ๋ฅ ์ค ์ ์ ํ๊ฒ ์ ํํ์ฌ ์ํํ๋ค.
- ๊ธฐ๋ฅ 1)
- ์ ์ ์ธ ์ปจํ ์ธ ์ ๊ณต
- WAS๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ์์์ ์ ๊ณตํ๋ค.
- ๊ธฐ๋ฅ 2)
- ๋์ ์ธ ์ปจํ ์ธ ์ ๊ณต์ ์ํ ์์ฒญ ์ ๋ฌ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ(Request)์ WAS์ ๋ณด๋ด๊ณ , WAS๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ(์๋ต, Response)ํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ฏธํ๋ค.
- Web Server์ ์
Ex) Apache Server, Nginx, IIS(Windows ์ ์ฉ Web ์๋ฒ) ๋ฑ
WAS(Web Application Server)
- WAS์ ๊ฐ๋
- DB ์กฐํ๋ ๋ค์ํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ์๊ตฌํ๋ ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง Application Server
- HTTP๋ฅผ ํตํด ์ปดํจํฐ๋ ์ฅ์น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํํด์ฃผ๋ ๋ฏธ๋ค์จ์ด(์ํํธ์จ์ด ์์ง)์ด๋ค.
- “์น ์ปจํ
์ด๋(Web Container)” ํน์ “์๋ธ๋ฆฟ ์ปจํ
์ด๋(Servlet Container)”๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- Container๋ JSP, Servlet์ ์คํ์ํฌ ์ ์๋ ์ํํธ์จ์ด๋ฅผ ๋งํ๋ค.
- ์ฆ, WAS๋ JSP, Servlet ๊ตฌ๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
- WAS = Web Server + Web Container
- Web Server ๊ธฐ๋ฅ๋ค์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํ๊ณ ์ํ๋ ๋ชฉ์ ์ผ๋ก ์ ์๋์๋ค.
- ๋ถ์ฐ ํธ๋์ญ์ , ๋ณด์, ๋ฉ์์ง, ์ฐ๋ ๋ ์ฒ๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ ๋ถ์ฐ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ค.
- ์ฃผ๋ก DB ์๋ฒ์ ๊ฐ์ด ์ํ๋๋ค.
- ํ์ฌ๋ WAS๊ฐ ๊ฐ์ง๊ณ ์๋ Web Server๋ ์ ์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ด์ ์ฑ๋ฅ์ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
- Web Server ๊ธฐ๋ฅ๋ค์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํ๊ณ ์ํ๋ ๋ชฉ์ ์ผ๋ก ์ ์๋์๋ค.
- WAS์ ์ฃผ์ ๊ธฐ๋ฅ
- ํ๋ก๊ทธ๋จ ์คํ ํ๊ฒฝ๊ณผ DB ์ ์ ๊ธฐ๋ฅ ์ ๊ณต
- ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ (๋ ผ๋ฆฌ์ ์ธ ์์ ๋จ์) ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ ๋น์ฆ๋์ค ๋ก์ง ์ํ
- WAS์ ์
Ex) Tomcat, JBoss, Jeus, Web Sphere ๋ฑ
2-3. Web Server์ WAS๋ฅผ ๊ตฌ๋ถํ๋ ์ด์
- Web Server๊ฐ ํ์ํ ์ด์ ?
ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์ ์ด๋ฏธ์ง ํ์ผ(์ ์ ์ปจํ ์ธ )์ ๋ณด๋ด๋ ๊ณผ์ ์์
์ด๋ฏธ์ง ํ์ผ๊ณผ ๊ฐ์ ์ ์ ์ธ ํ์ผ๋ค์ ์น ๋ฌธ์(HTML ๋ฌธ์)๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ง ๋ ํจ๊ป ๊ฐ์ง ์๋๋ค. ํด๋ผ์ด์ธํธ๋ HTML ๋ฌธ์๋ฅผ ๋จผ์ ๋ฐ๊ณ ๊ทธ์ ๋ง๊ฒ ํ์ํ ์ด๋ฏธ์ง ํ์ผ๋ค์ ๋ค์ ์๋ฒ๋ก ์์ฒญํ๋ฉด ๊ทธ๋์์ผ ์ด๋ฏธ์ง ํ์ผ์ ๋ฐ์์จ๋ค. Web Server๋ฅผ ํตํด ์ ์ ์ธ ํ์ผ๋ค์ Application Server๊น์ง ๊ฐ์ง ์๊ณ ์๋จ์์ ๋น ๋ฅด๊ฒ ๋ณด๋ด์ค ์ ์๋ค. ๋ฐ๋ผ์ Web Server์์๋ ์ ์ ์ปจํ ์ธ ๋ง ์ฒ๋ฆฌํ๋๋ก ๊ธฐ๋ฅ์ ๋ถ๋ฐฐํ์ฌ ์๋ฒ์ ๋ถ๋ด์ ์ค์ผ ์ ์๋ค. - WAS๊ฐ ํ์ํ ์ด์ ?
์น ํ์ด์ง๋ ์ ์ ์ปจํ ์ธ ์ ๋์ ์ปจํ ์ธ ๊ฐ ๋ชจ๋ ์กด์ฌํ๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ง๊ฒ ์ ์ ํ ๋์ ์ปจํ ์ธ ๋ฅผ ๋ง๋ค์ด์ ์ ๊ณตํด์ผ ํ๋ค. ์ด๋, Web Server๋ง์ ์ด์ฉํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ํ๋ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ๋ชจ๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ ์๋น์ค๋ฅผ ํด์ผ ํ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ํํ๊ธฐ์๋ ์์์ด ์ ๋์ ์ผ๋ก ๋ถ์กฑํ๋ค. ๋ฐ๋ผ์ WAS๋ฅผ ํตํด ์์ฒญ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ DB์์ ๊ฐ์ ธ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๊ฒ ๊ทธ๋ ๊ทธ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์ ๊ณตํจ์ผ๋ก์จ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. - ๊ทธ๋ ๋ค๋ฉด WAS๊ฐ Web Server์ ๊ธฐ๋ฅ๋ ๋ชจ๋ ์ํํ๋ฉด ๋์ง ์์๊น?
๊ฒฐ๊ตญ์ ์์ ์ด์ฉ์ ํจ์จ์ฑ ๋ฐ ์ฅ์ ๊ทน๋ณต, ๋ฐฐํฌ ๋ฐ ์ ์ง๋ณด์์ ํธ์์ฑ ์ ์ํด Web Server์ WAS๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ. Web Server๋ฅผ WAS ์์ ๋๊ณ ํ์ํ WAS๋ค์ Web Server์ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ค์ ํ๋ฉด ๋์ฑ ํจ์จ์ ์ธ ๋ถ์ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
2-4. django
- reverse proxy server: ์น๋ธ๋ผ์ฐ์ ์ ์นด์ดํฐ ํํธ๋๋ก์ ์๋ฒ ์ชฝ์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ํํธ์จ์ด๋ฅผ ์๋ฏธ. ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ HTTP์์ฒญ์ ๋ฐ์ ์ ์ ์ธ ํ์ด์ง/ํ์ผ์ ๋๋ ค์ค๋ค. ๊ฐ๋ฒผ์๊ณผ ๋์ ์ฑ๋ฅ์ ๋ชฉํ๋ก ์น ์๋ฒ, ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ฐ ๋ฉ์ผ ํ๋ก์ ๊ธฐ๋ฅ. ๋ํ์ ์ธ ์น์๋ฒ๋ Apache, Nginx
- WAS(Web Application Server) ๋ณต์ต
๋์ ๋ฆฌ์์ค ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ. ์น ์๋ฒ(Nginx)์ ์น ์ ํ๋ฆฌ์ผ์ด์ (Django)๊ฐ์ ์ฐ๊ฒฐ์ ์ค๊ณ. (Nginx์์ ๋ฐ์ ์์ฒญ์ Django์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ค๊ณ์ธ ์ญํ ์ ํด์ค๋ค.) Nginx๋ Python์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ uWSGI๋ HTTP ์์ฒญ์ python์ผ๋ก, Django๋ก ๋ถํฐ ๋ฐ์ ์๋ต์ Nginx๊ฐ ์ ์ ์๋๋ก ๋ณํํด์ค๋ค. - WSGI web apllication
- Django๋ ์น ์๋ฒ์ธ๊ฐ?
์ฅ๊ณ ๋ ์ฅ๊ณ ๋ง์ ์น์๋ฒ๋ฅผ ์ด๋ค. ๊ฐ๋ฐ ๋ชฉ์ ์ผ๋ก python์ผ๋ก ์ง์ฌ์ง ๊ฐ๋ฒผ์ด wsgi(web server gateway interface)๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๊ฑธ ์น์๋ฒ๋ผ๊ณ ํ ์๋ ์๋ค. ํ์ง๋ง ์ฅ๊ณ ์์ฒด๋ ์น ํ๋ ์์ํฌ์ด๊ณ runserver๋ฅผ ํตํด ์น ์๋ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ์ญํ ์ ํ๋ ๊ฒ์. ๊ทธ๋ฌ๋ ์ฅ๊ณ document์์ ํ๋ก๋์ ๊ณผ์ ์์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ถ์ฒํจ. - DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone through security audits or performance tests. (We’re in the business of making Web frameworks, not Web servers, so improving this server to be able to handle a production environment is outside the scope of Django.) ์ด ์๋ฒ๋ฅผ ํ๋ก๋์ ์ธํ ์์ ์ฌ์ฉํ์ง๋ง๋ผ. ์ด๊ฒ์ ๋ณด์ ๊ฒ์๋ ํผํฌ๋จผ์ค ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ์์๋ค. (์ฐ๋ฆฌ๋ ์น ์๋ฒ๋ฅผ ๋ง๋๋ ค๋๊ฒ ์๋๊ณ ์น ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์๊ณ , ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ก๋์ ํ๊ฒฝ์์ ์๋ฒ๋ฅผ ํฅ์์ํค๊ณ ์ถ๋ค๋ฉด ์ฅ๊ณ ์ธ์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ผ)
- ๊ทธ๋ ๋ค๋ฉด WSGI ์๋ฒ๋ ๋ญ์ผ?
WSGI๋ Web Server Gateway Interface์ ์ฝ์
WSGI๋ python application(python script)์ด Web Server์ ํต์ ํ๊ธฐ ์ํ ํ์ค Interface์ด๋ฉฐ Python Framework. WSGI๋ ์๋ฒ์ ๊ฒ์ดํธ์จ์ด , ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๋ ์์ํฌ ์๋จ์ผ๋ก ๋๋ ์ ธ ์๋ค. WSGI ๋ฆฌํ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด, ์๋ฒ๋จ์์ ํ๊ฒฝ์ ๋ณด์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์ ์ ๊ณตํด์ผ ํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ฏธ๋ฆฌ ์ ๊ณต๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํด ์๋ฒ๋จ์ ์๋ตํ๋ค. WSGI ๋ฏธ๋ค์จ์ด(๋ผ๊ณ ๋ถ๋ฆฐ๋ค.)๊ฐ WSGI ์๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ด๋ฅผ ๋ณด์ถฉํด์ฃผ๋๋ฐ, ์ด ๋ฏธ๋ค์จ์ด๋ ์๋ฒ์ ๊ด์ ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด์ ์์๋ ์๋ฒ๋ก ํ๋ํ๋ค.
์ฆ, HTTP requests -> Web Server -> WSGI Server(Middleware) -> Django(WSGI๋ฅผ ์ง์ํ๋ Web Application)