[Network] 로드 밸런싱 (Load Balancing)

jiny·2026년 3월 15일

Computer Science

목록 보기
14/16

1. 로드 밸런싱이란?

✨ 정의 및 목적

  • 정의
    • 네트워크 트래픽이나 작업 부하(Load)를 여러 컴퓨팅 자원(서버/CPU/저장장치 등)에 고르게 분산(Balancing)시키는 기술
    • 클라이언트와 백엔드 서버 사이에 위치하는 로드 밸런서(Load Balancer)가 요청을 수신하여 적절한 서버로 라우팅해주며, 특정 서버의 과부하나 장애 시 자동으로 다른 서버로 우회시키는 역할을 한다.
  • 목적
    • 단일 서버에 부하가 집중되는 것을 방지한다.
    • 시스템 전체의 가용성(Availability), 응답성(Responsiveness), 확장성(Scalability)을 확보한다.

✨ 왜 필요한가?

  • 고가용성(High Availability): 서버 1대가 장애가 나도 다른 서버가 요청을 처리하여 무중단 서비스가 가능하다.
  • 확장성(Scalability): 트래픽 증가 시 서버를 추가하는 것만으로도 수평 확장이 가능하다.
  • 성능 최적화: 요청을 분산하여 각 서버의 응답 시간을 단축한다.
  • 자원 효율성: 모든 서버가 고르게 일하므로 유휴(idle) 서버를 최소화할 수 있다.
  • 보안 강화: 클라이언트가 실제 서버 IP를 직접 알 수 없어 DDoS 공격 방어에 유리하다.

    DDoS (Distributed Denial of Service, 분산 서비스 거부 공격)

    여러 대의 컴퓨터가 동시에 특정 서버나 사이트에 엄청난 양의 요청을 보내서 정상적인 사용자가 서비스를 이용하지 못하게 만드는 공격

✨ Scale-Up vs. Scale-Out

구분Scale-Up (수직 확장)Scale-Out (수평 확장)
방식기존 서버의 하드웨어 성능 향상서버 대수를 늘려 부하 분산
비용고사양으로 갈수록 급격히 상승저사양 서버 추가로 선형 증가
한계물리적 한계 존재 (CPU, RAM 상한)이론상 무한 확장 가능
장애 대응단일 장애점 (SPOF)무중단 서비스 용이
적합 상황DB 서버, 레거시 시스템웹 서버, API 서버, MSA
예시CPU 8코어→16코어 업그레이드EC2 인스턴스 2대→8대로 증설

SPOF (Single Point of Failure, 단일 장애 지점)

한 부분이 고장 나면 전체 서비스나 시스템이 멈출 수 있는 핵심 지점

EC2 인스턴스

AWS에서 빌려 쓰는 가상 서버

  • EC2 = Amazon Elastic Compute Cloud
  • 인스턴스 = 그 EC2 서비스 위에서 실제로 만들어서 실행 중인 가상 컴퓨터 1대

🔑 핵심 포인트

실무에서는 Scale-Up과 Scale-Out을 혼합 사용한다.
DB는 Scale-Up 위주, 애플리케이션 서버는 Scale-Out 위주로 구성하는 것이 일반적이다.


2. 로드 밸런서의 유형

✨ OSI 계층별 분류

로드 밸런서는 동작하는 OSI 계층에 따라 크게 L4와 L7로 구분된다.

구분L4 로드 밸런서L7 로드 밸런서
계층Transport Layer (TCP/UDP)Application Layer (HTTP/HTTPS)
판단 기준IP 주소 + 포트 번호URL, HTTP 헤더, 쿠키, 콘텐츠 타입
성능빠름 (L7보다 오버헤드 적음)L4보다 느리지만 정밀한 라우팅
세부 제어제한적URL 기반 라우팅, A/B 테스트, 캐시 등 가능
SSL 처리불가 (복호화 불가)SSL Termination 가능
사용 예시TCP 기반 게임 서버, DNS 밸런싱API Gateway, CDN, 웹 애플리케이션
대표 제품AWS NLB, HAProxy (TCP mode)AWS ALB, Nginx, HAProxy (HTTP mode)
장점보안성이 높고 저렴함비정상적인 트래픽 필터링효율적인 캐싱 가능
단점패킷 내용을 알 수 없어 섬세한 제어 불가패킷을 복호화해야 하므로 자원 소모가 더 큼

✨ 하드웨어 vs. 소프트웨어 로드 밸런서

구분하드웨어 LB소프트웨어 LB
형태전용 물리 장비소프트웨어로 구현
성능초고속 (ASIC 칩 기반)하드웨어보다는 느리지만 충분
비용수천만~수억원오픈소스 무료 또는 저렴
예시F5 BIG-IP, Citrix ADCNginx, HAProxy, Envoy

3. 로드 밸런싱 알고리즘 상세

✨ 정적 알고리즘 (Static Algorithms)

서버의 현재 상태를 고려하지 않고 미리 정해진 규칙에 따라 분배한다.

  1. 라운드 로빈 (Round Robin)
    • 정의: 요청을 서버 목록에 순서대로 돌아가며 배분한다. CPU 스케줄링의 Round Robin과 동일한 원리이다.
    • 장점: 구현이 가장 간단하고 예측 가능하다.
    • 단점: 서버별 성능 차이를 반영하지 못한다. 고사양 서버와 저사양 서버가 혼재하면 비효율적이다.
    • 적합한 상황: 모든 서버의 사양이 동일하고, 요청 처리 시간이 비슷한 경우
  1. 가중 라운드 로빈 (Weighted Round Robin)
    • 정의: 각 서버에 가중치(Weight)를 부여하여 성능이 좋은 서버에 더 많은 요청을 배분한다.
    • 예시: 서버 A(weight=5), B(weight=3), C(weight=2)이면 10개 요청 중 A에 5개, B에 3개, C에 2개를 배분한다.
    • 장점: 서버별 성능 차이를 반영할 수 있다.
    • 단점: 실시간 부하 변화를 반영하지 못한다. 가중치 설정이 수동이다.
  1. IP 해시 (Source/IP Hash)
    • 정의: 클라이언트의 IP 주소를 해시 함수에 통과시켜 특정 서버에 매핑한다. 동일한 클라이언트는 항상 같은 서버로 연결된다.
    • 장점: 세션 유지(Session Persistence/Sticky Session)가 보장된다.
    • 단점: 서버 추가/제거 시 해시 분포가 크게 변동될 수 있다. (rehashing 문제)
    • 해결책: Consistent Hashing을 적용하면 서버 변경 시 영향을 최소화할 수 있다.

      Consistent Hashing

      • 정의: 서버가 추가되거나 제거될 때, 기존 데이터나 요청의 재배치 범위를 최소화하는 해시 방식
      • 핵심 아이디어: 서버와 요청(또는 데이터)을 원형 해시 공간 위에 배치해두고, 각 요청은 자기 위치에서 가장 가까운 서버로 보낸다.

✨ 동적 알고리즘 (Dynamic Algorithms)

서버의 현재 상태(connection 수, 응답 시간 등)를 실시간으로 모니터링하여 반영한다.

  1. Least Connections
    • 정의: 현재 연결 수가 가장 적은 서버에 새 요청을 배분한다.
    • 적합한 상황: 요청 처리 시간이 불균일하여 세션이 길어지는 경우 (DB 쿼리, WebSocket, 파일 업로드)
    • 변형: Weighted Least Connections (서버 성능에 따른 가중치를 추가 반영)
  1. Least Response Time
    • 정의: 현재 연결 수가 가장 적으면서 평균 응답 시간이 가장 짧은 서버에 우선 배분한다.
    • 장점: Least Connections보다 더 정밀한 부하 판단이 가능하다.
    • 단점: 응답 시간 측정을 위한 추가 오버헤드가 발생한다.
  1. Resource-Based (Adaptive)
    • 정의: 서버의 CPU, 메모리, 네트워크 대역폭 등 실제 자원 사용량을 모니터링하여 분배한다. 에이전트(Agent)가 각 서버에 설치되어 상태 정보를 주기적으로 보고한다.

✨ 알고리즘 선택 가이드

상황권장 알고리즘이유
서버 사양 동일, 요청 균일Round Robin가장 간단하고 효과적
서버 사양 불균일Weighted Round Robin성능 차이 반영
세션 유지 필요IP Hash동일 클라이언트 → 동일 서버
요청 처리 시간 편차 큼Least Connections실시간 부하 반영
마이크로서비스(MSA)L7 + Least ConnectionsURL 기반 라우팅 + 부하 분산

4. 세션 유지(Session Persistence) 전략

여러 대의 서버를 운영하는 Scale-out 환경에서는 클라이언트의 요청이 매번 다른 서버로 전달될 수 있다.
이때 사용자의 로그인 정보와 같은 '세션'을 어떻게 유지하느냐가 시스템의 안정성과 확장성을 결정짓는 핵심 요소이다.

✨ Sticky Session (부하 분산 기반 고정)

  • 정의: 특정 사용자의 요청이 처음 처리되었던 서버로만 계속 전달되도록 로드 밸런서가 강제하는 방식
  • 구현 방식
    • Source IP Hash: 사용자의 IP 주소를 해싱하여 특정 서버에 매핑한다.
    • Cookie: 로드 밸런서가 세션 쿠키를 삽입하여 서버를 식별한다.
  • 장점: 서버 코드를 수정할 필요가 없으며 구현이 간단하다.
  • 단점
    • 부하 불균형: 특정 서버에 사용자가 몰릴 경우 트래픽이 편향될 수 있다.
    • 가용성 문제: 해당 서버가 다운되면 해당 서버에 할당된 모든 사용자의 세션 데이터가 유실된다.

✨ 세션 클러스터링 (Session Clustering)

  • 정의: 모든 WAS(Web Application Server)가 서로의 세션 데이터를 복제하여 공유하는 방식
  • 구현 방식: 한 서버에서 세션이 생성/수정되면 다른 모든 서버로 해당 데이터를 전송(Replication)한다.
  • 장점: 특정 서버가 다운되어도 다른 서버에 복제본이 있어 서비스가 중단되지 않는다. (고가용성 보장)
  • 단점
    • 오버헤드: 서버 수가 늘어날수록 복제해야 할 데이터 양과 네트워크 통신량이 기하급수적으로 증가한다. (O(n²))
    • 메모리 낭비: 모든 서버가 동일한 세션 정보를 중복해서 들고 있어야 한다.

✨ 외부 세션 저장소 (External Session Store)

  • 정의: 세션 데이터를 서버 내부 메모리가 아닌, 별도의 독립된 저장소(Redis, Memacached 등)에 보관하는 방식
  • 구현 방식: 모든 서버가 공용 저장소를 바라보게 설정한다.
  • 장점
    • Stateless 서버: 서버는 세션 데이터를 직접 관리하지 않으므로 자유로운 Scale-out이 가능하다.
    • 데이터 정합성: 어떤 서버로 접속하더라도 동일한 세션 저장소를 참조하므로 데이터 불일치가 발생하지 않는다.
  • 단점: 외부 저장소 자체가 장애 포인트(SPOF)가 될 수 있으므로, 저장소 자체의 이중화(Replication/Sentinel) 구성이 필수적이다.

✨ 세션 관리 전략 비교

구분Sticky SessionSession ClusteringExternal Store
데이터 위치개별 서버 메모리모든 서버 메모리 복제외부 공유 저장소 (Redis 등)
확장성보통낮음 (서버 증가 시 부하 급증)매우 높음
가용성낮음 (서버 장애 시 유실)높음매우 높음
관리 복잡도낮음중간중간 (외부 인프라 관리 필요)

5. Health Check 메커니즘

로드 밸런서는 백엔드 서버들이 살아있는지 주기적으로 확인하여, 건강한(Healthy) 서버에만 요청을 전달하고 문제가 있는(Unhealthy) 서버는 서비스에서 일시적으로 제외한다.

✨ Health Check 방식 (OSI 계층별 분류)

단순히 서버가 켜져 있는지 확인하는 것을 넘어, 실제 서비스가 가능한 상태인지 확인하기 위해 다양한 계층의 방식을 혼합하여 사용한다.

방식계층확인 방법특징
ICMP (Ping)L3ICMP Echo Request를 보내 응답 확인네트워크 연결성만 확인 가능 (실제 앱 상태는 모름)
TCP CheckL43-way Handshake를 통해 포트 열림 확인빠르고 부하가 적지만, 프로세스 좀비 상태 등은 감지 불가
HTTP CheckL7특정 URL(예: /health)로 GET 요청 후 응답 코드 확인가장 권장됨. DB 연결 등 실제 앱 로직의 정상 작동 확인 가능
Custom Script-서버 내 에이전트가 DB, 디스크, CPU 등을 체크매우 정교한 상태 확인이 가능하나 설정이 복잡함

✨ 주요 설정 파라미터 및 판정 기준

상태 확인의 정확도를 높이고, 일시적인 네트워크 불안정으로 인해 서버가 서비스에서 빈번하게 빠졌다가 들어오는 Flapping(플래핑) 현상을 방지하기 위해 아래 파라미터들을 정교하게 설정한다.

  • Interval (주기): Health Check를 수행하는 시간 간격 (보통 5~10초)
  • Timeout (타임아웃): 응답을 기다리는 최대 시간. 이 시간을 넘기면 1회 실패로 간주한다.
  • Unhealthy Threshold (실패 임계치): 연속으로 N회 실패하면 해당 서버를 비정상(Unhealthy)으로 판단하고 트래픽 배분에서 제외한다.
  • Healthy Threshold (성공 임계치): 비정상 상태였던 서버가 다시 연속으로 M회 성공하면 정상(Healthy)으로 복구시켜 트래픽을 다시 보낸다.

✨ Health Check 워크플로우 시각화

서버가 장애에서 복구되어 다시 서비스에 투입되는 과정을 나타낸 흐름이다.

✨ 운영 시 고려해야 할 포인트

  • L7 Health Check의 중요성
    TC 포트만 열려 있고 실제 DB 연결이 끊어져 에러 페이지가 뜨는 경우, TCP Check는 '정상'으로 판단하지만 HTTP Check는 '비정상'으로 판단하여 사용자의 불편을 막을 수 있다.
  • 부하 고려
    Health Check 주기가 너무 짧으면 로드 밸런서와 서버 모두에 불필요한 부하를 줄 수 있으므로 서비스 특성에 맞는 최적의 값을 찾아야 한다.
  • Graceful Shutdown
    서버 점검 시 의도적으로 Health Check 응답을 실패하게 만들어(예: 특정 파일 삭제), 트래픽이 자연스럽게 끊기도록 유도한 뒤 안전하게 서버를 내릴 수 있다.

6. 로드 밸런서 고가용성(HA) 구성

로드 밸런서가 중단되면 뒤에 있는 수십 대의 서버가 정상이라도 서비스 전체가 마비된다.
이를 방지하기 위해 로드 밸런서를 이중화하여 무중단 서비스를 보장한다.

✨ Active-Passive (장애 대비형)

  • 정의: 가장 표준적인 구성 방식으로, 한 대는 실무를 담당하고 다른 한 대는 비상 대기하는 형태
  • 작동 원리
    • VIP (Virtual IP): 클라이언트는 개별 서버 IP가 아닌 가상의 대표 IP(VIP)로 접속한다.
    • Heartbeat: 두 로드 밸런서는 서로 '살아있음'을 알리는 신호(Heartbeat)를 주고받는다.
    • Failover: Active 장비에 장애가 발생하여 신호가 끊기면, Passive 장비가 즉시 VIP를 인계받아 서비스를 계속한다.
  • 장점: 구성이 비교적 단순하며, 장애 발생 시 전환히 확실하다.
  • 단점: 평상시 Passive 장비의 자원이 낭비된다는 경제적 단점이 있다.

✨ Active-Active (성능 확장형)

  • 정의: 두 대 이상의 로드 밸런서가 동시에 트래픽을 처리하는 방식
  • 작동 원리
    • GSLB/DNS: DNS 라운드 로빈 등을 통해 트래픽을 여러 로드 밸런서로 먼저 분산시킨다.
    • 모든 로드 밸런서가 활성화되어 각자의 부하를 처리한다.

      GSLB (Global Server Load Balancing)

      전 세계에 분산된 서버 간에 인터넷 트래픽을 효율적으로 분산하여, 사용자가 가장 가까운 데이터센터로 접속하게 하고, 서버 장애 시 우회 경로를 제공하여 서비스 안정성을 높이는 DNS 기반 기술

  • 장점: 전체 처리 용량이 늘어나며 자원 활용률이 극대화된다.
  • 단점: 설정이 매우 복잡하며, 로드 밸런서 간의 상태 동기화 비용이 발생한다.

✨ HA 구성 방식 비교

구분Active-PassiveActive-Active
자원 효율성낮음 (1대는 대기만 함)높음 (모든 자원 활용)
장애 대응Failover 시 약간의 지연 발생 가능즉각적인 대응 가능 (남은 장비가 처리)
구성 난이도보통높음
비용동일 사양 2대 필요 (가성비 낮음)동일 사양 2대 필요 (가성비 높음)
주요 기술VRRP, HeartbeatGSLB, DNS Round Robin

VRRP (Virtual Router Redundancy Protocol)

여러 대의 라우터를 하나의 그룹으로 묶어 가상 IP를 부여하고, 마스터(Active) 장비가 죽으면 백업(Passive) 장비가 그 역할을 자동으로 승계하도록 돕는 핵심 기술


7. DNS 및 글로벌 로드 밸런싱 (GSLB)

서비스 규모가 커져 여러 지역(Region)에 데이터 센터를 운영하게 되면, 사용자를 가장 가까운 곳으로 안내하거나 특정 지역의 장애에 대응하는 기술이 필요하다.

✨ DNS 라운드 로빈 (DNS Round Robin)

  • 정의: 하나의 도메인 이름에 여러 개의 서버 IP 주소를 등록하여, DNS 서버가 요청이 올 때마다 순서대로 IP를 반환하는 방식
  • 특징: 별도의 장비 없이 DNS 설정만으로 구현 가능한 가장 기본적인 분산 방식이다.
  • 한계점
    • 상태 확인 불가: 서버가 죽어도 DNS는 계속 해당 IP를 알려준다. (Health Check 부재)
    • 캐싱 문제: 클라이언트나 ISP의 DNS 캐시(TTL) 때문에 서버를 목록에서 제외해도 한동안 트래픽이 계속 유입될 수 있어 실시간 대응이 어렵다.

✨ GSLB (Global Server Load Balancing)

  • 정의: DNS의 원리를 이용하되, 서버의 상태와 사용자의 위치 등을 지능적으로 판단하여 최적의 IP를 응답하는 기술
  • 핵심 기능
    • Health Check: 각 데이터 센터의 상태를 주기적으로 확인하여, 장애가 발생한 곳의 IP는 응답에서 즉시 제외한다.
    • 지리적 라우팅 (Geo-location): 사용자의 IP를 분석하여 물리적으로 가장 가까운 데이터 센터로 연결해 응답 속도(Latency)를 최소화한다.
    • 부하 기반 라우팅: 특정 데이터센터에 트래픽이 몰리면 여유 있는 다른 지역으로 유도한다.
    • 재해 복구 (Disaster Recovery): 특정 리전 전체가 마비되어도 다른 리전으로 자동 전환(Failover)하여 서비스 연속성을 보장한다.

✨ DNS 라운드 로빈 vs. GSLB 비교

구분DNS 라운드 로빈GSLB
판단 기준단순 순번 (Rotation)상태, 거리, 부하, 가용성 등 종합 판단
Health Check없음 (장애 서버로도 전송)있음 (정상 서버만 응답)
사용자 경험지역에 상관없이 무작위 연결최단 거리 데이터 센터 연결 (빠름)
장애 대응TTL 만료 전까지 대응 불가실시간에 가까운 자동 Failover
대표 서비스일반 DNS 서버AWS Route 53, Cloudflare, Akamai

8. 실무 아키텍처 패턴

현대적인 대규모 웹 서비스는 단일 로드 밸런서가 아니라, 글로벌 - 리전 - 애플리케이션 - 데이터 계층으로 이어지는 다중 로드 밸런싱 구조를 가진다.

✨ 계층별 트래픽 흐름 (End-to-End)

  • Global Layer (DNS/GSLB): 사용자와 가장 가까운 리전(데이터 센터)의 IP를 반환한다.
  • Edge Layer (CDN/WAF): 정적 콘텐츠(이미지, JS 등)를 캐싱하고, 악성 공격(DDoS, SQL Injection)을 필터링한다.
  • Regional Layer (L7 LB): SSL Termination(복호화 처리)을 수행하고, URL 경로(예: /api vs. /static)에 따라 적절한 서버 그룹으로 전달한다.
  • Application Layer (Auto Scaling): 트래픽 양에 따라 서버 대수를 자동으로 조절하며, Least Connections 알고리즘으로 부하를 분산한다.
  • Data Layer (Read/Write Splitting): 쓰기 작업은 Master DB로, 읽기 작업은 여러 대의 Read Replica로 분산하여 DB 부하를 관리한다.

✨ AWS 기반 클라우드 네이티브 구성

AWS 환경에서는 관리형 서비스를 조합하여 높은 가용성과 확장성을 확보한다.

계층AWS 서비스주요 역할 및 특징
글로벌 DNSRoute 53지연 시간 기반 라우팅, 상태 확인 기반 Failover
보안 & 캐시CloudFront + WAF전 세계 엣지 로케이션 캐싱 + 웹 방화벽 보안
L7 밸런싱ALB (Application LB)HTTP/HTTPS 경로 기반 라우팅, Lambda/컨테이너 연동
컴퓨팅EC2 Auto Scaling부하에 따른 서버 인스턴스 자동 증설/축소
세션 저장ElastiCache (Redis)분산 세션 관리 및 데이터 캐싱 (In-memory)
데이터베이스RDS Multi-AZ마스터 장애 시 대기 장비로 자동 전환 (고가용성)

✨ Nginx 로드 밸런싱 설정 예시

Nginx는 가볍고 강력한 성능 덕분에 소프트웨어 로드 밸런서로 가장 많이 사용된다.

upstream backend_servers {
   # 1. 알고리즘 선택: 연결 수가 가장 적은 서버 우선
   least_conn;
   
   # 2. 서버 목록 및 가중치(Weight) 설정
   server 10.0.1.1:8080 weight=5;  # 고사양 서버: 더 많은 요청 처리
   server 10.0.1.2:8080 weight=3;  # 중간 사양
   server 10.0.1.3:8080 weight=1;  # 저사양 서버
   
   # 3. 상태 확인 및 장애 대응
   # 30초 동안 2번 실패하면 30초간 제외
   server 10.0.1.4:8080 max_fails=2 fail_timeout=30x;
   
   # 4. 백업 서버: 모든 서버 장애 시에만 활성화
   server 10.0.1.5:8080 backup;
}

server {
   listen 80;
   server_name gyoogle.dev;
   
   location / {
      proxy_pass http://backend_servers;  # 위에서 정의한 그룹으로 전달
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
   }
}

0개의 댓글