πŸš€ ν•œ μ„œλ²„μ—μ„œ 수백만 λͺ…μ˜ μ‚¬μš©μžκΉŒμ§€: λ‘œλ“œ λ°ΈλŸ°μ‹± μ‹€μš© κ°€μ΄λ“œ βš–οΈ

λ°œν–‰: (2026λ…„ 1μ›” 2일 μ˜€ν›„ 10:53 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

μœ„μ— 제곡된 Source λ§ν¬λ§ŒμœΌλ‘œλŠ” μ‹€μ œ λ²ˆμ—­ν•  ν…μŠ€νŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²ˆμ—­μ΄ ν•„μš”ν•œ 전체 기사 λ‚΄μš©(λ˜λŠ” λ²ˆμ—­ν•˜κ³  싢은 νŠΉμ • λΆ€λΆ„)을 λ³΅μ‚¬ν•΄μ„œ μ•Œλ €μ£Όμ‹œλ©΄, μš”μ²­ν•˜μ‹  λŒ€λ‘œ λ§ˆν¬λ‹€μš΄ ν˜•μ‹κ³Ό μ½”λ“œ 블둝, URL은 κ·ΈλŒ€λ‘œ μœ μ§€ν•˜λ©΄μ„œ ν•œκ΅­μ–΄λ‘œ λ²ˆμ—­ν•΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

λ‘œλ“œ λ°ΈλŸ°μ‹±μ΄ μ€‘μš”ν•œ 이유

  • μ»΄ν“¨ν„°λŠ” ν•œκ³„κ°€ μžˆλ‹€ – 단일 μ„œλ²„κ°€ κ³ΌλΆ€ν•˜κ°€ κ±Έλ¦¬κ±°λ‚˜, λŠλ €μ§€κ±°λ‚˜, μΆ©λŒν•  수 μžˆλ‹€.
  • νŠΈλž˜ν”½μ΄ κ³ λ₯΄μ§€ μ•Šλ‹€ – 급증이 단일 μΈμŠ€ν„΄μŠ€λ₯Ό 압도할 수 μžˆλ‹€.
  • μž₯μ• λŠ” λΆˆκ°€ν”Όν•˜λ‹€ – ν•˜λ“œμ›¨μ–΄ λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

λ‘œλ“œ λ°ΈλŸ°μ‹±μ€ λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ μ—¬λŸ¬ μ„œλ²„μ— λΆ„μ‚°μ‹œμΌœ 단일 μ„œλ²„κ°€ μž₯μ•  지점이 λ˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

Users β†’ Load Balancer β†’ Server A   Server B   Server C

λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” β€œλ‘λ‡Œ + νŠΈλž˜ν”½ 경찰” 역할을 ν•˜λ©° λŸ°νƒ€μž„μ— λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€:

  1. ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ°›λŠ”λ‹€.
  2. μ‚¬μš© κ°€λŠ₯ν•œ μ„œλ²„λ₯Ό ν™•μΈν•œλ‹€.
  3. λΌμš°νŒ… μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•œλ‹€.
  4. μš”μ²­μ„ μ „λ‹¬ν•œλ‹€.
  5. μ„œλ²„ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•œλ‹€.
  6. μ‹€νŒ¨ν•œ μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ μ œκ±°ν•œλ‹€.

μ΄λŸ¬ν•œ λ‹¨κ³„λŠ” μ΄ˆλ‹Ή 수백만 번 λ°œμƒν•œλ‹€.

λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ μ‚¬μš©ν•΄μ•Ό ν•  경우

  • κ³ νŠΈλž˜ν”½ ν”Œλž«νΌ (예: Netflix, Amazon 판맀, μ†Œμ…œ λ―Έλ””μ–΄ ν”Όλ“œ)
  • ν•˜λ‚˜μ˜ μ„œλ²„μ—μ„œ λ‹€μˆ˜ μ„œλ²„λ‘œ μˆ˜ν‰ ν™•μž₯
  • μ„œλ²„κ°€ λ‹€μš΄λ  λ•Œ μžλ™ νŽ˜μΌμ˜€λ²„ (λ‹€μš΄νƒ€μž„ μ—†μŒ)
  • κ°€μž₯ λΉ λ₯΄κ±°λ‚˜ κ°€μž₯ κ°€κΉŒμš΄ μ„œλ²„λ‘œ λΌμš°νŒ… (μ „ 세계 μ‚¬μš©μž)
  • API, λ¨Έμ‹ λŸ¬λ‹ μΆ”λ‘ , 데이터 처리
  • TCP/UDP μ„œλΉ„μŠ€ (맀우 λΉ λ₯΄κ³ , μ§€λŠ₯적이지 μ•ŠμŒ)
  • URL 경둜, 헀더, μΏ ν‚€ 기반 λΌμš°νŒ…μ΄ ν•„μš”ν•œ HTTP/HTTPS μ„œλΉ„μŠ€

μ•Œκ³ λ¦¬μ¦˜ 및 μž‘λ™ 방식

μ•Œκ³ λ¦¬μ¦˜μ„€λͺ…
Round Robinμ„œλ²„μ— μš”μ²­μ„ ν•˜λ‚˜μ”© 순차적으둜 보내며, μš©λŸ‰μ΄ λ™μΌν•˜λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.
Least Connectionsν˜„μž¬ ν™œμ„± 연결이 κ°€μž₯ 적은 μ„œλ²„λ₯Ό μ„ νƒν•©λ‹ˆλ‹€ – μ‹€μ œ νŠΈλž˜ν”½μ— 잘 λ§žμŠ΅λ‹ˆλ‹€.
Least Response Timeκ°€μž₯ λΉ λ₯Έ 응닡을 λ³΄κ³ ν•˜λŠ” μ„œλ²„μ— νŠΈλž˜ν”½μ„ λ³΄λƒ…λ‹ˆλ‹€, μ €μ§€μ—° μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ΄μƒμ μž…λ‹ˆλ‹€.
IP Hashν΄λΌμ΄μ–ΈνŠΈ IPλ₯Ό νŠΉμ • μ„œλ²„μ— λ§€ν•‘ν•˜μ—¬ μ„Έμ…˜μ„ κ³ μ •ν•©λ‹ˆλ‹€.
Weightedμ„±λŠ₯이 더 쒋은 μ„œλ²„μ— 더 λ§Žμ€ νŠΈλž˜ν”½μ„ ν• λ‹Ήν•©λ‹ˆλ‹€; ν•˜λ“œμ›¨μ–΄κ°€ ν˜Όν•©λœ 경우 μœ μš©ν•©λ‹ˆλ‹€.

일반적인 κ΄€ν–‰: Least Connectionsλ₯Ό 건강 체크와 κ²°ν•©ν•©λ‹ˆλ‹€.

인기 κ΅¬ν˜„

  • 물리적 μ–΄ν”ŒλΌμ΄μ–ΈμŠ€ – 맀우 λΉ λ₯΄κ³  λΉ„μ‹Έλ©° 은행 및 ν†΅μ‹ μ‚¬μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ†Œν”„νŠΈμ›¨μ–΄ μ†”λ£¨μ…˜ – ν‘œμ€€ λ¨Έμ‹ μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€:
    • NGINX
    • HAProxy
    • Envoy
  • κ΄€λ¦¬ν˜• ν΄λΌμš°λ“œ λ‘œλ“œ λ°ΈλŸ°μ„œ:
    • AWS – ELB / ALB / NLB
    • Google Cloud – Cloud Load Balancing
    • Azure – Azure Load Balancer

μž₯점

  • μžλ™ μŠ€μΌ€μΌλ§ 및 λ‚΄μž₯ 쀑볡성
  • κ°„λ‹¨ν•œ μ„€μ •; DNSκ°€ μ „ 세계 νŠΈλž˜ν”½μ— λŒ€ν•΄ λ‹€λ₯Έ IPλ₯Ό λ°˜ν™˜ν•  수 있음
  • ν—¬μŠ€ 체크(GET /health)κ°€ 비정상 μΈμŠ€ν„΄μŠ€λ₯Ό μžλ™μœΌλ‘œ νšŒμ „μ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: μ΅œμ†Œ μ—°κ²° 수λ₯Ό μ‚¬μš©ν•˜λŠ” NGINX

// server.js (Node.js)
const http = require("http");

const PORT = process.env.PORT;
const NAME = process.env.NAME;

http.createServer((req, res) => {
  res.end(`Hello from ${NAME}\n`);
}).listen(PORT, () => {
  console.log(`${NAME} running on port ${PORT}`);
});

μ„Έ μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:

PORT=3001 NAME=Server-A node server.js
PORT=3002 NAME=Server-B node server.js
PORT=3003 NAME=Server-C node server.js

NGINX μ„€μ •:

http {
    upstream backend_servers {
        least_conn;
        server localhost:3001;
        server localhost:3002;
        server localhost:3003;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

μ„€λͺ…: upstream은 μ„œλ²„ 풀을 μ •μ˜ν•˜κ³ , least_conn은 κ°€μž₯ 적은 ν™œμ„± 연결을 κ°€μ§„ μ„œλ²„λ₯Ό μ„ νƒν•˜λ©°, NGINXλŠ” νŠΈλž˜ν”½μ„ μžλ™μœΌλ‘œ λΆ„μ‚°ν•©λ‹ˆλ‹€.

IP ν•΄μ‹œλ₯Ό μ΄μš©ν•œ μŠ€ν‹°ν‚€ μ„Έμ…˜

upstream backend_servers {
    ip_hash;
    server localhost:3001;
    server localhost:3002;
}

κ²°κ³Ό: λ™μΌν•œ ν΄λΌμ΄μ–ΈνŠΈ IPκ°€ μΌκ΄€λ˜κ²Œ 같은 λ°±μ—”λ“œλ‘œ λΌμš°νŒ…λ˜μ–΄ λ‘œκ·ΈμΈν•œ μ‚¬μš©μžμ—κ²Œ μœ μš©ν•©λ‹ˆλ‹€.

λ‘œλ“œ λ°ΈλŸ°μ„œ + μžλ™ μŠ€μΌ€μΌλ§

  • μˆ˜μš”μ— 따라 μ„œλ²„λ₯Ό λ™μ μœΌλ‘œ μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•©λ‹ˆλ‹€.
  • κ³ΌλΆ€ν•˜λ₯Ό λ°©μ§€ν•˜κ³  μˆ˜λ™ κ°œμž… 없이 μ„±μž₯에 λŒ€μ‘ν•©λ‹ˆλ‹€.
  • 트리거 기반으둜 μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€(예: CPU μ‚¬μš©λŸ‰, μš”μ²­ μ§€μ—° μ‹œκ°„).

μ‹€μ œ 배포 사둀

  • AWS & Kubernetes: Ingress 컨트둀러 + μ„œλΉ„μŠ€.
  • Netflix: 닀계측 μ ‘κ·Ό 방식 – DNS β†’ κ°€μž₯ κ°€κΉŒμš΄ μ§€μ—­ β†’ μ—£μ§€ λ‘œλ“œ λ°ΈλŸ°μ„œ(CDN) β†’ μ§€μ—­ λ‘œλ“œ λ°ΈλŸ°μ„œ β†’ μ„œλΉ„μŠ€ κ°„ λ‘œλ“œ λ°ΈλŸ°μ‹±.
  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€: μ„œλΉ„μŠ€ λ©”μ‹œ λ‘œλ“œ λ°ΈλŸ°μ‹±(예: Istio, Linkerd).

각 μš”μ²­μ€ 일반적으둜 λ‹€μŒκ³Ό 같은 흐름을 λ”°λ¦…λ‹ˆλ‹€:

User β†’ DNS β†’ Load Balancer β†’ Service β†’ Cache β†’ Stream

λ³΄μ•ˆ κΈ°λŠ₯

  • SSL/TLS μ’…λ£Œ
  • λ°±μ—”λ“œ IP 숨기기
  • 속도 μ œν•œ
  • DDoS μ™„ν™”
  • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ°©ν™”λ²½ (WAF) 톡합

단일 μž₯μ•  지점을 ν”Όν•˜μ‹­μ‹œμ˜€: 닀쀑 λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό λ°°ν¬ν•˜κ±°λ‚˜ 쀑볡성을 μ œκ³΅ν•˜λŠ” κ΄€λ¦¬ν˜• μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

Conclusion

μ˜€λŠ˜λ‚  λΆ„μ‚°λœ μ„Έκ³„μ—μ„œ λ‘œλ“œ λ°ΈλŸ°μ‹±μ€ 더 이상 μ΅œμ ν™”κ°€ μ•„λ‹ˆλΌ ν•„μˆ˜μž…λ‹ˆλ‹€. μž‘μ€ μ›Ή 앱을 μ œκ³΅ν•˜λ“  수백만 μ‚¬μš©μžλ₯Ό λ³΄μœ ν•œ κΈ€λ‘œλ²Œ ν”Œλž«νΌμ„ μš΄μ˜ν•˜λ“ , 효과적인 λ‘œλ“œ λ°ΈλŸ°μ‹±μ€ 볡원λ ₯, μ„±λŠ₯ 및 ν™•μž₯성을 보μž₯ν•©λ‹ˆλ‹€. μ μ ˆν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ„ νƒν•˜κ³ , ν—¬μŠ€ 체크λ₯Ό κ΅¬μ„±ν•˜λ©°, μ˜¬λ°”λ₯Έ 인프라(μ†Œν”„νŠΈμ›¨μ–΄, ν•˜λ“œμ›¨μ–΄ λ˜λŠ” κ΄€λ¦¬ν˜• ν΄λΌμš°λ“œ μ„œλΉ„μŠ€)λ₯Ό ν™œμš©ν•¨μœΌλ‘œμ¨ μ‹œμŠ€ν…œμ€ νŠΈλž˜ν”½ 급증을 μ²˜λ¦¬ν•˜κ³ , μž₯μ• λ₯Ό 견디며, 쀑단 없이 μ„±μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ λ§ˆμŠ€ν„°ν•˜λŠ” 것은 μ••λ°• μ†μ—μ„œλ„ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚΄μ•„ 있게 μœ μ§€ν•˜λ €λŠ” λͺ¨λ“  μ‹œμŠ€ν…œ μ—”μ§€λ‹ˆμ–΄μ—κ²Œ ν•„μˆ˜μ μž…λ‹ˆλ‹€.

#Topic
1νŽ˜μ΄μ§€λ„€μ΄μ…˜ β€” Architecture Series: Part 1
2인덱싱 β€” Architecture Series: Part 2
3가상화 β€” Architecture Series: Part 3
4캐싱 β€” Architecture Series: Part 4
5샀딩 β€” Architecture Series: Part 5
6λ‘œλ“œ λ°ΈλŸ°μ‹± β€” Architecture Series: Part 6
Back to Blog

κ΄€λ ¨ κΈ€

더 보기 Β»

κ·Έλ¦° μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§: μ—λ„ˆμ§€ μΈ‘μ •, λ‹¨μˆœνžˆ μ„±λŠ₯만이 μ•„λ‹ˆλΌ

μ™œ μ—λ„ˆμ§€κ°€ κ°€μž₯ μ€‘μš”ν•œκ°€? μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ“€μ€ performance metricsλ₯Ό μ‚¬μš©ν•΄ 성곡을 μΈ‘μ •ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” speed, latency, 그리고 throughput을 μ΅œμ ν™”ν•˜λ©°, 더 λΉ λ₯Έ software가…