๐ ๋คํธ์ํฌ OSI 7๊ณ์ธต ํ๋์ ๋ณด๊ธฐ
| ๊ณ์ธต | ์ด๋ฆ (Layer) | ์ค๋ฌด ๊ด๋ จ ์์ | ์ญํ ์ค๋ช |
| 7 | Application | Nginx Config, HTTP/HTTPS | ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์๋น์ค(์น, ์ฑ)์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด. URL ๊ฒฝ๋ก ๋ถ๊ธฐ๋ ์ธ์ ์ค์ ์ด ์ฌ๊ธฐ์ผ. |
| 6 | Presentation | SSL/TLS ์ํธํ (HTTPS) | ๋ฐ์ดํฐ๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ๋ ๋ฐฉ์์ผ๋ก ๋ณํํ๊ฑฐ๋ ์ํธํํด. Nginx์์ ์ธ์ฆ์ ์ ์ฉํ๋ ๋จ๊ณ์ง. |
| 5 | Session | ์ธ์ ์ ์ง ์๊ฐ (Timeout) | ํต์ ํ๋ ์ ๋๋จ์ ์ฐ๊ฒฐ์ ๋งบ๊ณ ๋๊ณ , ์ผ๋ง๋ ์ ์งํ ์ง ๊ด๋ฆฌํด. |
| 4 | Transport | L4 LB, Port(80/443), TCP | ํฌํธ ๋ฒํธ๋ฅผ ๋ณด๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์๋น์ค(VM)๋ก ๋ฐฐ๋ฌํด. ๋ค๊ฐ ํฌํ์์ VIP ์ฎ๋ ์์ ์ด ์ด๊ฑฐ์ผ! |
| 3 | Network | ๋ฐฉํ๋ฒฝ(IP), Router, L3 | IP ์ฃผ์๋ฅผ ๋ณด๊ณ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ค. ๋ฐฉํ๋ฒฝ์์ ์ถ๋ฐ์ง/๋์ฐฉ์ง IP๋ก ํ์ฉ ์ฌ๋ถ ๊ฒฐ์ ํ๋ ๋จ๊ณ์ง. |
| 2 | Data Link | MAC ์ฃผ์, ์ค์์น(L2) | ์ธ์ ํ ์ฅ๋น๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํด. (๋ณดํต ํฌํ ๋๋จธ ํด๋ผ์ฐ๋ ์ธํ๋ผ๊ฐ ์์์ ํด์ค) |
| 1 | Physical | ๋์ , ๊ด์ผ์ด๋ธ, ํ๋ธ | 0๊ณผ 1์ ์ ๊ธฐ์ ์ ํธ๊ฐ ํ๋ฅด๋ ๋ฌผ๋ฆฌ์ ์ธ ์ ๋ก ์์ฒด๋ฅผ ์๋ฏธํด. |
๐ ์๋น์ค๋ณ ๋คํธ์ํฌ OSI 7๊ณ์ธต ํ๋์ ๋ณด๊ธฐ
| ๊ณ์ธต | HTTP/HTTPS (์น) | SFTP / FTP (ํ์ผ ์ ์ก) | SSH (์๊ฒฉ ์ ์) |
| 7 (Application) | HTTP/HTTPS (์น ํ์ด์ง ์์ฒญ) | SFTP/FTP (ํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋) | SSH (๋ช ๋ น์ด ์ ๋ฌ) |
| 6 (Presentation) | ASCII, JPEG, TLS/SSL | ๋ฐ์ดํฐ ํํ ๋ฐฉ์, SSH Encryption | ๋ฐ์ดํฐ ์ํธํ ๋ฐ ์์ถ |
| 5 (Session) | ์น ์ธ์ ๊ด๋ฆฌ, Cookie | ํ์ผ ์ ์ก ์ธ์ ์ ์ง/์ ์ด | ํฐ๋ฏธ๋ ์ฐ๊ฒฐ ์ธ์ ๊ด๋ฆฌ |
| 4 (Transport) | TCP (Port 80/443) | TCP (Port 21/22) | TCP (Port 22) |
| 3 (Network) | IP ์ฃผ์ (๋ชฉ์ ์ง ์๋ฒ ์ฐพ๊ธฐ) | IP ์ฃผ์ (ํ์ผ ์๋ฒ ์ฐพ๊ธฐ) | IP ์ฃผ์ (๋์ ํธ์คํธ ์ฐพ๊ธฐ) |
| 2 (Data Link) | MAC ์ฃผ์ (์ธ์ ์ฅ๋น ํต์ ) | MAC ์ฃผ์ (์ธ์ ์ฅ๋น ํต์ ) | MAC ์ฃผ์ (์ธ์ ์ฅ๋น ํต์ ) |
| 1 (Physical) | ๋์ , ๊ด์ผ์ด๋ธ | ๋์ , ๊ด์ผ์ด๋ธ | ๋์ , ๊ด์ผ์ด๋ธ |
๐ ํ์ฌ์์ ์ฃผ๋ก ํ๋ L3~L7 ๊ณ์ธต
| ์์ ๋ด์ฉ | ์ฃผ์ ํ๊ฒ ๋ฐ ์๋ณ๊ฐ | OSI 7๊ณ์ธต | ๋น๊ณ |
| ๋ฐฉํ๋ฒฝ | ์ถ๋ฐ์ง/๋์ฐฉ์ง IP, Port | 3๊ณ์ธต(Network) / 4๊ณ์ธต(Transport) |
IP ๊ธฐ๋ฐ์ L3, Port ๊ธฐ๋ฐ ์ ์ด๋ L4์ ํด๋น
|
| Network LB (VIP ๊ตฌ์ฑ) | VIP(Virtual IP), VM ์ด์คํ | 4๊ณ์ธต (Transport) |
๋ณดํต ํฌํ์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ LB๋ Port/Protocol ๊ธฐ๋ฐ์ L4 Load Balancer
|
| Nginx Proxy ์ค์ & ์ ๊ทธ๋ ์ด๋ | ๋๋ฉ์ธ, URL ๊ฒฝ๋ก, HTTP ํค๋ | 7๊ณ์ธต (Application) | ์ธ์ ์๊ฐ ์ค์ , URL ๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ผ์ฐํ , ๋ณด์ ํค๋ ์ถ๊ฐ ๋ฑ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ |
- ๋ฐฉํ๋ฒฝ (L3/L4): IP ์ฃผ์๋ฅผ ๋ณด๊ณ ๊ธธ์ ๋ง๊ฑฐ๋ ์ฌ๋ ๊ฑด ๋คํธ์ํฌ ๊ณ์ธต(L3)์ด๊ณ , ํน์ ์๋น์ค ํฌํธ(TCP/UDP)๊น์ง ์ ์ดํ๋ ๊ฑด ์ ์ก ๊ณ์ธต(L4)์ด์ผ. ๋ณดํต ๋ฌถ์ด์ 'L3/L4 ๋ฐฉํ๋ฒฝ'์ด๋ผ๊ณ ๋ง์ด ๋ถ๋ฌ.
- Network LB (L4): VIP๋ฅผ ๋ง๋ค๊ณ ์๋ฒ๋ค์ ์ฎ๋ ๊ฑด, ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํฌํธ๋ก ๋ค์ด์ค๋๋์ ๋ฐ๋ผ ๋ถ์ฐํด ์ฃผ๋ ์ญํ ์ ํด.
- Nginx reverse proxy server (L7): Nginx๋ example.com/api์ฒ๋ผ URL ๊ฒฝ๋ก๋ฅผ ๋ณด๊ณ ๋ถ๊ธฐํ๊ฑฐ๋, SSL ์ธ์ฆ์๋ฅผ ์ ์ฉํ๋ ๋ฑ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต(L7)์ ๋ณต์กํ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์์ฃผ ๋๋ํ ๋ ์์ด์ผ.
๐ L4 ๋ก๋๋ฐธ๋ฐ์ฑ์ ๋ถ์ฐ ์๋ฆฌ
L4(Transport Layer)๋ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ณด๊ณ ํธ๋ํฝ์ ์ด๋๋ก ๋ณด๋ผ์ง ๊ฒฐ์ ํด. ๋ค๊ฐ ์ค์ ํ ์์ ์ ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ ธ.
- ํฌํธ ๊ธฐ๋ฐ ๋ถ์ฐ: ์ธ๋ถ์์ VIP์ 80๋ฒ ํฌํธ๋ก ์ ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, ๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ค๊ฐ ๋ฌถ์ด๋์ VM๋ค์ 80๋ฒ ํฌํธ๋ก ํธ๋ํฝ์ ์ ๋ฌํด ์ฃผ๋ ๊ฑฐ์ผ.
- ๋ถํ ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ: ์ด๋ ๋ก๋๋ฐธ๋ฐ์๋ ๋ด๋ถ์ ์ผ๋ก ์ค์ ๋ ๊ท์น(์: Round Robin - ์์ฐจ์ ์ ๋ฌ, Least Connection - ์ ์ ์ ์ ๊ณณ ์ฐ์ ์ ๋ฌ)์ ๋ฐ๋ผ 1๋ฒ VM์ผ๋ก ๋ณด๋ผ์ง 2๋ฒ VM์ผ๋ก ๋ณด๋ผ์ง ๊ฒฐ์ ํ๊ฒ ๋ผ.
- Health Check: ๋ค๊ฐ ํฌํธ๋ฅผ ์ง์ ํด๋๋ฉด ๋ก๋๋ฐธ๋ฐ์๋ "์ด ์๋ฒ 80๋ฒ ํฌํธ ์ด์์๋?" ํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฐ๋ฌ๋ด. ๋ง์ฝ 1๋ฒ ์๋ฒ์ 80๋ฒ ํฌํธ๊ฐ ์ฃฝ์ผ๋ฉด ์๋์ผ๋ก 2๋ฒ์ผ๋ก๋ง ํธ๋ํฝ์ ๋ณด๋ด๋ ์ค๋งํธํ ์ญํ ๋ ์ํํ์ง!
๐กL4 Load Balancer(๋จ์์ ๋ฌ) + Nginx Reverse Proxy(์์ธ์ ์ด)
๐ ๏ธ Nginx Config์์ ์ธ์ /ํ์์์ ๊ด๋ จ ๋ถ๋ถ
- keepalive_timeout: ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ์ผ๋ง๋ ์ ์งํ ์ง ๊ฒฐ์ (์ธ์ ์ ์ง์ ๊ธฐ์ด)
- proxy_read_timeout / proxy_send_timeout: ๋ฐฑ์๋ ์๋ฒ(VM)์ ํต์ ํ ๋ ์ผ๋ง๋ ๊ธฐ๋ค๋ ค์ค์ง ์ค์
- Sticky Session (Upstream): ํน์ ์ฌ์ฉ์๊ฐ ๊ณ์ ๊ฐ์ ์๋ฒ๋ก ๊ฐ๊ฒ ํ๋ ค๋ฉด ip_hash ๊ฐ์ ์ค์ ์ ์ฐ๊ธฐ๋ ํด.
๐ ๏ธ Proxy Server๋ฅผ ๋๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น?
์ค๊ฐ์ ๋ค๋ฆฌ ํ๋๋ฅผ ๋ ๋์ผ๋ฉด ๋๋ ค์ง ๊ฒ ๊ฐ์๋ฐ ์ ์ธ๊น? ์ด์ ๋ ํฌ๊ฒ 3๊ฐ์ง์ผ.
- ๋ณด์ (์๋ฌธ์ฅ ์ญํ )
- ์ง์ง ์๋ฒ(VM)์ IP๋ฅผ ๊ฝ๊ฝ ์จ๊ธธ ์ ์์ด. ์ธ๋ถ ์ฌ๋์ ํ๋ก์(VIP) ์ฃผ์๋ง ์ ๋ฟ, ์ค์ ๋ด๋ถ ์๋ฒ๊ฐ ์ด๋์ ์๋์ง ๋ชฐ๋ผ. ๊ณต๊ฒฉ์๊ฐ ๋ค์ด์ค๋ ค๊ณ ํด๋ ํ๋ก์์์ ๋จผ์ ๊ฑธ๋ฌ์ง์ง.
- ๋ถํ ๋ถ์ฐ (๊ตํต ์ ๋ฆฌ)
- ๋ค๊ฐ ํ๋ LB ์์ ์ฒ๋ผ, ํธ๋ํฝ์ด ๋ชฐ๋ฆด ๋ "๋๋ 1๋ฒ ์๋ฒ๋ก ๊ฐ๊ณ , ๋๋ 2๋ฒ์ผ๋ก ๊ฐ!"๋ผ๊ณ ๊ตํต ์ ๋ฆฌ๋ฅผ ํด์ค์ ์๋ฒ๊ฐ ํฐ์ง๋ ๊ฑธ ๋ง์์ค.
- ์บ์ฑ (๊ธฐ์ต๋ ฅ)
- ์์ฃผ ์์ฒญ๋๋ ๋ฐ์ดํฐ๋ ํ๋ก์๊ฐ ๋ฏธ๋ฆฌ ๊ฐ์ง๊ณ ์๋ค๊ฐ, ์ง์ง ์๋ฒํํ ์ ๋ฌผ์ด๋ณด๊ณ ์๊ธฐ๊ฐ ๋ฐ๋ก ๋ตํด์ค. ์๋๊ฐ ํจ์ฌ ๋นจ๋ผ์ง์ง!
๐ก nginx ์ํํธ์จ์ด๊ฐ 5,6,7 ๊ณ์ธต์ ํ๋ฒ์ ๋ค ํ ๊น?
์์ ์๋ ์ํธํ๋ง ์ ๋ดํ๋ ํ๋์จ์ด(SSL ๊ฐ์๊ธฐ)๊ฐ ๋ฐ๋ก ์๊ธฐ๋ ํ์ด. ํ์ง๋ง ์์ฆ์ ์๋ฒ ์ฑ๋ฅ์ด ์๋ ์ข์์ ธ์ Nginx ๊ฐ์ ์ํํธ์จ์ด๊ฐ ์ด ๋ณต์กํ ๊ณ์ฐ์ ๋ค ๊ฐ๋นํ ์ ์๊ฒ ๋ ๊ฑฐ์ง.
- ํจ์จ์ฑ: ํ ๊ณณ์์ ์ํธํ๋ ํ๊ณ (L6), ์ฃผ์๋ ํ์ธํ๊ณ (L7), ์ธ์ ๋ ๊ด๋ฆฌํ๋ฉด(L5) ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํจ์ฌ ๋น ๋ฅด๊ณ ๊ด๋ฆฌ๊ฐ ํธํด.
- ์ ์ฐ์ฑ: ํ๋์จ์ด ์ฅ๋น๋ ์ค์ ์ ๋ฐ๊พธ๊ธฐ ํ๋ค์ง๋ง, Nginx๋ ๋ค๊ฐ nginx.conf ํ์ผ๋ง ์์ ํ๊ณ reload ํ๋ฉด ๋ฐ๋ก ๋ฐ์๋๋๊น ์ด์ํ๊ธฐ๊ฐ ์๋์ ์ผ๋ก ์ข์ง.
| ๊ณ์ธต | Nginx๊ฐ ํ๋ ์ผ (๊ธฐ๋ฅ) | ์ค๋ฌด์ ์ธ ์์ |
| 5๊ณ์ธต (Session) | ์ฐ๊ฒฐ ๊ด๋ฆฌ (Connection) | ์ฌ์ฉ์์์ ์ฐ๊ฒฐ์ ์ผ๋ง๋ ์ ์งํ ์ง(Keep-alive), ํ์์์์ ์ธ์ ๋ผ์ง ๊ด๋ฆฌํด. |
| 6๊ณ์ธต (Presentation) | ์ํธํ ํด์ (SSL Decryption) | HTTPS ์ธ์ฆ์๋ฅผ ์ฝ์ด์ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฝ์ ์ ์๋ HTTP๋ก ๋ณํํด. |
| 7๊ณ์ธต (Application) | ์ฝํ ์ธ ํด์ ๋ฐ ๋ผ์ฐํ | "์ด? ์์ฒญ ์ฃผ์๊ฐ /api๋ค? ๊ทธ๋ผ A์๋ฒ๋ก ๋ณด๋ด์ผ์ง"๋ผ๊ณ ๋ฐ์ดํฐ ๋ด์ฉ์ ๋ณด๊ณ ํ๋จํด. |