์น ์๋ฒ vs WAS ์กฐํฉ์ ์ฐ๋ ์ง์ง ์ด์ ๋ค
๐ ์น ์๋ฒ(Web Server)๋?
์น ์๋ฒ๋ ์ ์ ์ฝํ
์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํด์.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์นํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด,
์น ์๋ฒ๋ ๊ทธ ์์ฒญ์ ๋ฐ์์ HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ, ์ด๋ฏธ์ง ๊ฐ์ ๋ณํ์ง ์๋ ํ์ผ์ ๊ทธ๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํฉ๋๋ค.
์ฆ, ์น ์๋ฒ๋ ์์ฒญ๋ฐ์ ํ์ผ์ ๊ทธ๋๋ก ์๋ตํด์ฃผ๋ ์ญํ ์ด๋ผ๊ณ ๋ณผ ์ ์์ด์.
๋ํ์ ์ธ ์น ์๋ฒ๋ก๋ Nginx, Apache๊ฐ ์์ต๋๋ค.
๐พ WAS (Web Application Server)๋?
WAS๋ ๋์ ์ฝํ
์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ฒ์
๋๋ค.
์ฆ, ๋จ์ํ ํ์ผ์ ๋ณด๋ด๋ ๊ฒ ์๋๋ผ,
์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ด๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "๋ด ์ฃผ๋ฌธ ๋ด์ญ ๋ณด์ฌ์ค"๋ผ๊ณ ์์ฒญํ๋ฉด,
WAS๋ DB์์ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๊บผ๋ด์ค๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ณตํด์ ์๋ต์ ๋ง๋ค์ด ๋ณด๋ด์ค๋๋ค.
Spring Boot, Node.js, Tomcat ๋ฑ์ด WAS ์ญํ ์ ํฉ๋๋ค.
- ์น ์๋ฒ๋ ์ ์ ์ธ ํ์ผ๋ง ์ฒ๋ฆฌ
- WAS๋ ๋ก์ง์ด ๋ค์ด๊ฐ ๋์ ์ธ ์ฒ๋ฆฌ๊น์ง ๊ฐ๋ฅ
- ๊ทธ๋์ ๋ณดํต ์น ์๋ฒ๋ ์๋จ์์ ์์ฒญ์ ๋ฐ๊ณ , ์ ์ ์ธ ๊ฑด ์ง์ ์ฒ๋ฆฌ / ๋์ ์ธ ๊ฑด WAS๋ก ๋๊ฒจ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
์์ฝ๋น๊ต: ์น ์๋ฒ vs WAS
๋ชฉ์ | ์ ์ ์ฝํ ์ธ ์ ๊ณต | ๋์ ์ฝํ ์ธ ์ฒ๋ฆฌ |
์ฃผ์ ๊ธฐ๋ฅ | HTML, CSS, JS, ์ด๋ฏธ์ง ๋ฑ ์ ์ก | ๋น์ฆ๋์ค ๋ก์ง ์คํ, DB ์ฐ๊ฒฐ |
์ฒ๋ฆฌ ๋ฐฉ์ | ์์ฒญ๋ ํ์ผ ๊ทธ๋๋ก ์๋ต | ๋ด๋ถ ๋ก์ง ์ฒ๋ฆฌ ํ ๊ฒฐ๊ณผ ์๋ต |
์์ฒญ ์ฒ๋ฆฌ | HTTP ์์ฒญ → ์ ์ ํ์ผ ๋ฐํ | HTTP ์์ฒญ → ๋ก์ง ์ํ → ๊ฒฐ๊ณผ ๋ฐํ |
์ฐ๊ฒฐ ๋ฐฉ์ | WAS์ ์ฐ๊ฒฐํด์ ๋์ ์์ฒญ ์ ๋ฌ | ์น ์๋ฒ ๋๋ ํด๋ผ์ด์ธํธ์ ์ง์ ์ฐ๊ฒฐ ๊ฐ๋ฅ |
์์ | Nginx, Apache | Tomcat, Node.js, Spring Boot ๋ฑ |
์๋ | ๋น ๋ฅด๊ณ ๊ฐ๋ณ๋ค | ์๋์ ์ผ๋ก ๋ฌด๊ฒ๊ณ ์ฒ๋ฆฌ ๋ณต์ก |
์ฝํ ์ธ ์ข ๋ฅ | ์ ์ ์ฝํ ์ธ | ๋์ ์ฝํ ์ธ (DB ์ฐ๋ ๋ฑ) |
Web Service Architecture
Client - Web Server - WAS - DB
Client (๋ธ๋ผ์ฐ์ )
โก๏ธ [Web Server: Nginx, Apache] (์ ์ ํ์ผ์ ์ฌ๊ธฐ์ ์ฒ๋ฆฌ ๋)
โก๏ธ[WAS: Node.js, Spring Boot, Django ๋ฑ]
โก๏ธ [DB: PostgreSQL, MySQL, MongoDB ๋ฑ]
๐๊ทธ๋ฅ WAS์์ ์ ์ ๋ ๊ฐ์ด ๋ค๋ฃจ๋ฉด ์๋๋์?
1. ์ญํ ๋ถ๋ฆฌ (Separation of Concerns)
- Web Server๋ ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ์ ์ ์์ ์ฒ๋ฆฌ (HTML, CSS, JS, ์ด๋ฏธ์ง ๋ฑ)
- WAS๋ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ, DB ์ฐ๊ฒฐ, ์ธ์ ๊ด๋ฆฌ ๋ฑ ๋ฌด๊ฑฐ์ด ์์ ์ํ
- → ์๋ก ๋ค๋ฅธ ์ฑ๊ฒฉ์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋ถ๋ฆฌํด์ฃผ๋ ๊ฒ ํต์ฌ!
Web Server๋ "๋ฆฌ์
์
" / WAS๋ "๋ด๋ถ ๋ถ์ ์ง์"
๋ฆฌ์
์
์ ๋จ์ ์์ฒญ์ ๋ฐ๋ก ์ฒ๋ฆฌํ๊ณ , ๋ณต์กํ ๊ฑด ๋ด๋ถ ๋ถ์์ ๋๊ธด๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
2. ๋ก๋๋ฐธ๋ฐ์ฑ & ์บ์ฑ ์ต์ ํ
- Web Server๋ ํ๋ก์ ์ญํ ๋ ์ํ ๊ฐ๋ฅํจ → ์ฌ๋ฌ WAS์ ์์ฒญ์ ๋ถ์ฐ (๋ก๋๋ฐธ๋ฐ์ฑ)
- ์ด๋ฏธ์ง, JS ๊ฐ์ ํ์ผ์ Web Server๊ฐ ์บ์ฑ ์ฒ๋ฆฌํด์ ๋ ๋น ๋ฅด๊ฒ ์ ๊ณต ๊ฐ๋ฅ
- → ์ฌ์ฉ์ ๊ฒฝํ ํฅ์ + ์๋ฒ ๋ถํ ๊ฐ์
3. ๋ณด์์ ์ฅ์
- WAS๋ฅผ ์ง์ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์๊ณ , Web Server๊ฐ ๋ณด์ ๊ณ์ธต ์ญํ ์ ํจ
- Nginx์์ HTTPS ์ฒ๋ฆฌํ๊ณ ๋ด๋ถ WAS์๋ HTTP ํต์ ๋ ๊ฐ๋ฅํจ
- Web Application Firewall(WAF) ๊ฐ์ ๊ธฐ๋ฅ๋ Web Server ์๋จ์์ ์ํ ๊ฐ๋ฅ
๐ก ์ค๋ฌด์์๋ ์ด๋ป๊ฒ ์ฐ์ผ๊น?
- ์ ์ ์ฝํ ์ธ ๋ CDN์ด๋ Web Server์์ ์ฒ๋ฆฌ (์์ฒญ ๋น ๋ฆ)
- ๋์ ์์ฒญ์ REST API ์๋ฒ(WAS)๋ก ์ ๋ฌ
- ํ๋ก ํธ์๋ SPA + ๋ฐฑ์๋ API ๋ถ๋ฆฌ๋๋ฉด์ ์ด ๊ตฌ์กฐ ๋ ๋ณดํธํ๋จ
- ๋ํ์ ์ธ ์ฌ๋ก: React + Express + Nginx, Vue + Spring Boot + Apache
์ ๊ฐ ์ค๋ฌด์์ ์ฌ์ฉํ๋ ๊ฑด ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์
- Nginx ์ค์นํด์ HTTPS ์ค์
- Node.js ์ฑ์ WAS ์ญํ
- PostgreSQL์ DB
์ด๋ ๊ฒ ์ฌ์ฉํ๊ณ ์์ต๋๋ค!
๊ฒฐ๊ตญ ์น ์๋ฒ์ WAS๋ ๊ฒฝ์ ๊ด๊ณ๊ฐ ์๋๋ผ, ๊ฐ์์ ๊ฐ์ ์ ์ด๋ ค ์ต์ ์ ์น ์๋น์ค ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ํํธ๋๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์น ์๋ฒ๋ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์ ์ ์์์ ์ฒ๋ฆฌํ๊ณ , WAS๋ ๋ณต์กํ ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํจ์ผ๋ก์จ ์ ์ฒด์ ์ธ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ, ์ ์ง ๋ณด์์ฑ๊น์ง ์ก์ ์ ์๊ฒ ๋์์ค๋ค๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค์ ใ
ใ