ํ๋ก๊ทธ๋จ, ํ๋ก์ธ์ค, ์ค๋ ๋์ ๊ธฐ๋ณธ ๊ฐ๋
๋จผ์ ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค, ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋์ ์ฐจ์ด์ ์ ์์๋ณด์.
ํ๋ก๊ทธ๋จ์ ์คํ ํ์ผ ์์ฒด๋ก, ์์ง ์คํ๋์ง ์์ ์ ์ ์ธ ์ํ๋ฅผ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ์ ์ค์น๋ .exe ํ์ผ์ด ํ๋ก๊ทธ๋จ์ ํด๋นํ๋ค. ๋ฐ๋ฉด์ ํ๋ก์ธ์ค๋ ์คํ๋ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ฉฐ, CPU์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋ ๋์ ์ธ ์ํ๋ฅผ ๋งํ๋ค. ํ๋ก๊ทธ๋จ์ ๋๋ธ ํด๋ฆญํด์ ์คํํ๋ฉด, ๊ทธ๋๋ถํฐ๋ ํ๋ก์ธ์ค๊ฐ ๋๋ค.
์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์์ ์ ์คํํ๋ ๋จ์๋ค. ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค์ค ์์ ์ด ๊ฐ๋ฅํด์ง๋ค. ์๋ฅผ ๋ค์ด, ๋ฆฌ๊ทธ ์ค๋ธ ๋ ์ ๋(๋กค) ๊ฒ์์์ ์ฑํ ํ๋ฉด๊ณผ ๊ฒ์ ํ๋ฉด์ ์๋ก ๋ค๋ฅธ ์ค๋ ๋๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฒ์๊ณผ ์ฑํ ์ ๋์์ ํ ์ ์๋ค.
ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค ์
๋ผ๋ฉด์ ๋ง๋ค์ด ํ๊ธฐ ์ํ ์๋น์ ์๋ก ๋ค์ด ์ค๋ช .
- ํ๋ก์ธ์ค: ๋ผ๋ฉด์ ๋จน๊ธฐ ์ํด ๋งค๋ฒ ์๋น์ ์ด์ด์ ๋ผ๋ฉด์ ๋ง๋ค์ด ๋จน๊ณ , ์๋น์ ๋ฌธ์ ๋ซ๋ ๊ฒ
- ์๋น์ ๋ถ์ ํค๊ณ
- ๊ฐ์ค๋ฅผ ๊ฐ๋์ํค๊ณ
- ๋์ฅ๊ณ ๋ฅผ ์ด์ด (์ ์ ) ์ฌ๋ฃ๋ฅผ ์ค๋นํ๊ณ ← ํ๋ก๊ทธ๋จ์ผ๋ก ๋น์ ํ ์ ์์
- ๋๊ตฌ๋ค์ ์ค๊ฑฐ์ง๋ฅผ ํ ๋ค
- ๋๋ง ์์ ์ฌ๋ฃ๋ฅผ ์ฐ์ด์
- ์กฐ๋ฆฌํ๋ ๊ฒ
์ค๋ ๋ ์
- ์ค๋ ๋: ๋ผ๋ฉด์ ๋จน๊ธฐ ์ํด ๋งค๋ฒ ์๋น์ ์ด๋ฆฐ ์ฑ ๊ฑฐ์ ๋ค ์ค๋น๋์ด ์๊ณ ๋ผ๋ฉด์ ๋ง๋ค์ด ๋จน๊ณ ๋์ค๋ ๊ฒ
- ๋๊ตฌ๋ค์ ์ค๊ฑฐ์ง๋ฅผ ํ ๋ค
- ๋๋ง ์์ ์ฌ๋ฃ๋ฅผ ์ฐ์ด์
- ์กฐ๋ฆฌํ๋ ๊ฒ
์ค๋ ๋์ ์ฅ์ : ๋ค์ค ์์
- 1 ํ๋ก๊ทธ๋จ = 1 ํ๋ก์ธ์ค๋ก๋ ํ๋์ ์์
๋ง ํ ์ ์๋ ํ๊ณ๋ฅผ ๋ฒ์ด๋
- 1 ํ๋ก์ธ์ค = N ์ค๋ ๋๋ก ๋ค์ํ ์์ ๊ณผ ๋์ ์์ ์ด ๊ฐ๋ฅ.
- ์คํ ๋จ์๊ฐ ์์ ๋ค์ค ์์ ์ ๋ถ๋ด์ด ์๋ค.
Web Server: ์ด๊ธฐ ์น ์๋ฒ์ ์๋ ๋ฐฉ์
์น ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ฝํ ์ธ (HTML, ์ด๋ฏธ์ง, CSS ๋ฑ)๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค. ๊ทธ๋ฌ๋ ์น์ด ๋ฐ์ ํ๋ฉด์ ๋์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ํ์๊ฐ ์๊ฒผ๊ณ , ์ด๋ฅผ ์ํด ์ด๊ธฐ์๋ CGI(Common Gateway Interface)๋ฅผ ์ฌ์ฉํ๋ค.
- CGI ์ด๊ธฐ: 1 ์์ฒญ : 1 ๋น์์ฃผ ํ๋ก์ธ์ค
- ๊ฐ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ์์ฑ๋์ด ์น ํ์ด์ง๋ฅผ ๋ง๋ค์ด ๋ฐํํ๊ณ , ๊ทธ ํ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๋ฐฉ์์ด๋ค.
- ์ด ๋ฐฉ์์ Stateless ๋น์ํ์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋งค ์์ฒญ๋ง๋ค ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๊ณ , ์คํ๋ ํ ๋ฐํ๋๋ฉฐ, ๊ทธ ํ๋ก์ธ์ค๋ ์ฆ์ ์ข ๋ฃ๋๋ค. ์ด๋ ์์ฒญ ๊ฐ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ผ ์ ์๋ค.
- FCGI (Fast CGI): 1 ์์ฒญ : 1 ์์ฃผ ํ๋ก์ธ์ค
- FCGI๋ ๊ธฐ์กด CGI์ ๋จ์ ์ ๊ฐ์ ํ ๋ฐฉ์์ผ๋ก, ์์ฒญ๋ง๋ค ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋์ , ์ด๋ฏธ ์ด๋ ค ์๋ ์์ฃผ ํ๋ก์ธ์ค๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ฐํํ๋ค.
- ์ด๋ Stateful ์ํ์ฑ์ ์ ๊ณตํ๋ฉฐ, ํ๋ก์ธ์ค ๊ฐ์ ์ํ๋ฅผ ๊ณต์ ํ ์ ์์ด ์ฑ๋ฅ์ด ํฅ์๋๋ค. ๊ธฐ์กด ํ๋ก์ธ์ค๊ฐ ๊ณ์ ์ด์์๊ธฐ ๋๋ฌธ์, ์์ฒญ ๊ฐ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉฐ ๋น ๋ฅด๊ฒ ์๋ตํ ์ ์๋ค.
- PHP์ ๋ฑ์ฅ๊ณผ ๋ณํ:
- ์ด๊ธฐ PHP๋ CGI๋ฅผ ๋ด์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ํ์ง๋ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ ๋ ๋ณต์กํด์ง๊ณ ๋๊ท๋ชจํ๋๋ฉด์, PHP๋ ๊ฐ์ฒด์งํฅ ์ธ์ด์ธ Java์ ์ํฅ์ ๋ฐ์ ๋ฐ์ ํ๊ฒ ๋๋ค. ํนํ, PHP 5.4+์์๋ ์น ์๋ฒ ๋ด์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ด์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ฒ ๋๋ฉฐ, ์ด๋ WAS๋ก ์งํํ๋ค.
ํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ: Tomcat์ ์
ํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(WAS)๋ ํ๋ก๊ทธ๋จ, ํ๋ก์ธ์ค, ์ค๋ ๋์ ๊ฐ๋ ์ ํจ์จ์ ์ผ๋ก ํ์ฉํ์ฌ ์น ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
๊ณผ๊ฑฐ์๋ ์น ์๋ฒ์ CGI๋ฅผ ํตํด ์์ฒญ์ ์ฒ๋ฆฌํ์ง๋ง, ํ๋์๋ WAS๊ฐ ์ด ์ญํ ์ ๋์ ํ๋ค. Tomcat๊ณผ ๊ฐ์ WAS๋ ์ ์ ์น ๋ฆฌ์์ค๋ฟ๋ง ์๋๋ผ ๋์ ์น ๋ฆฌ์์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ๋์ ์น ๋ฆฌ์์ค๋ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ์ค์๊ฐ์ผ๋ก ์์ฑ๋๋ ํ์ด์ง๋ก, ํ๋ก์ธ์ค์ ์ค๋ ๋๋ฅผ ํ์ฉํด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋ค.
WAS์ ํต์ฌ ๋์ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค:
- 1 ์์ฒญ : 1 ์ค๋ ๋:
- ํ๋์ WAS๋ ๊ฐ ์์ฒญ๋ง๋ค ํ๋์ ์ค๋ ๋๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ ์ฑํํ๊ณ ์๋ค. ์ด๋ ์์ฃผ ํ๋ก์ธ์ค์ ์ํ์ฑ์ ์ ์งํ๋ฉด์๋ ๋น์์ฃผ ๋ฐฉ์์ ํจ์จ์ฑ์ ์ป์ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
- ๋งค ์์ฒญ๋ง๋ค ์ค๋ ๋๋ฅผ ์๋ก ์์ฑํ๋ ๋์ , ์ค๋ ๋ ํ(Thread Pool)์ ์ฌ์ฉํด ๋ฏธ๋ฆฌ ์์ฑ๋ ์ค๋ ๋๋ฅผ ๋๊ธฐ์์ผ ๋๊ณ , ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ด๋ฅผ ํ ๋นํ์ฌ ์ฒ๋ฆฌํ๋ค. ์ฒ๋ฆฌ๋ ์ค๋ ๋๋ ๋ค์ ํ๋ก ๋ฐํ๋์ด ๋ค์ ์์ฒญ์ ๋๊ธฐํ๋ค.
- Servlet๊ณผ Servlet Container:
- Servlet์ ์๋ฐ ๊ธฐ๋ฐ์ WAS์์ ํ๋์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋จ์์ด๋ค. ์์ฒญ์ด ๋ค์ด์ค๋ฉด WAS๋ ์๋ธ๋ฆฟ์ ํธ์ถํด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
- Servlet Container๋ ์ด๋ฌํ ์๋ธ๋ฆฟ๋ค์ ๊ด๋ฆฌํ๊ณ , ์์ฒญ์ ๋ํด ์ ์ ํ ์๋ธ๋ฆฟ์ ํ ๋นํ๋ ์ญํ ์ ํ๋ค. ์ปจํ ์ด๋๋ ์ค๋ ๋์ ์์ฑ, ํ ๋น, ํ์ ๋ฑ ์ค๋ ๋ ํ์ ๊ด๋ฆฌ๋ ๋ด๋นํ๋ค.
ํ ํ๋ฆฟ ์์ง๊ณผ MVC ํจํด์ ์ดํด
ํ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์๋ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ ํ๋ฆฟ ์์ง๊ณผ MVC ํจํด์ ์ฌ์ฉํ๋ค.
MVC ํจํด์ Model, View, Controller๋ก ๊ตฌ์ฑ๋ ์ํคํ ์ฒ๋ก, ๊ฐ๊ฐ์ ์ญํ ์ด ๋ช ํํ๊ฒ ๊ตฌ๋ถ๋๋ค.
- Model์ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๋ด๋นํ๋ค.
- View๋ ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์ญํ ์ ํ๋ค. HTML ํ์ด์ง๋ JSON ์๋ต์ด ์ด์ ํด๋นํ๋ค.
- Controller๋ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์, ํ์ํ ๋ฐ์ดํฐ๋ฅผ Model์์ ๊ฐ์ ธ์ค๊ณ , ์ด๋ฅผ View Template๊ณผ ๊ฒฐํฉํด ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ์ญํ ์ ํ๋ค.
ํ ํ๋ฆฟ ์์ง์ View Template๊ณผ Model ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ์ฌ ์ต์ข ์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑํ๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด, Controller๋ ์์ฒญ์ ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ํ ํ๋ฆฟ ์์ง์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค HTML ํ์ด์ง๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
MVC Pattern
1. Model (๋ชจ๋ธ):
- ์ญํ : ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌ.
- ์์: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ ๊ธฐ๋ฅ.
- ์ค๋ช : Model์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋น. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ ธ์ค๋ ์ผ์ ํจ.
2. View (๋ทฐ):
- ์ญํ : ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์ญํ .
- ์์: HTML ํ์ด์ง, JSON ์๋ต ๋ฑ.
- ์ค๋ช : View๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑ. ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ํ๋ฉด์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์. ์๋ฅผ ๋ค์ด, ์น ํ์ด์ง๋ ์ฑ์ ํ๋ฉด.
3. Controller (์ปจํธ๋กค๋ฌ):
- ์ญํ : ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ฅผ Model์์ ๊ฐ์ ธ์์ ์ ์ ํ View๋ฅผ ์ ํํ๋ ์ญํ .
- ์์: ํน์ URL ์์ฒญ์ ๋ฐ์์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ฅผ ํธ์ถ.
- ์ค๋ช : Controller๋ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์๋ค์ด๊ณ , ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง, ์ด๋ค ํ๋ฉด์ ๋ณด์ฌ์ค์ง๋ฅผ ๊ฒฐ์ . ๊ทธ๋ฌ๋ ์ค์ ๋ก ํ๋ฉด์ ๋ง๋๋ ์ต์ข ์์ ์ ํ์ง ์์ → ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๋๋ค.
4. Template Engine (ํ ํ๋ฆฟ ์์ง):
- ์ญํ : View Template๊ณผ Model ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ์ฌ ์ต์ข ์ ์ธ View๋ฅผ ์์ฑ.
- ์ค๋ช : Template Engine์ Controller๊ฐ ์ค๋นํ View Template๊ณผ Model ๋ฐ์ดํฐ๋ฅผ ํฉ์ณ์ ์ต์ข ์ ์ธ HTML ํ์ด์ง๋ JSON ๋ฐ์ดํฐ๋ฅผ ๋ง๋ฆ. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ต์ข ๊ฒฐ๊ณผ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง.
์์๋ฅผ ํตํด ์ฝ๊ฒ ์ดํดํ๊ธฐ
1. ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง๋ฅผ ์์ฒญ:
์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ํน์ ์น ํ์ด์ง๋ฅผ ์์ฒญํฉ๋๋ค. (์: http://example.com/user/123
)
2. Controller๊ฐ ์์ฒญ์ ๋ฐ์:
Controller๋ ์ด ์์ฒญ์ ๋ฐ์ ์ฌ์ฉ์๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋์ง ๊ฒฐ์ .
์๋ฅผ ๋ค์ด, 123
์ด๋ผ๋ ์ฌ์ฉ์ ID๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค๊ณ ํ๋จ.
3. Model์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ:
Controller๋ Model์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ID 123
์ ํด๋นํ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด.
4. View Template ์ ํ:
Controller๋ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋๋ก ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค HTML ํ ํ๋ฆฟ(View Template)์ ์ ํ.
5. Template Engine์ ์ฌ์ฉํด ์ต์ข View ์์ฑ:
Template Engine์ ์ ํ๋ HTML ํ ํ๋ฆฟ๊ณผ Model์์ ๊ฐ์ ธ์จ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฒฐํฉํ์ฌ ์ต์ข HTML ํ์ด์ง๋ฅผ ์์ฑ.
์ด ์ต์ข HTML ํ์ด์ง๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฐํ๋์ด ๋ธ๋ผ์ฐ์ ์ ํ์.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]