๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIP

๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ ˆํ”ฝ ์ฒ˜๋ฆฌ - ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ฐœ๋… ์ •๋ฆฌ

by GREEN๋‚˜๋ฌด 2025. 2. 5.
728x90

๐Ÿš€ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด, ์„œ๋ฒ„๋Š” ์–ด๋–ป๊ฒŒ ํ™•์žฅํ• ๊นŒ?

์„œ๋น„์Šค ์šด์˜ ์ค‘ ์„œ๋ฒ„๋Š” ๋ช‡ ๋Œ€๊ฐ€ ํ•„์š”ํ• ๊นŒ?
โœ… ์‚ฌ์šฉ์ž๊ฐ€ ์ ๋‹ค๋ฉด 1๋Œ€์˜ ์„œ๋ฒ„๋กœ๋„ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ,
โœ… ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€๊ณ , ์‹ฌํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋Ÿด ๋•Œ "์Šค์ผ€์ผ ์—…(Scale-Up)" ๋˜๋Š” "์Šค์ผ€์ผ ์•„์›ƒ(Scale-Out)"์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ—๏ธ ์„œ๋ฒ„ ํ™•์žฅ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ์Šค์ผ€์ผ ์—… (Scale-Up)

โœ” ํ˜„์žฌ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•
โœ” CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ ํ–ฅ์ƒ
โœ” (์ˆ˜์ง ํ™•์žฅ, Vertical Scaling)

 

2๏ธโƒฃ ์Šค์ผ€์ผ ์•„์›ƒ (Scale-Out)

โœ” ์„œ๋ฒ„ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ ค ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•
โœ” ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
โœ” (์ˆ˜ํ‰ ํ™•์žฅ, Horizontal Scaling)

๐Ÿ’ก ์Šค์ผ€์ผ ์•„์›ƒ ์‹œ "๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(Load Balancer)"๊ฐ€ ํ•„์š”


๐Ÿ”€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(Load Balancer)๋ž€?

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ : ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐํ•˜์—ฌ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š”๊ธฐ์ˆ .   

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ : ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์žฅ๋น„.

โœ… ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ(Load Balancing) ์ฃผ์š” ์—ญํ• 

1๏ธโƒฃ ์š”์ฒญ ๋ถ„์‚ฐ

์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐ →

โœ”  ๋ถ€ํ•˜ ๋ถ„์‚ฐ : ํŠน์ • ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€

โœ”  ํ™•์žฅ์„ฑ : ์„ฑ๋Šฅ ๋ฐ ์†๋„ ์ตœ์ ํ™”

2๏ธโƒฃ ํ—ฌ์Šค ์ฒดํฌ (Health Check)

  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•จ.
 โœ”   ์ •์ƒ์ ์ธ ์‘๋‹ต์ด ์—†์œผ๋ฉด ํ•ด๋‹น ์„œ๋ฒ„ ์ œ์™ธ
 โœ”   ์žฅ์•  ๊ฐ์ง€ ์‹œ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜

 

3๏ธโƒฃ SSL ์ฒ˜๋ฆฌ

โœ”  HTTPS๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๊ฐ€๋Šฅ

โœ”  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ → ์›น ์„œ๋ฒ„ ๋ถ€๋‹ด ๊ฐ์†Œ

4๏ธโƒฃ ๋ถ€์ • ์š”์ฒญ ๋Œ€์‘

โœ”  ๋ถ€์ • ์š”์ฒญ(DoS, DDoS ๊ณต๊ฒฉ ๋“ฑ) ์ฐจ๋‹จ

โœ”  ์›น ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ๋จผ์ € ํ•„ํ„ฐ๋ง


๐Ÿ”น๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์œ ํ˜•

โœ…๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” 'OSI 7 Layer๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ€ํ•˜๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐํ• ์ง€'์— ๋”ฐ๋ผ ์ข…๋ฅ˜๊ฐ€ ๋‚˜๋‰œ๋‹ค. 
2, 3๊ณ„์ธต์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๋ฉด ๊ฐ L2, L3์ธ ๋ฐฉ์‹์ด๋‹ค. 

์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ์œ„ ๊ณ„์ธต์ผ์ˆ˜๋ก ์„ฌ์„ธํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ํ•˜์œ„ ๊ณ„์ธต์ผ์ˆ˜๋ก ๊ฐ„๋‹จํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

โœ… ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ : L4 vs L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ

๊ธฐ์ค€ L4 (Transport Layer) L7 (Application Layer)
์†๋„ ๋น ๋ฆ„ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ
ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๊ธฐ์ค€ IP, ํฌํŠธํ”„๋กœํ† ์ฝœ URL, ์ฟ ํ‚คํ—ค๋”์š”์ฒญ ๋‚ด์šฉ
์„ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๋ถˆ๊ฐ€๋Šฅ ๊ฐ€๋Šฅ
์ฃผ์š” ํ™œ์šฉ TCP/UDP ์„œ๋น„์Šค๊ฒŒ์ž„ ์„œ๋ฒ„ API, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์›น ์„œ๋น„์Šค

ํ˜„์žฌ L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(ALB ๋“ฑ)๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์ถ”์„ธ. ์„ธ์…˜ ์œ ์ง€์ •๊ตํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค์— ์ ํ•ฉ


โœ… L4 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ๋น ๋ฅด๊ณ  ๋‹จ์ˆœํ•œ ๋ถ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” HTTP ์š”์ฒญ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋ถ„์„ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
โœ… ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด๊ณผ ์„œ๋น„์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ L4 ๋˜๋Š” L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

L4 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ๋ฒ•

 L4 Load Balancer = CLB(Connection Load Balancer), SLB(Session Load Balancer)

๋„คํŠธ์›Œํฌ ๊ณ„์ธต์ด๋‚˜ ํŠธ๋žœ์ŠคํฌํŠธ ๊ณ„์ธต์˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐํ•œ๋‹ค. 

์ฆ‰, IP์ฃผ์†Œ๋‚˜ ํฌํŠธ๋ฒˆํ˜ธ, MAC์ฃผ์†Œ, ์ „์†ก ํ”„๋กœํ† ์ฝœ ๋“ฑ์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆ„๊ณ  ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์ˆ˜ํ–‰.

  1. ๋ผ์šด๋“œ ๋กœ๋นˆ(Round Robin)
    • ์„œ๋ฒ„์— ์ˆœ์ฐจ์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐ
    • ๊ท ๋“ฑ ๋ฐฐ๋ถ„์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„œ๋ฒ„ ์„ฑ๋Šฅ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์Œ
  2. ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜(Weighted Round Robin)
    • ์„ฑ๋Šฅ์ด ๋†’์€ ์„œ๋ฒ„์— ๋” ๋งŽ์€ ์š”์ฒญ์„ ๋ฐฐ์ •
  3. ์ตœ์†Œ ์—ฐ๊ฒฐ(Least Connection)
    • ํ˜„์žฌ ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌ
    • ์‹ค์‹œ๊ฐ„ ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ 
  4. ์‘๋‹ต ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜(Response Time)
    • ์‘๋‹ต ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์„œ๋ฒ„์— ์šฐ์„ ์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌ
  5. ํ•ด์‹œ(Hash) ๊ธฐ๋ฐ˜
    • ํŠน์ • ํด๋ผ์ด์–ธํŠธ(IP ๋“ฑ)๋Š” ํŠน์ • ์„œ๋ฒ„์—๋งŒ ์—ฐ๊ฒฐ
  6. ๋Œ€์—ญํญ(Bandwidth) ๊ธฐ๋ฐ˜
    • ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ๊ณ ๋ คํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ

 

L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ๋ฒ•

L4 Load Balancer์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋ฉฐ OSI 7๊ณ„์ธต์˜ ํ”„๋กœํ† ์ฝœ์„ ๋ฐ”ํƒ•์œผ๋กœ๋„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
HTTP ํ—ค๋”, ์ฟ ํ‚ค ๋“ฑ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ถ„์„ํ•ด ์ •๊ตํ•œ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ

  1. URL Switching
    • ํŠน์ • URL ํŒจํ„ด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ
    • ์˜ˆ) /images/* ์š”์ฒญ์€ ์ด๋ฏธ์ง€ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ
  2. Context Switching
    • ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ์œ ํ˜•์— ๋”ฐ๋ผ ์„œ๋ฒ„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์—ฐ๊ฒฐ
    • ์˜ˆ) .jpg, .png ์š”์ฒญ์€ ๋ฏธ๋””์–ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ
  3. ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์ง€์†์„ฑ(Persistence with Cookies)
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „์— ์—ฐ๊ฒฐํ–ˆ๋˜ ์„œ๋ฒ„๋กœ ์ง€์†์ ์œผ๋กœ ์—ฐ๊ฒฐ

 

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์žฅ์  & ๋‹จ์ 

โœ… ์žฅ์ 

โœ” ์„œ๋ฒ„ ๋‹ค์šด ์‹œ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜์—ฌ ์•ˆ์ •์„ฑ ํ™•๋ณด
โœ” ํŠธ๋ž˜ํ”ฝ์„ ํšจ์œจ์ ์œผ๋กœ ๋ถ„์‚ฐํ•ด ์„ฑ๋Šฅ ํ–ฅ์ƒ
โœ” ํ™•์žฅ์„ฑ(Scale-out) ์šฉ์ด

โŒ ๋‹จ์ 

โœ– ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฌธ์ œ (Sticky Session ํ•„์š”)

  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋ ค์šด ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์„ธ์…˜์ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ์žฅ๋น„์— ์ €์žฅ์ด ๋˜๋Š” ๊ฒฝ์šฐ, ์ถ”ํ›„ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์ ‘์†ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜์ด ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์„œ๋ฒ„์— ์•ก์„ธ์Šค ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์„ธ์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜์„ ๊ณ ์ •(session sticky)ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ์ •๋œ ์„ธ์…˜์˜ ๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ณ ์ •ํ•œ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค.

โœ– ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ž์ฒด๊ฐ€ ๋‹จ์ผ ์žฅ์• ์ (SPOF, Single Point of Failure)์ด ๋  ์ˆ˜ ์žˆ์Œ
โœ– ๋†’์€ ์„ฑ๋Šฅ์„ ์›ํ•  ๊ฒฝ์šฐ ๋น„์šฉ ์ฆ๊ฐ€

 

L4/L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ์„ฑ๋Šฅ ์ง€ํ‘œ

  • ์ดˆ๋‹น ์—ฐ๊ฒฐ ์ˆ˜ (CPS: Connections per Second)
    • ์ดˆ๋‹น ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ TCP ์—ฐ๊ฒฐ ์ˆ˜
  • ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ (Concurrent Connections)
    • ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋™์‹œ ์„ธ์…˜ ์ˆ˜
  • ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰ (Throughput)
    • ์ดˆ๋‹น ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋Ÿ‰ (bps ๋˜๋Š” pps ๋‹จ์œ„)

 


๐Ÿ”น AWS ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ข…๋ฅ˜

AWS์—์„œ๋Š” ELB(Elastic Load Balancing) ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ œ๊ณต.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ํŠน์ง• ์‚ฌ์šฉ ์‚ฌ๋ก€

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์œ ํ˜• ํŠน์ง• ์ด์šฉ์‚ฌ๋ก€
ALB (Application Load Balancer) L7 ๊ธฐ๋ฐ˜
HTTP/HTTPS ํŠธ๋ž˜ํ”ฝ ์ตœ์ ํ™”, ๊ณ ๊ธ‰ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ ์ œ๊ณต
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, API ์„œ๋ฒ„
NLB (Network Load Balancer) L4 ๊ธฐ๋ฐ˜
์ดˆ๊ณ ์„ฑ๋Šฅ, ์ €์ง€์—ฐ, TCP/UDP ์ง€์›
๊ฒŒ์ž„ ์„œ๋ฒ„, ๊ธˆ์œต ์‹œ์Šคํ…œ
CLB (Classic Load Balancer) ์˜ˆ์ „ ๋ฐฉ์‹, ํ˜„์žฌ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
๋ณด์•ˆ ๋ฐ ๋„คํŠธ์›Œํฌ ๊ฐ€์ƒ ์–ดํ”Œ๋ผ์ด์–ธ์Šค์šฉ
๊ธฐ์กด AWS ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜ ํ•„์š” ์‹œ

aws์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์œ ํ˜• ์ •๋ฆฌ
1. Application Load Balancer (ALB)
• ํŠน์ง•: HTTP ๋ฐ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ (API ์„œ๋ฒ„)
• ์ž‘๋™ ๋ฐฉ์‹: ์š”์ฒญ(Request) ์ˆ˜์ค€์—์„œ ์ž‘๋™
• ์ ์šฉ ๋Œ€์ƒ:
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
  • ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ๊ณ ๊ธ‰ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ ํ•„์š” ์‹œ
• ๋‹ค์ด์–ด๊ทธ๋žจ: (Application Load Balancer ๊ตฌ์กฐ ํฌํ•จ)
• ์ƒ์„ฑ ๊ฐ€๋Šฅ


2. Network Load Balancer (NLB)
• ํŠน์ง•: ์ดˆ๊ณ ์„ฑ๋Šฅ, ์ €์ง€์—ฐ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ(WebSocket ์„œ๋ฒ„)
• ์ž‘๋™ ๋ฐฉ์‹: ์—ฐ๊ฒฐ(Connection) ์ˆ˜์ค€์—์„œ ์ž‘๋™
• ์ ์šฉ ๋Œ€์ƒ:
  • ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ
  • ๋Œ€๊ทœ๋ชจ TLS ์˜คํ”„๋กœ๋”ฉ
  • ์ค‘์•™ ์ง‘์ค‘ํ™”๋œ ์ธ์ฆ์„œ ๋ฐฐํฌ
  • UDP ํŠธ๋ž˜ํ”ฝ ์ง€์›
  • ๊ณ ์ • IP ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค
• ๋‹ค์ด์–ด๊ทธ๋žจ: (Network Load Balancer ๊ตฌ์กฐ ํฌํ•จ)
• ์ƒ์„ฑ ๊ฐ€๋Šฅ


3. Gateway Load Balancer (GLB)
• ํŠน์ง•: ์„œ๋“œํŒŒํ‹ฐ ๊ฐ€์ƒ ์–ดํ”Œ๋ผ์ด์–ธ์Šค ๊ด€๋ฆฌ์— ์ ํ•ฉ
• ์ž‘๋™ ๋ฐฉ์‹: GENEVE ํ”„๋กœํ† ์ฝœ ์ง€์›
• ์ ์šฉ ๋Œ€์ƒ:
  • ๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ์–ดํ”Œ๋ผ์ด์–ธ์Šค
  • ์ •์ฑ… ๊ธฐ๋ฐ˜ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด
• ๋‹ค์ด์–ด๊ทธ๋žจ: (Gateway Load Balancer ๊ตฌ์กฐ ํฌํ•จ)
• ์ƒ์„ฑ ๊ฐ€๋Šฅ


๐ŸŽฏ ์š”์ฒญ ๋ผ์šฐํŒ…(Request Routing)

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์š”์ฒญ์„ ๋‚ด๋ถ€ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•  ๋•Œ ํฌํŠธ๋‚˜ ํ”„๋กœํ† ์ฝœ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ:
โœ… ํด๋ผ์ด์–ธํŠธ → HTTPS 80 ํฌํŠธ ์š”์ฒญ
โœ… ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ → ๋‚ด๋ถ€ ์„œ๋ฒ„๋กœ HTTP 8080 ๋ณ€ํ™˜
(SSL ์ฒ˜๋ฆฌ ๋ถ€๋‹ด์„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ!)

 

๐ŸŽƒ AWS์—์„œ ALB ์ƒ์„ฑํ•˜๊ธฐ

1๏ธโƒฃ ๊ฐ€์šฉ ์˜์—ญ ์„ค์ •

โœ” ์š”์ฒญ์„ ๋ถ„์‚ฐํ•  ๊ฐ€์šฉ ์˜์—ญ ์„ ํƒ
โœ” Public Subnet์— ์—ฐ๊ฒฐ ํ•„์ˆ˜!

2๏ธโƒฃ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •

โœ” HTTP/HTTPS ์š”์ฒญ์„ ๋ฐ›์„ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •

3๏ธโƒฃ ๋Œ€์ƒ ๊ทธ๋ฃน ์ƒ์„ฑ

โœ” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์—ฐ๊ฒฐํ•  ์›น ์„œ๋ฒ„ ๊ทธ๋ฃน ์ƒ์„ฑ
โœ” ํฌํŠธ(์˜ˆ: 8080) ์„ค์ •
โœ” ํ—ฌ์Šค ์ฒดํฌ(Health Check) ๊ฒฝ๋กœ ์ž…๋ ฅ → ์ •๊ธฐ์ ์ธ ์„œ๋ฒ„ ์ƒํƒœ ๊ฒ€์‚ฌ

4๏ธโƒฃ ๋ฆฌ์Šค๋„ˆ ๋ฐ ๋ผ์šฐํŒ… ์„ค์ •

โœ” ๋ฆฌ์Šค๋„ˆ ์ƒ์„ฑ (์˜ˆ: HTTP 80)
โœ” ์ƒ์„ฑํ•œ ๋Œ€์ƒ ๊ทธ๋ฃน๊ณผ ์—ฐ๊ฒฐ

โœ… ALB ์ƒ์„ฑ ํ›„, DNS ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ์ ‘์† ๊ฐ€๋Šฅ!


๐Ÿ”„ ์˜คํ† ์Šค์ผ€์ผ๋ง ( Auto Scaling)

โœ… ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ฐœ๋…

 โœ”  ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ EC2(์„œ๋ฒ„์ธ์Šคํ„ด์Šค๋ฅผ ํ™•์žฅํ•˜๊ณ ,
 โœ”  ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ์†Œํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ค„์—ฌ ๋น„์šฉ ์ ˆ๊ฐ์ด ๊ฐ€๋Šฅ.
 โœ”  AWS ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน(ASG) ํ™œ์šฉ ๊ฐ€๋Šฅ

โœ… ์˜คํ†  ์Šค์ผ€์ผ๋ง ์žฅ์ 

โœ”  ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„ ์ถ”๊ฐ€

โœ”  ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€

โœ”  ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ ์‹œ ์ž๋™์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์„œ๋ฒ„ ์‚ญ์ œ (๋น„์šฉ ์ ˆ๊ฐ)

โœ”  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(ALB)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ์ž๋™์œผ๋กœ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ

 

 


 

๐Ÿ”ฅ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ vs ์˜คํ†  ์Šค์ผ€์ผ๋ง

๊ธฐ๋Šฅ ์„ค๋ช…

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐ
์˜คํ†  ์Šค์ผ€์ผ๋ง (Auto Scaling) ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€/์‚ญ์ œํ•˜์—ฌ ํ™•์žฅ

โœ… ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ → ์„œ๋ฒ„ ์ž๋™ ์ถ”๊ฐ€
โœ… ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ → ์„œ๋ฒ„ ์ž๋™ ์‚ญ์ œ (๋น„์šฉ ์ ˆ๊ฐ!)
โœ… AWS ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน(ASG) ํ™œ์šฉ ๊ฐ€๋Šฅ


๐Ÿ› ๏ธ NestJS์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ ์šฉ ๋ฐฉ๋ฒ•

1๏ธโƒฃ Nginx Reverse Proxy ํ™œ์šฉ

http {
  upstream nest_servers {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
  }
  server {
    listen 80;
    location / {
      proxy_pass http://nest_servers;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

โœ” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ์—ฌ๋Ÿฌ NestJS ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐ

2๏ธโƒฃ AWS ALB + ์˜คํ†  ์Šค์ผ€์ผ๋ง ํ™œ์šฉ

โœ” ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ EC2 ์ž๋™ ํ™•์žฅ
โœ” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ

3๏ธโƒฃ PM2 ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ ํ™œ์šฉ

npm install pm2 -g
pm2 start dist/main.js -i max

โœ” ๋‹จ์ผ ์„œ๋ฒ„ ๋‚ด์—์„œ๋„ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ


๐ŸŽฏ ๊ฒฐ๋ก 

โœ… ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋ฉด? → ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ + ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉ ํ•„์ˆ˜!
โœ… ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์ž๋™ ํ™•์žฅ? → AWS ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน(ASG) ํ™œ์šฉ!
โœ… ์„ธ์…˜ ์œ ์ง€ ํ•„์š”? → Sticky Session or ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ณ ๋ ค!

๐Ÿ’ก AWS ALB + ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉ ์‹œ ์ž๋™ ์šด์˜ ๊ฐ€๋Šฅ ๐Ÿš€

 

 


์ฐธ๊ณ 

 

https://chunsubyeong.tistory.com/106

https://kchanguk.tistory.com/146

https://sjh9708.tistory.com/98

https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/

https://www.smileshark.kr/post/what-is-a-load-balancer-a-comprehensive-guide-to-aws-load-balancer

 

 

๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ ˆํ”ฝ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•

https://hs-backend.tistory.com/228

 

nestjs ์ ์šฉ

https://andongmin.com/docs/nest/ch9/ch9-3

https://guti-coding.tistory.com/197?category=1195671

 

aws ์„ค์ •

https://velog.io/@chaerim1001/AWS%EB%A1%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B5%AC%EC%B6%95%EC%9D%98-%EC%A0%95%EC%84%9D-Ch07.-%EB%A1%9C%EB%93%9C-%EB%B0%B8%EB%9F%B0%EC%84%9C-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0

 

https://jforj.tistory.com/278


https://aws.amazon.com/ko/elasticloadbalancing/?did=ft_card&trk=ft_card

๋กœ๋“œ๋ฒจ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ

https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html

 

๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ์œผ๋กœ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

https://rimiyeyo.tistory.com/entry/Route53%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%B4-%EB%8F%84%EB%A9%94%EC%9D%B8%EA%B3%BC-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B3%A0-ACM%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0

 

 

์ •๋ฆฌ์ค‘

๋”๋ณด๊ธฐ


1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ 8๏ธโƒฃ 9๏ธโƒฃ ๐Ÿ”Ÿ



5. Sticky Session (์„ธ์…˜ ์œ ์ง€)

๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋žœ๋คํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜์ง€๋งŒ,๋กœ๊ทธ์ธ ์œ ์ง€์™€ ๊ฐ™์€ ์„ธ์…˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐ™์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋™์ผํ•œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์•ผ ํ•จ.
โœ… Sticky Session ๋ฐฉ์‹

1๏ธโƒฃ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์ฒ˜๋ฆฌ (AWS ALB์—์„œ Sticky Session ์„ค์ • ๊ฐ€๋Šฅ)โœ”๏ธ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋™์ผํ•œ ์„œ๋ฒ„๋กœ ์œ ์ง€
2๏ธโƒฃ ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋งโœ”๏ธ ์„œ๋ฒ„ ๊ฐ„ ์„ธ์…˜์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹โœ”๏ธ ์„œ๋ฒ„ ์žฅ์•  ์‹œ์—๋„ ์„ธ์…˜ ์œ ์ง€ ๊ฐ€๋Šฅโœ”๏ธ ๋‹จ์ : ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ์„œ๋ฒ„ ์„ค์ • ์—…๋ฐ์ดํŠธ ํ•„์š”

Sticky Session ์ ์šฉ ์ถ”์ฒœ ์‚ฌ๋ก€
๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€๊ฐ€ ํ•„์š”ํ•œ ์›น ์„œ๋น„์Šค
ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ์„œ๋ฒ„์— ์ข…์†๋  ๊ฒฝ์šฐ





6. NestJS์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ & ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉ
โœ… 1) Nginx Reverse Proxy ํ™œ์šฉ
๐Ÿ“Œ Nginx ์„ค์ • ์˜ˆ์‹œ
// /etc/nginx/nginx.conf
http {
 upstream nest_servers {
  server 127.0.0.1:3000;
  server 127.0.0.1:3001;
  server 127.0.0.1:3002;
 }
 server {
  listen 80;
  location / {
   proxy_pass http://nest_servers;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
  }
 }
}

โœ”๏ธ ๊ฒฐ๊ณผ: ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์ž๋™์œผ๋กœ ์—ฌ๋Ÿฌ NestJS ์ธ์Šคํ„ด์Šค๋กœ ๋ถ„์‚ฐ๋จ


โœ… 2) AWS ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ & ์˜คํ†  ์Šค์ผ€์ผ๋ง ํ™œ์šฉ
AWS ALB + ASG (Auto Scaling Group) ์กฐํ•ฉ ์ถ”์ฒœ
์š”์ฒญ๋Ÿ‰์— ๋”ฐ๋ผ EC2 ์ธ์Šคํ„ด์Šค ์ž๋™ ์ฆ๊ฐ
ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์„œ๋ฒ„ ์ž๋™ ์ถ”๊ฐ€ → ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€
ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ ์‹œ ๋ถˆํ•„์š”ํ•œ ์„œ๋ฒ„ ์ž๋™ ์‚ญ์ œ → ๋น„์šฉ ์ ˆ๊ฐ


โœ… 3) PM2 ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ ํ™œ์šฉ (๋‹จ์ผ ์„œ๋ฒ„ ๋‚ด ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค)
๐Ÿ“Œ NestJS ํด๋Ÿฌ์Šคํ„ฐ๋ง ์‹คํ–‰ ๋ฐฉ๋ฒ•
npm install pm2 -g
pm2 start dist/main.js -i max

โœ”๏ธ ๋‹จ์ผ ์„œ๋ฒ„์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ NestJS ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ




7. ๊ฒฐ๋ก 
โœ… ์„œ๋ฒ„๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด? → ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ + ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉ ํ•„์ˆ˜โœ… ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์ž๋™ ํ™•์žฅ? → AWS ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน(ASG) ํ™œ์šฉโœ… ์„ธ์…˜ ์œ ์ง€ ํ•„์š”? → Sticky Session or ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ณ ๋ ค
โœ”๏ธ ์ง€์›…๋‹˜๊ณผ ์กฐ์œจํ•˜์—ฌ CRCD๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ์—…๋ฐ์ดํŠธ ํ•„์ˆ˜โœ”๏ธ AWS ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(ALB) + ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉ ์‹œ ์ž๋™ ์šด์˜ ๊ฐ€๋Šฅ ๐Ÿš€



_________________________________________________________________________



ํด๋Ÿฌ์Šคํ„ฐ๋ง(Clustering)
Clustering์ด๋ž€ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ๋ฅผ ๋˜‘๊ฐ™์€ ๊ตฌ์„ฑ์˜ ์„œ๋ฒ„๊ตฐ์„ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•œ ์‹œ์Šคํ…œ์œผ๋กœ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

Clustering ํ™˜๊ฒฝ์—์„œ๋Š” ํŠน์ • ์žฅ๋น„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„, ์ „์ฒด์ ์ธ ์„œ๋น„์Šค์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
Clustering์€ Virtual IP(๊ฐ€์ƒ IP) ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋Š”๋ฐ, ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‹ค์ œ ์žฅ๋น„๋Š” Physical IP๋ฅผ ๊ฐ€์ง€๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ๋Š” Virtual IP๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‚ด๋ถ€์˜ ์‹œ์Šคํ…œ์€ ์ฒ ์ €ํ•˜๊ฒŒ ๊ฐ€๋ ค ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ์ด ์›์น™์ด๋‹ค.
๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ์˜ํ•ด ๊ฐ Clustering๋œ ์„œ๋ฒ„์— ์˜ํ•ด ์„œ๋น„์Šค๊ฐ€ ์ง„ํ–‰์ด ๋œ๋‹ค.
์ •๋ฆฌ
Load Balancing์€ L4 or L7์ด ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„์— ํŒจํ‚ท์„ ๋ถ€ํ•˜๋ถ„์‚ฐ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด๊ณ  Clustering์€ ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

Load Balancing - ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„์— ํŒจํ‚ท์„ ๋ถ„์‚ฐ
Clustering - ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์„ฑ๋Šฅ์„ ๋†’์—ฌ ๋งŽ์€์–‘์˜ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ





๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ๋ฒ•

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์€ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๊ธฐ์ˆ ๋กœ, ํŠธ๋ž˜ํ”ฝ ๋ถ€ํ•˜๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์„œ๋ฒ„์˜ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- ๋ผ์šด๋“œ ๋กœ๋นˆ (Round Robin): ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹
๋ผ์šด๋“œ ๋กœ๋นˆ(Round Robin Method)์€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”์ฒญ์„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋Œ€์ƒ ์„œ๋ฒ„์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋ฐ›๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์€ ์ฒซ ๋ฒˆ์งธ ์„œ๋ฒ„, ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์€ ๋‘ ๋ฒˆ์งธ ์„œ๋ฒ„, ์„ธ ๋ฒˆ์งธ ์š”์ฒญ์€ ์„ธ ๋ฒˆ์งธ ์„œ๋ฒ„์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋ฐธ๋Ÿฌ๋‹ ๋Œ€์ƒ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์ด ๋™์ผํ•˜๊ณ  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์ค‘ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹
๊ฐ€์ค‘ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹(Weighted Round Robin Method)์€ ์‹ค์ œ ์„œ๋ฒ„์— ์„œ๋กœ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„œ๋ฒ„์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ ์ง€์ •ํ•œ ์ •์ˆซ๊ฐ’์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.
์ตœ์†Œ ์—ฐ๊ฒฐ ๋ฐฉ์‹
์ตœ์†Œ ์—ฐ๊ฒฐ ๋ฐฉ์‹์€ ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„์— ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๋ฐฉํ–ฅ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋™์ ์ธ ๋ถ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ฐ ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ˜„์žฌ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์นด์šดํŠธํ•  ์ˆ˜ ์žˆ๊ณ , ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์ตœ์†Œ ์—ฐ๊ฒฐ (Least Connections): ํ˜„์žฌ ์—ฐ๊ฒฐ์ด ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
- IP ํ•ด์‹œ (IP Hash): ์‚ฌ์šฉ์ž์˜ IP ์ฃผ์†Œ๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ํŠน์ • ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ๋ฒ•

1โƒฃ DNS Load Balancing
• DNS ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ IP๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹
• ๋‹จ์ : ํด๋ผ์ด์–ธํŠธ ์บ์‹ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ถ€ํ•˜๊ฐ€ ์™„๋ฒฝํžˆ ๋ถ„์‚ฐ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

2โƒฃ Reverse Proxy Load Balancing
• Nginx, HAProxy ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ ์ ˆํ•œ ์„œ๋ฒ„๋กœ ๋ผ์šฐํŒ…
• ๋Œ€ํ‘œ์ ์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ : Nginx, HAProxy, Traefik

3โƒฃ L4 (Layer 4) Load Balancing
• TCP/UDP ๋ ˆ๋ฒจ์—์„œ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ (IP ๋ฐ ํฌํŠธ ๊ธฐ๋ฐ˜)
• ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค : AWS ELB (Elastic Load Balancer), F5 Big-IP

4โƒฃ L7 (Layer 7) Load Balancing
• HTTP(S) ์š”์ฒญ์˜ URL, ์ฟ ํ‚ค, ํ—ค๋” ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
• REST API ์„œ๋ฒ„๋‚˜ NestJS ๊ฐ™์€ ์›น ์„œ๋ฒ„์—์„œ๋Š” L7 ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ 
• ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค : Nginx, HAProxy, AWS ALB (Application Load Balancer)


NestJS์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ ์šฉํ•˜๊ธฐ
NestJS์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ ์šฉํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

1โƒฃ Nginx Reverse Proxy ์‚ฌ์šฉ
๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ Nginx๋ฅผ Reverse Proxy๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋กœ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๐Ÿ“Œ ์„ค์ • ๋ฐฉ๋ฒ•
1. NestJS ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‹คํ–‰ (PORT 3000, PORT 3001, PORT 3002 ๋“ฑ)
2. Nginx๋ฅผ ์„ค์ •ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐ
๐Ÿ”น Nginx ์„ค์ • ์˜ˆ์‹œ (/etc/nginx/nginx.conf)
nginx ํŒŒ์ผ

http {
    upstream nest_servers {
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://nest_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

๐Ÿš€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด 3000, 3001, 3002 ํฌํŠธ๋กœ ์ž๋™ ๋ถ„์‚ฐ๋จ!


2โƒฃ ํด๋ผ์šฐ๋“œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์‚ฌ์šฉ (AWS ELB, GCP, Azure)
• AWS ALB (Application Load Balancer)
• AWS NLB (Network Load Balancer)
• GCP Load Balancer
• Azure Load Balancer
๐Ÿ‘‰ NestJS ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€ ๋„์šฐ๊ณ , ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์•ž์— ๋‘๋ฉด ์ž๋™์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐํ•จ


3โƒฃ PM2 Cluster ๋ชจ๋“œ ํ™œ์šฉ (์‹ฑ๊ธ€ ๋จธ์‹  ๋‚ด ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค)
๋‹จ์ผ ์„œ๋ฒ„์—์„œ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋กœ NestJS๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
๐Ÿ“Œ PM2๋ฅผ ์‚ฌ์šฉํ•œ NestJS ํด๋Ÿฌ์Šคํ„ฐ๋ง
sh ํŒŒ์ผ

npm install pm2 -g
pm2 start dist/main.js -i max

• -i max : ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  CPU ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ NestJS ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰
• ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ NestJS ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์›Œ ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ


๐Ÿ“Œ ๊ฒฐ๋ก : NestJS์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ ์šฉ ๋ฐฉ๋ฒ• ์ถ”์ฒœ
1. ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ๋‹ค๋ฉด? → Nginx Reverse Proxy + ์—ฌ๋Ÿฌ NestJS ์ธ์Šคํ„ด์Šค
2. ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(AWS, GCP)์—์„œ ์šด์˜? → ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(AWS ALB, GCP LB) ์‚ฌ์šฉ
3. ๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”? → PM2 ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ ์‚ฌ์šฉ






__________________________________________________
์ธ์Šคํ„ด์Šค๊ฐ€ 2๊ฐœ ์ด์ƒ.

์ง€์›…๋‹˜์ด๋ž‘ ์กฐ์œจํ•ด์•ผํ•จ(crcd๋งก์Œ -  ๋‹ค ์—…๋ฐ์ดํŠธ ํ•ด์ค˜์•ผํ•จ)

๋กœ๋“œ ๋ฒจ๋Ÿฌ์‹ฑ์€ ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉํ•ด์•ผํ•จ
์˜คํ†  ์Šค์ผ€์ผ๋ง : ํŠธ๋ ˆํ”ฝ์ด ๋งŽ์œผ๋ฉด Ec2๋ฅผ(์„œ๋ฒ„๋ฅผ) ์ž๋™์œผ๋กœ ๋Š˜๋ ค์„œ ๋ฆฌํ€˜์ŠคํŠธ ์ž๋™ ๋ถ„๋ฐฐํ•ด์คŒ(์ธ์Šคํ„ด์Šค๊ฐ€ ๋Š˜์–ด๋‚จ).  aws์—๋„ ์žˆ์Œ


ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋ฉด EC2(์„œ๋ฒ„) ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ์š”์ฒญ์„ ๋ถ„๋ฐฐํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
ํŠธ๋ž˜ํ”ฝ์ด ์ค„์–ด๋“ค๋ฉด ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ค„์—ฌ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
AWS์—๋„ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„œ๋ฒ„ ์šด์˜์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

_____________________________________

Sticky Session
https://kchanguk.tistory.com/146

๊ฐ WAS๋“ค์€ ์„ธ์…˜์„ ๊ฐ๊ฐ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์ด๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ํ•˜๋‚˜์˜ WAS๊ฐ€ fail์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น WAS๊ฐ€ ๋“ค๊ณ  ์žˆ๋˜ ์„ธ์…˜์€ ๋‹ค๋ฅธ WAS๋กœ ์ด๋™๋˜์–ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ณ  ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” WAS์˜ session clusturing ๋ถ€๋ถ„์„ ๋ณด๊ณ  ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฐฉ์‹์€ ์ƒˆ๋กœ์šด ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ WAS์— ์ƒˆ๋กœ์šด ์„œ๋ฒ„์˜ IP/PORT๋ฅผ ์ž…๋ ฅํ•ด์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.




 
๐Ÿ‘ฅ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด?
์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•  ๋•Œ ์„œ๋ฒ„๋Š” ๋ช‡๋Œ€๋‚˜ ์žˆ์–ด์•ผํ• ๊นŒ์š”?์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 1๋Œ€์˜ ์„œ๋ฒ„๋งŒ์œผ๋กœ๋„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์š”์ฒญ์„ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋ฉฐ ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง€๋Š” ์ƒํ™ฉ๊นŒ์ง€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค..!
์ด๋Ÿด ๋•Œ์—๋Š” ์Šค์ผ€์ผ ์•„์›ƒํ˜น์€ ์Šค์ผ€์ผ ์—…์„ ํ†ตํ•ด ์ธํ”„๋ผ๋ฅผ ํ™•์žฅํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!
์Šค์ผ€์ผ์—… (scale-up)
์Šค์ผ€์ผ์—…์€ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์— ๋””์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ฃ !(์ˆ˜์ง ์Šค์ผ€์ผ๋ง - vertical scaling ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค)
์Šค์ผ€์ผ์•„์›ƒ (scale-out)

์Šค์ผ€์ผ์•„์›ƒ์€ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ์„œ๋ฒ„์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์˜ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.(์ˆ˜ํ‰ ์Šค์ผ€์ผ๋ง - horizontal scaling ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค)
๐Ÿ”€ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ
๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ž€?

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์Šค์ผ€์ผ์•„์›ƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ ์ฃผ์š” ์—ญํ• 
(1) ์š”์ฒญ ๋ถ„์‚ฐ
์ธํ„ฐ๋„ท์œผ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์›น ์„œ๋ฒ„์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ์‹œ์ผœ ์ค๋‹ˆ๋‹ค. ์•ž์—์„œ ๋งํ•œ ์Šค์ผ€์ผ ์•„์›ƒ ๊ธฐ๋Šฅ์ด์ฃ !!
(2) SSL ์ฒ˜๋ฆฌ
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†ก์ˆ˜์‹ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” SSL ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ธํ„ฐ๋„ท์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ ‘๊ทผ ์ค‘ ์•ˆ์ „ํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด HTTPS๋ผ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ํ†ต์‹ ์„ ํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ํ†ต์‹ ์—์„œ SSL์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. https ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋น„์Šค ์‚ฌ์ด๋ฅผ ํ๋ฅด๋Š” ๋ฐ์ดํ„ฐ๋Š” ์•”ํ˜ธํ™”๋˜๋ฉฐ ์ด๋•Œ ์•”ํ˜ธ ๊ด€๋ จ ์ฒ˜๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š” ์ „์šฉ ์‹œ์Šคํ…œ์„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ œ๊ณตํ•ด์ฃผ์–ด ์›น ์„œ๋ฒ„์—์„œ ์•”ํ˜ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅธ ์†๋„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”!
(3) ๋ถ€์ • ์š”์ฒญ ๋Œ€์‘
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์—†์ด ์›น ์„œ๋ฒ„๊ฐ€ ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์ƒํƒœ๋ผ๋ฉด? ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ž‘๋™์„ ์ผ์œผํ‚ค๋Š” ๋ถ€์ •ํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์›น ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ™”๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋กœ ์ธํ•ด ์›น ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ๋‹ค์šด๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ถ€์ • ์ ‘๊ทผ์— ๋Œ€์‘ํ•˜๋Š” ์ „์šฉ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜์—ฌ ๋” ํšจ์œจ์ ์œผ๋กœ ๋ถ€์ •ํ•œ ์ ‘๊ทผ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ข…๋ฅ˜
AWS์—์„œ๋Š” ELB(Elastic Load Balancing)์ด๋ผ๋Š” ์„œ๋น„์Šค๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
(1) Application Load Balancer (ALB)
ALB๋Š” HTTP๋‚˜ HTTPS ๋ฅผ ์ด์šฉํ•œ ์ ‘๊ทผ์„ ๋ถ„์‚ฐํ•˜๋Š”๋ฐ ์ตœ์ ํ™”๋œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ž…๋‹ˆ๋‹ค. SSL ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ URL ํŒจํ„ด๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์กฐ๊ฑด์—์„œ ๋ถ„์‚ฐ ๋Œ€์ƒ์ž๋ฅผ ๋ฐ”๊พธ๋Š” ๋“ฑ ๊ณ ๋„์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
(2) Network Load Balancer
๊ธฐ๋ณธ์ ์ธ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ๋งŒ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์— ๋Œ€์‘ํ•˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์ž…๋‹ˆ๋‹ค.
(3) Classic Load Balancer
์•ž์„  ๋‘๊ฐœ์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ „์— ์“ฐ์ด๋˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์ด๋ฉฐ ๊ธฐ์กด AWS ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์š”์ฒญ ๋ผ์šฐํŒ…
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์™ธ๋ถ€์— ๊ณต๊ฐœํ•œ ํ”„๋กœํ† ์ฝœ๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ์˜ ์กฐํ•ฉ์„ ๋‚ด๋ถ€์˜ ์›น ์„œ๋ฒ„๊ฐ€ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์š”์ฒญ ๋ผ์šฐํŒ…(request routing) ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด HTTPS 80 ํฌํŠธ๋กœ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๋‚ด๋ถ€ ์›น ์„œ๋ฒ„์— ์ „๋‹ฌํ•  ๋•Œ์—๋Š” HTTP 8080 ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์ฃ !(HTTPS๋ฅผ HTTP๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” HTTPS๋ฅผ ์ด์šฉํ•œ ์•”ํ˜ธ ๋ฐ ๋ณตํ˜ธ ์ฒ˜๋ฆฌ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)
๐ŸŽƒ AWS์—์„œ ALB ์ƒ์„ฑํ•˜๊ธฐ


๊ฐ€์šฉ ์˜์—ญ ์„ค์ •
์š”์ฒญ์„ ๋ถ„์‚ฐํ•  ๊ฐ€์šฉ ์˜์—ญ์„ ์„ ํƒํ•˜๊ณ  ๊ฐ€์šฉ ์˜์—ญ์— ์ƒ์„ฑํ•œ Public Subnet์„ ์„ ํƒํ•ด ์ค๋‹ˆ๋‹ค! (๋ฐ˜๋“œ์‹œ public subnet์— ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!!!)
๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •
๋ณด์•ˆ ๊ทธ๋ฃน์€ vpc์˜ default ๋ณด์•ˆ ๊ทธ๋ฃน๊ณผ http/https ์ ‘๊ทผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค.
๋Œ€์ƒ ๊ทธ๋ฃน ์ƒ์„ฑ
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ ์šฉํ•  ๋Œ€์ƒ ๊ทธ๋ฃน์„ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค!์—ฌ๊ธฐ์„œ ํฌํŠธ๋ฅผ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ์„ค์ •ํ•ด์ค€๋‹ค๋ฉด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ์š”์ฒญ์€ ์›น ์„œ๋ฒ„์˜ 8080 ํฌํŠธ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ƒํƒœ ๊ฒ€์‚ฌ๋ฅผ ํ•  ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ํ•ด๋‹น URL๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์›น ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•  ์ธ์Šคํ„ด์Šค๋“ค์„ ์„ ํƒํ•˜์—ฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ๋Œ€์ƒ์œผ๋กœ ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค!
๋ฆฌ์Šค๋„ˆ ๋ฐ ๋ผ์šฐํŒ…
์•ž์„œ ์ƒ์„ฑํ•œ ๋Œ€์ƒ ๊ทธ๋ฃน์„ '๋ฆฌ์Šค๋„ˆ ๋ฐ ๋ผ์šฐํŒ…' ๋ฉ”๋‰ด์—์„œ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด์ฃผ๋ฉด HTTP 80 ํฌํŠธ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์€ ์„ค์ •ํ•œ ๋Œ€์ƒ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„์‚ฐ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ALB๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ƒ์„ฑํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ DNS ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!
์ฐธ๊ณ https://aws.amazon.com/ko/what-is/load-balancing/ https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/