[CS] 로드밸런싱

박원준·2025년 9월 10일

🌐 로드밸런싱 (Load Balancing)

로드 밸런싱은 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 분배하는 기술입니다.
수많은 사용자가 동시에 서비스를 요청하더라도 안정적으로 대응하기 위해 필수적으로 사용됩니다.


1️⃣ 로드밸런싱이란?

로드 밸런싱은 사용자의 요청을 여러 서버에 효율적으로 분산하여 특정 서버에 트래픽이 몰리지 않도록 하는 기술입니다.
이를 통해 응답 속도 향상, 가용성 확보, 장애 대응이 가능합니다.

🔹 주요 역할

  • 서버 과부하 방지
  • 애플리케이션의 고가용성(HA) 확보
  • 장애 발생 시 요청을 정상 서버로 자동 우회
  • 트래픽을 효율적으로 분산하여 서비스 안정성 보장

2️⃣ 로드밸런싱 알고리즘 종류

다음은 로드밸런싱 알고리즘의 종류에 대해 알아보겠습니다.

라운드 로빈(Round Robin) 방식은 모든 요청이 순서대로 처리되는 방식입니다. 만약 서버가 3대(A, B, C)가 존재하면 요청은 ABCABC 순서대로 전달됩니다. 모든 서버의 처리 능력이 동등하고, 요청의 교른 분산이 중요한 경우 고려해볼 수 있습니다. 구현이 쉬우며 고른 분산을 보장한다는 것이 장점입니다. 하지만, 서버 부하나 응답 시간을 고려하지 않고 서버의 처리 능력이 다른 경우 비효율적이라는 것이 단점입니다.

가중치 라운드 로빈(Weighted Round Robin) 방식은 라운드 로빈 방식에 가중치라는 개념을 추가합니다. 각 서버는 처리 능력과 가용 자원에 따라서 가중치를 할당 받게 됩니다. 그리고, 라운드 로빈 방식을 사용하되 가중치가 높은 서버는 가중치에 비례하여 상대적으로 더욱 많은 요청을 받게 됩니다.

라운드 로빈보다 상대적으로 구현이 복잡하지만 각 서버의 처리 능력을 고려하지 않는다는 라운드 로빈 방식의 단점을 개선합니다. 하지만, 여전히 서버의 상태를 고려하지 않는 방식이라는 점을 유의해야합니다.

최소 연결(Least Connections) 방식은 각 서버의 활성 연결 수를 모니터링하고 있는 경우에 사용할 수 있습니다. 가장 적은 활성 연결이 존재하는 서버에게 요청을 전달하는 방식입니다. 각 서버의 처리 능력이 다른 경우에는 적합하지 않을 수 있습니다. 처리 능력이 큰 서버는 상대적으로 활성 연결을 더욱 많이 수립할 수 있기 때문입니다. 최소 연결 방식은 각 서버의 처리 능력이 비슷하지만 특정 이유로 한 서버에 동시 연결 수가 많아 지는 상황이 존재하는 경우 고려해볼 수 있습니다.

로드 밸런싱 대상에 상대적으로 처리 능력이 큰 서버가 존재하는 경우에는 라운드 로빈과 마찬가지로 가중치라는 개념을 사용해볼 수 있습니다. 이를 가중치 최소 연결(Weighted Least Connections) 방식이라고 합니다.

최소 응답 시간(Least Response Time) 방식은 각 서버의 응답 시간을 모니터링하고 있는 경우에 사용할 수 있습니다. 응답 시간이 가장 빠른 서버에 요청을 전달하는 방식입니다. 서버들마다 응답 시간이 다양할 경우, 가장 빠른 서버에 요청을 전달하여 사용자 경험을 개선하는데 도움이 될 수 있습니다. 응답 시간을 기반으로 하기 때문에 서버의 부하 상태, 활성 연결 수와 같은 다른 요소들을 고려해야하는 경우에는 적합하지 않을 수 있습니다.

IP 해시(IP Hash) 방식은 클라이언트 요청의 IP를 기반으로 요청을 전달합니다. IP를 이용해 구한 해시값을 기반으로 요청을 전달할 서버를 결정합니다. IP 해시 방식은 클라이언트와 서버 간의 친화성 유지에 초점을 맞춘 방식으로 클라이언트의 상태에 관리에 용이하다는 장점이 있습니다. 하지만, 상황에 따라서 부하가 균등하게 이루어지지 않는다는 단점이 존재합니다.

알고리즘설명
라운드 로빈 (Round Robin)요청을 순서대로 서버에 분배
가중치 라운드 로빈 (Weighted Round Robin)서버 성능(가중치)에 따라 비율 분배
최소 연결 (Least Connections)현재 연결 수가 가장 적은 서버로 요청 분배
최소 응답 시간 (Least Response Time)응답이 가장 빠른 서버로 요청 전달
IP 해시 (IP Hash)클라이언트 IP 기반으로 특정 서버에 매핑

3️⃣ 로드밸런싱 방식 (서버 사이드 vs 클라이언트 사이드)

로드밸런싱은 어디에서 서버를 선택하느냐에 따라 서버 사이드 로드밸런싱과 클라이언트 사이드 로드밸런싱으로 나뉩니다.

🔹 서버 사이드 로드밸런싱

클라이언트는 하나의 엔드포인트만 알고, 로드밸런서가 서버를 대신 선택하는 방식입니다.
클라이언트는 로드밸런서를 통해 간접적으로 서버와 통신하므로, 클라이언트는 서버 목록을 알 필요가 없습니다.

동작 방식

  1. 클라이언트는 로드밸런서에 요청을 보냅니다.
  2. 로드밸런서는 적절한 서버를 선택하여 요청을 전달합니다.
  3. 서버가 요청을 처리하고, 결과를 로드밸런서를 통해 클라이언트에 반환합니다.

특징

  • 클라이언트는 서버 목록을 알 필요 없습니다.
  • 로드밸런서가 트래픽을 중앙에서 관리합니다.
  • 주로 L4 / L7 로드밸런서가 이 역할을 수행합니다.

대표 기술

  • Nginx
  • HAProxy
  • AWS ELB / ALB / NLB

장점

  • 클라이언트 단순화 : 클라이언트가 로드밸런싱 로직을 신경 쓰지 않아도 됩니다.
  • 중앙 집중 관리 (보안, SSL, 트래픽 제어)가 가능합니다.
  • 운영 및 모니터링이 용이합니다.

단점

  • SPOF (Single Point of Failure) 문제가 발생할 수 있습니다.
    • 로드밸런서 자체가 장애가 나면 전체 서비스가 중단될 수 있습니다.
    • 해결 방법: 로드밸런서 이중화(HA)
      • Active-Standby: 하나는 대기, 하나는 활성
      • Active-Active: 여러 대를 동시에 사용해 부하 분산
  • 네트워크 홉이 추가되어 성능 저하가 일어날 수 있습니다.

🔹 클라이언트 사이드 로드밸런싱

요청을 보내는 주체(클라이언트)가 직접 로드밸런싱을 수행하는 방식입니다. 여기서 클라이언트는 프론트엔드뿐만 아니라, 백엔드 서비스도 포함됩니다. 예를 들어, 한 마이크로서비스가 다른 마이크로서비스로 요청을 보낼 때도 클라이언트 역할을 할 수 있습니다.

동작 방식

  1. 클라이언트는 서비스 디스커버리(ex. Eureka)에서 서버 목록 조회하여 가져옵니다.
  2. 클라이언트가 로드밸런싱 알고리즘 적용하여 적절한 서버를 선택하고 요청합니다.

특징

  • 로드밸런싱 로직이 클라이언트에 내장되어 있어야 합니다.
  • 클라이언트가 서버 목록을 유지하고 갱신할 책임이 있습니다.

대표 기술

  • Netflix Ribbon
  • Spring Cloud LoadBalancer

장점

  • 네트워크 홉이 줄어들어 요청 속도가 빨라질 수 있습니다.
  • 클라이언트가 상황에 맞는 유연한 로드밸런싱 로직을 적용 가능합니다.

단점

  • 클라이언트의 구현이 복잡해질 수 있습니다.
  • 서비스 디스커버리와 서버 상태 관리에 추가 비용이 발생합니다.

4️⃣ 로드밸런서의 종류

로드밸런서는 크게 OSI 7계층 중 어느 단계에서 트래픽을 처리하느냐에 따라 분류됩니다.

  • L4 로드밸런서 (Network/Transport Layer)

    • 전송 계층 (TCP/UDP) 기반
    • 패킷의 IP, 포트 등을 보고 트래픽을 분산 처리합니다.
    • 데이터 내용을 확인하지 않아 처리 속도가 빠르고 효율적이지만 세밀한 제어는 어렵습니다.
    • ex) AWS NLB, HAProxy
  • L7 로드밸런서 (Application Layer)

    • 애플리케이션 계층 (HTTP/HTTPS) 기반
    • HTTP 헤더, 쿠키, URL 경로 등 실제 애플리케이션 메시지 내용을 보고 분산합니다.
    • 정 패턴에 따른 정밀한 라우팅이 가능합니다 (예: /images 경로는 A 서버로, /api 경로는 B 서버로 전송)
    • ex) Nginx, AWS ELB

5️⃣ Scale Up vs Scale Out

  • Scale Up (스케일 업): 단일 서버의 성능(메모리, CPU)을 증가시켜 처리 능력 향상
  • Scale Out (스케일 아웃): 서버를 여러 대 두고 트래픽을 분산 처리
    → 클라우드 환경에서는 스케일 아웃이 일반적이며, 오토스케일링(Auto Scaling)과 함께 사용됨

6️⃣ SPOF (Single Point of Failure) 문제

  • 로드밸런서 자체가 장애가 나면 전체 서비스가 중단될 수 있음
  • 해결 방법: 로드밸런서 이중화(HA)
    • Active-Standby: 하나는 대기, 하나는 활성
    • Active-Active: 여러 대를 동시에 사용해 부하 분산

7️⃣ 기타 로드밸런싱 방식

  • DNS 로드밸런싱: 동일한 도메인에 여러 IP를 등록해 분산
  • 애니캐스트(Anycast): 가장 가까운 라우터/서버로 요청 전달
  • CDN 연계: 전 세계 분산된 엣지 서버와 함께 사용해 지연 최소화

8️⃣ 추가 CS 지식

🔹 로드밸런싱과 장애 대응

  • 헬스 체크(Health Check): 서버 상태를 주기적으로 점검
  • Failover: 특정 서버 장애 발생 시 자동으로 다른 서버로 트래픽 전환

🔹 로드밸런싱과 보안

  • DDoS 방어: 로드밸런서 앞단에 WAF(Web Application Firewall) 배치
  • SSL 종료(SSL Offloading): 인증서 관리 및 암호화 부하 감소
  • 보안 레이어링: L3/L4/L7 레벨별 방어 체계 구축

🔹 로드밸런싱과 클라우드

  • AWS: Elastic Load Balancer (ELB)
  • GCP: Cloud Load Balancing
  • Azure: Azure Load Balancer
    → 대부분의 클라우드 서비스는 L4/L7 로드밸런싱과 오토스케일링을 통합 제공

🔹 로드밸런싱과 오토스케일링

  • 로드밸런싱: 트래픽 분산
  • 오토스케일링: 서버 증감
    → 함께 사용 시 트래픽 폭증에도 안정적 대응 + 비용 최적화 가능

🔹 로드밸런싱과 마이크로서비스

  • MSA 환경에서는 서비스별로 로드밸런서를 둠
  • Kubernetes에서는 Service + Ingress Controller가 L4/L7 로드밸런서 역할
  • Istio 같은 Service Mesh와도 밀접한 관계

🔹 로드밸런서 성능 지표

  • TPS (Transactions Per Second)
  • RPS (Requests Per Second)
  • Latency (지연 시간)
  • Error Rate (오류율)

0개의 댓글