λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» CS

λ‘œλ“œ λ°ΈλŸ°μ„œ (Load Balancer)

by dev.py 2025. 3. 10.

1. λ‘œλ“œ λ°ΈλŸ°μ„œλž€?

λ‘œλ“œ λ°ΈλŸ°μ„œ(Load Balancer)λŠ” μ—¬λŸ¬ μ„œλ²„λ‘œ λ“€μ–΄μ˜€λŠ” λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ 효율적으둜 λΆ„μ‚°ν•˜λŠ” μž₯치 λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ˜λ―Έν•œλ‹€. μ΄λŠ” νŠΉμ • μ„œλ²„μ— κ³ΌλΆ€ν•˜κ°€ κ±Έλ¦¬λŠ” 것을 λ°©μ§€ν•˜κ³ , μ„±λŠ₯을 μ΅œμ ν™”ν•˜λ©°, κ³ κ°€μš©μ„±μ„ 보μž₯ν•˜λŠ” 역할을 ν•œλ‹€.

 

2. λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ ν•„μš”μ„±

  • λΆ€ν•˜ λΆ„μ‚°: λ‹€μˆ˜μ˜ μ„œλ²„μ— νŠΈλž˜ν”½μ„ κ³ λ₯΄κ²Œ λΆ„μ‚°ν•˜μ—¬ νŠΉμ • μ„œλ²„μ˜ κ³ΌλΆ€ν•˜λ₯Ό 방지
  • κ³ κ°€μš©μ„±(High Availability): 일뢀 μ„œλ²„κ°€ μž₯μ• κ°€ λ‚˜λ”λΌλ„ μ„œλΉ„μŠ€κ°€ 지속 κ°€λŠ₯ν•˜λ„λ‘ 보μž₯
  • ν™•μž₯μ„±(Scalability): μ„œλ²„λ₯Ό μΆ”κ°€ν•˜μ—¬ 더 λ§Žμ€ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 지원
  • λ³΄μ•ˆ κ°•ν™”: νŠΉμ • μ„œλ²„μ˜ 직접적인 접근을 μ°¨λ‹¨ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•  수 있음

 

3. λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ μž‘λ™ 방식

λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ—¬λŸ¬ μ„œλ²„λ‘œ λ‚˜λˆ„μ–΄ μ „λ‹¬ν•˜λ©°, 주둜 λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€:

  • DNS 기반 λΆ„μ‚°: 도메인 λ„€μž„ μ‹œμŠ€ν…œ(DNS) λ ˆλ²¨μ—μ„œ λ‹€μˆ˜μ˜ IP μ£Όμ†Œλ₯Ό λ°˜ν™˜ν•˜μ—¬ νŠΈλž˜ν”½μ„ λΆ„μ‚°
  • λ„€νŠΈμ›Œν¬ 레벨 λΆ„μ‚° (L3/L4): IP μ£Όμ†Œμ™€ 포트 기반으둜 νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜λŠ” 방식 (예: TCP, UDP)
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 레벨 λΆ„μ‚° (L7): HTTP 헀더, μΏ ν‚€, μš”μ²­ URL λ“± μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 데이터λ₯Ό 기반으둜 νŠΈλž˜ν”½μ„ λΆ„μ‚°

 

4. λ‘œλ“œ λ°ΈλŸ°μ‹± μ•Œκ³ λ¦¬μ¦˜

λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ ν™œμš©ν•˜μ—¬ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•œλ‹€:

  • λΌμš΄λ“œ 둜빈(Round Robin): 각 μš”μ²­μ„ 순차적으둜 μ—¬λŸ¬ μ„œλ²„μ— 전달
  • κ°€μ€‘μΉ˜ λΌμš΄λ“œ 둜빈(Weighted Round Robin): μ„œλ²„μ˜ μ„±λŠ₯에 따라 κ°€μ€‘μΉ˜λ₯Ό λΆ€μ—¬ν•˜μ—¬ μš”μ²­μ„ λΆ„μ‚°
  • μ΅œμ†Œ μ—°κ²°(Least Connection): ν˜„μž¬ μ—°κ²°λœ μ„Έμ…˜ μˆ˜κ°€ 적은 μ„œλ²„λ‘œ νŠΈλž˜ν”½μ„ 전달
  • IP ν•΄μ‹œ(IP Hash): ν΄λΌμ΄μ–ΈνŠΈ IPλ₯Ό 기반으둜 μš”μ²­μ„ νŠΉμ • μ„œλ²„μ— ν• λ‹Ή
  • 응닡 μ‹œκ°„ 기반(Response Time-Based): μ„œλ²„μ˜ 응닡 속도λ₯Ό κΈ°μ€€μœΌλ‘œ μš”μ²­μ„ λΆ„μ‚°

 

5. λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ μ’…λ₯˜

λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄ λ°©μ‹μœΌλ‘œ λ‚˜λ‰œλ‹€.

5.1 ν•˜λ“œμ›¨μ–΄ λ‘œλ“œ λ°ΈλŸ°μ„œ

μ „μš© μž₯λΉ„λ₯Ό μ΄μš©ν•˜μ—¬ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜λŠ” λ°©μ‹μœΌλ‘œ, 높은 μ„±λŠ₯κ³Ό μ•ˆμ •μ„±μ„ μ œκ³΅ν•œλ‹€.

  • λŒ€ν‘œμ μΈ μ œν’ˆ: F5, Citrix ADC, A10 Networks

5.2 μ†Œν”„νŠΈμ›¨μ–΄ λ‘œλ“œ λ°ΈλŸ°μ„œ

μ†Œν”„νŠΈμ›¨μ–΄ 기반으둜 νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜λŠ” λ°©μ‹μœΌλ‘œ, ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œ 주둜 μ‚¬μš©λœλ‹€.

  • λŒ€ν‘œμ μΈ μ†”λ£¨μ…˜: Nginx, HAProxy, Envoy, AWS ELB, GCP Load Balancer, Kubernetes Ingress

 

6. λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ μ‹€μ œ ν™œμš© μ˜ˆμ‹œ

  • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜: μ—¬λŸ¬ μ›Ή μ„œλ²„μ— νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜μ—¬ λΉ λ₯Έ 응닡 제곡
  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜: μ„œλΉ„μŠ€ κ°„ νŠΈλž˜ν”½μ„ μ΅œμ ν™”ν•˜μ—¬ μ„±λŠ₯을 κ·ΉλŒ€ν™”
  • λ°μ΄ν„°λ² μ΄μŠ€ 샀딩: μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ μΈμŠ€ν„΄μŠ€μ— 읽기/μ“°κΈ° μš”μ²­μ„ λΆ„μ‚°
  • ν΄λΌμš°λ“œ ν™˜κ²½: AWS, GCP, Azure와 같은 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ—μ„œ 동적 ν™•μž₯

 

7. λ‘œλ“œ λ°ΈλŸ°μ„œ κ΅¬ν˜„ μ˜ˆμ‹œ

7.1 Nginxλ₯Ό ν™œμš©ν•œ λ‘œλ“œ λ°ΈλŸ°μ‹± 예제

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

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

이 섀정은 Nginxλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„Έ 개의 λ°±μ—”λ“œ μ„œλ²„λ‘œ μš”μ²­μ„ λΆ„μ‚°ν•˜λŠ” μ˜ˆμ œμ΄λ‹€.

 

7.2 AWS ELB(Elastic Load Balancer) μ˜ˆμ‹œ

AWSμ—μ„œλŠ” ELBλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€. μ„€μ • 과정은 λ‹€μŒκ³Ό κ°™λ‹€:

  1. AWS μ½˜μ†”μ—μ„œ EC2 > Load Balancer 둜 이동
  2. μƒˆ λ‘œλ“œ λ°ΈλŸ°μ„œ 생성
  3. Application Load Balancer(ALB) λ˜λŠ” Network Load Balancer(NLB) 선택
  4. νƒ€κ²Ÿ κ·Έλ£Ή(Target Group) μ„€μ • 및 EC2 μΈμŠ€ν„΄μŠ€ μ—°κ²°
  5. λ¦¬μŠ€λ„ˆ(Listener) μ„€μ •: HTTP λ˜λŠ” HTTPS μš”μ²­μ„ 지정
  6. μ„€μ • μ™„λ£Œ ν›„ ν…ŒμŠ€νŠΈ 진행

 

7.3 λ‘œλ“œ λ°ΈλŸ°μ„œ μ•„ν‚€ν…μ²˜ μ˜ˆμ‹œ

μ•„λž˜λŠ” 일반적인 λ‘œλ“œ λ°ΈλŸ°μ„œ 기반의 μ›Ή μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ΄λ‹€:

            +----------------+
            |  Load Balancer |
            +----------------+
                  |
   -------------------------------
   |             |               |
+----+       +----+         +----+
|Web1|       |Web2|         |Web3|
+----+       +----+         +----+
   |             |               |
   --------------------------------
                  |
             +--------+
             |Database|
             +--------+

이 κ΅¬μ‘°μ—μ„œλŠ” λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ μ—¬λŸ¬ 개의 μ›Ή μ„œλ²„λ‘œ μš”μ²­μ„ λΆ„μ‚°ν•˜κ³ , μ›Ή μ„œλ²„λŠ” ν•˜λ‚˜μ˜ 곡톡 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€.

 

8. λ‘œλ“œ λ°ΈλŸ°μ„œ μ‚¬μš© μ‹œ μœ μ˜ν•  점

  • μ„Έμ…˜ 관리: 일뢀 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ„Έμ…˜ 정보λ₯Ό μ„œλ²„μ— μ €μž₯ν•˜λŠ”λ°, λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ νŠΈλž˜ν”½μ„ μ—¬λŸ¬ μ„œλ²„λ‘œ λΆ„μ‚°ν•˜λ©΄ μ„Έμ…˜ 정보가 μ‚¬λΌμ§ˆ 수 μžˆλ‹€. Sticky Session을 κ³ λ €ν•΄μ•Ό 함.
  • SSL μ’…λ£Œ(SSL Termination): HTTPS νŠΈλž˜ν”½μ„ λ‘œλ“œ λ°ΈλŸ°μ„œμ—μ„œ 해독할 경우, λ‚΄λΆ€ νŠΈλž˜ν”½μ˜ μ•”ν˜Έν™”κ°€ ν•„μš”ν•  수 있음.
  • ν—¬μŠ€ 체크(Health Check) μ„€μ •: μž₯μ• κ°€ λ°œμƒν•œ μ„œλ²„λ‘œ νŠΈλž˜ν”½μ΄ μ „λ‹¬λ˜μ§€ μ•Šλ„λ‘ 주기적인 ν—¬μŠ€ 체크λ₯Ό μ„€μ •ν•΄μ•Ό 함.
  • λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ 병λͺ© ν˜„μƒ: νŠΈλž˜ν”½μ΄ κΈ‰κ²©νžˆ 증가할 경우, λ‘œλ“œ λ°ΈλŸ°μ„œ μžμ²΄κ°€ μ„±λŠ₯의 병λͺ©μ΄ 될 수 μžˆμœΌλ―€λ‘œ ν™•μž₯성을 κ³ λ €ν•΄μ•Ό 함.
  • 둜그 뢄석: νŠΈλž˜ν”½μ΄ μ •μƒμ μœΌλ‘œ λΆ„μ‚°λ˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λ‘œλ“œ λ°ΈλŸ°μ„œ 둜그λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³  뢄석해야 함.