๐ŸŒ ๋„คํŠธ์›Œํฌ 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๊ฐ€์ง€์•ผ.

  1. ๋ณด์•ˆ (์ˆ˜๋ฌธ์žฅ ์—ญํ• )
    • ์ง„์งœ ์„œ๋ฒ„(VM)์˜ IP๋ฅผ ๊ฝ๊ฝ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์–ด. ์™ธ๋ถ€ ์‚ฌ๋žŒ์€ ํ”„๋ก์‹œ(VIP) ์ฃผ์†Œ๋งŒ ์•Œ ๋ฟ, ์‹ค์ œ ๋‚ด๋ถ€ ์„œ๋ฒ„๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ชฐ๋ผ. ๊ณต๊ฒฉ์ž๊ฐ€ ๋“ค์–ด์˜ค๋ ค๊ณ  ํ•ด๋„ ํ”„๋ก์‹œ์—์„œ ๋จผ์ € ๊ฑธ๋Ÿฌ์ง€์ง€.
  2. ๋ถ€ํ•˜ ๋ถ„์‚ฐ (๊ตํ†ต ์ •๋ฆฌ)
    • ๋„ค๊ฐ€ ํ•˜๋Š” LB ์ž‘์—…์ฒ˜๋Ÿผ, ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆด ๋•Œ "๋„ˆ๋Š” 1๋ฒˆ ์„œ๋ฒ„๋กœ ๊ฐ€๊ณ , ๋„ˆ๋Š” 2๋ฒˆ์œผ๋กœ ๊ฐ€!"๋ผ๊ณ  ๊ตํ†ต ์ •๋ฆฌ๋ฅผ ํ•ด์ค˜์„œ ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง€๋Š” ๊ฑธ ๋ง‰์•„์ค˜.
  3. ์บ์‹ฑ (๊ธฐ์–ต๋ ฅ)
    • ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ”„๋ก์‹œ๊ฐ€ ๋ฏธ๋ฆฌ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€, ์ง„์งœ ์„œ๋ฒ„ํ•œํ…Œ ์•ˆ ๋ฌผ์–ด๋ณด๊ณ  ์ž๊ธฐ๊ฐ€ ๋ฐ”๋กœ ๋‹ตํ•ด์ค˜. ์†๋„๊ฐ€ ํ›จ์”ฌ ๋นจ๋ผ์ง€์ง€!

๐Ÿ’ก nginx ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ 5,6,7 ๊ณ„์ธต์„ ํ•œ๋ฒˆ์— ๋‹ค ํ• ๊นŒ?

์˜ˆ์ „์—๋Š” ์•”ํ˜ธํ™”๋งŒ ์ „๋‹ดํ•˜๋Š” ํ•˜๋“œ์›จ์–ด(SSL ๊ฐ€์†๊ธฐ)๊ฐ€ ๋”ฐ๋กœ ์žˆ๊ธฐ๋„ ํ–ˆ์–ด. ํ•˜์ง€๋งŒ ์š”์ฆ˜์€ ์„œ๋ฒ„ ์„ฑ๋Šฅ์ด ์›Œ๋‚™ ์ข‹์•„์ ธ์„œ Nginx ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ด ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ๋‹ค ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฑฐ์ง€.

  1. ํšจ์œจ์„ฑ: ํ•œ ๊ณณ์—์„œ ์•”ํ˜ธํ™”๋„ ํ’€๊ณ (L6), ์ฃผ์†Œ๋„ ํ™•์ธํ•˜๊ณ (L7), ์„ธ์…˜๋„ ๊ด€๋ฆฌํ•˜๋ฉด(L5) ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•ด.
  2. ์œ ์—ฐ์„ฑ: ํ•˜๋“œ์›จ์–ด ์žฅ๋น„๋Š” ์„ค์ •์„ ๋ฐ”๊พธ๊ธฐ ํž˜๋“ค์ง€๋งŒ, Nginx๋Š” ๋„ค๊ฐ€ nginx.conf ํŒŒ์ผ๋งŒ ์ˆ˜์ •ํ•˜๊ณ  reload ํ•˜๋ฉด ๋ฐ”๋กœ ๋ฐ˜์˜๋˜๋‹ˆ๊นŒ ์šด์˜ํ•˜๊ธฐ๊ฐ€ ์••๋„์ ์œผ๋กœ ์ข‹์ง€.
๊ณ„์ธต Nginx๊ฐ€ ํ•˜๋Š” ์ผ (๊ธฐ๋Šฅ) ์‹ค๋ฌด์ ์ธ ์˜ˆ์‹œ
5๊ณ„์ธต (Session) ์—ฐ๊ฒฐ ๊ด€๋ฆฌ (Connection) ์‚ฌ์šฉ์ž์™€์˜ ์—ฐ๊ฒฐ์„ ์–ผ๋งˆ๋‚˜ ์œ ์ง€ํ• ์ง€(Keep-alive), ํƒ€์ž„์•„์›ƒ์€ ์–ธ์ œ ๋‚ผ์ง€ ๊ด€๋ฆฌํ•ด.
6๊ณ„์ธต (Presentation) ์•”ํ˜ธํ™” ํ•ด์ œ (SSL Decryption) HTTPS ์ธ์ฆ์„œ๋ฅผ ์ฝ์–ด์„œ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” HTTP๋กœ ๋ณ€ํ™˜ํ•ด.
7๊ณ„์ธต (Application) ์ฝ˜ํ…์ธ  ํ•ด์„ ๋ฐ ๋ผ์šฐํŒ… "์–ด? ์š”์ฒญ ์ฃผ์†Œ๊ฐ€ /api๋„ค? ๊ทธ๋Ÿผ A์„œ๋ฒ„๋กœ ๋ณด๋‚ด์•ผ์ง€"๋ผ๊ณ  ๋ฐ์ดํ„ฐ ๋‚ด์šฉ์„ ๋ณด๊ณ  ํŒ๋‹จํ•ด.

 

+ Recent posts