로드 밸런싱 (Load Balancing)

한눈에 보기

로드 밸런싱은 트래픽을 여러 서버에 분산해 처리량과 가용성을 높이는 기술이다. L4와 L7의 차이, 라운드 로빈과 최소 연결 등 분산 알고리즘, 헬스 체크와 세션 처리 전략을 정리한다.

최종 업데이트 2026.09.17

로드 밸런싱(load balancing)은 들어오는 트래픽을 여러 대의 서버에 나누어 보내서 특정 서버에 부하가 쏠리는 것을 막고 서비스 전체의 처리량과 가용성을 높이는 기술이다. 로드 밸런서(load balancer)는 클라이언트와 서버 사이에 위치해 요청을 받아 적절한 서버로 전달하며, 헬스 체크(health check)로 장애 서버를 자동으로 제외한다. 수평 확장(scale-out) 아키텍처가 성립하기 위한 전제 조건이라고 할 수 있다.

왜 로드 밸런싱이 필요한가

트래픽이 늘었을 때 서버 한 대의 사양을 올리는 수직 확장(scale-up)은 비용이 급격히 증가하고 물리적 상한이 있으며, 그 한 대가 죽으면 서비스 전체가 멈추는 단일 장애점(SPOF, Single Point of Failure)이 된다. 여러 대의 평범한 서버를 두고 트래픽을 분산하면 비용 효율이 좋고, 일부 서버가 장애를 일으켜도 나머지가 요청을 이어받아 가용성이 유지되며, 배포 시에도 서버를 한 대씩 교체하는 무중단 배포가 가능해진다. 로드 밸런서는 이 분산을 실제로 수행하는 관문이면서, 클라이언트에게는 서버가 몇 대인지 감추는 단일 진입점 역할도 한다.

L4와 L7 로드 밸런싱

로드 밸런서는 트래픽을 어느 계층의 정보로 판단하느냐에 따라 크게 둘로 나뉜다. L4 로드 밸런서는 전송 계층의 IP 주소와 포트만 보고 패킷을 전달하므로 빠르고 단순하다. L7 로드 밸런서는 애플리케이션 계층까지 올라가 HTTP 헤더, URL 경로, 쿠키 같은 내용을 해석해 라우팅하므로 유연하지만 처리 비용이 더 든다.

구분L4 로드 밸런서L7 로드 밸런서
판단 근거IP, 포트URL, 헤더, 쿠키 등 요청 내용
동작 방식패킷 전달에 가까움연결을 종단하고 새 요청 생성(프록시)
성능빠르고 오버헤드 적음상대적으로 무겁지만 기능 풍부
가능한 기능단순 분산경로 기반 라우팅, TLS 종료, 캐싱, 압축, WAF 연동
대표 사례AWS NLB, LVSAWS ALB, Nginx, HAProxy, Envoy

실무에서는 두 계층을 조합하는 경우가 많다. 예를 들어 앞단에 L4 계층으로 대량 트래픽을 받아 넘기고, 뒤의 L7 프록시가 /api는 API 서버로, /static은 정적 파일 서버로 나누는 식이다. L7 로드 밸런서에서 TLS를 종료(TLS termination)하면 인증서를 한곳에서 관리하고 뒷단 서버의 암호화 부담을 덜 수 있어, HTTPS 서비스의 표준 구성으로 자리 잡았다.

분산 알고리즘

  • 라운드 로빈(round robin): 서버에 순서대로 돌아가며 배정한다. 구현이 단순하고 서버 성능이 균등할 때 적합하다.
  • 가중 라운드 로빈(weighted round robin): 서버마다 가중치를 두어 성능이 좋은 서버에 더 많은 요청을 보낸다.
  • 최소 연결(least connections): 현재 연결 수가 가장 적은 서버를 고른다. 요청 처리 시간이 들쭉날쭉할 때 유리하다.
  • IP 해시(IP hash): 클라이언트 IP를 해시해 항상 같은 서버로 보낸다. 세션 고정 효과가 있지만 분포가 치우칠 수 있다.
  • 일관된 해싱(consistent hashing): 서버가 추가되거나 빠져도 재배치되는 키를 최소화하는 해시 방식으로, 캐시 서버 분산에 특히 널리 쓰인다.

알고리즘 선택의 핵심은 요청의 성격이다. 처리 시간이 균일하면 라운드 로빈으로 충분하고, 편차가 크면 최소 연결이, 특정 서버와의 연관성이 필요하면 해시 계열이 어울린다.

요청이 처리되는 과정

  1. 클라이언트가 로드 밸런서의 가상 IP(VIP, Virtual IP) 또는 도메인으로 요청을 보낸다.
  2. 로드 밸런서가 헬스 체크 결과를 반영한 정상 서버 목록에서 알고리즘에 따라 대상 서버를 고른다.
  3. L4라면 패킷의 목적지를 바꿔 전달하고, L7이라면 클라이언트와의 연결을 종단한 뒤 서버로 새 요청을 보낸다. 이때 원래 클라이언트 IP는 X-Forwarded-For 헤더 등으로 전달한다.
  4. 서버 응답이 로드 밸런서를 거쳐 클라이언트로 돌아간다.
  5. 헬스 체크에 연속 실패한 서버는 목록에서 제외되고, 복구가 확인되면 다시 편입된다.

헬스 체크는 TCP 연결 성공 여부만 보는 단순한 방식부터, 특정 경로에 HTTP 요청을 보내 상태 코드와 응답 내용까지 확인하는 방식까지 다양하다. 검사 주기와 실패 임계 횟수, 타임아웃을 조절해 장애 감지 속도와 오탐 사이의 균형을 맞춘다.

세션 처리와 로드 밸런서 자체의 이중화

서버가 메모리에 세션을 저장하면 같은 사용자의 다음 요청이 다른 서버로 가는 순간 로그인이 풀린다. 해결책은 두 갈래다. 하나는 스티키 세션(sticky session)으로, 쿠키나 IP 해시를 이용해 같은 사용자를 같은 서버로 고정하는 방식인데 분산 균형이 깨지고 해당 서버 장애 시 세션이 유실된다. 더 권장되는 방향은 세션을 Redis 같은 외부 저장소로 빼거나 JWT처럼 무상태 토큰을 사용해 어떤 서버가 받아도 무방하게 만드는 것이다. 한편 로드 밸런서 자신이 SPOF가 되지 않도록 액티브-스탠바이(active-standby) 이중화나 DNS 라운드 로빈, 애니캐스트(anycast)를 함께 사용하며, 클라우드 관리형 로드 밸런서는 이런 이중화를 기본으로 제공한다.

면접에서 이렇게 물어본다

  • L4와 L7 로드 밸런서의 차이를 예를 들어 설명하고, 각각 어떤 상황에 적합한가.
  • 라운드 로빈과 최소 연결 방식은 각각 언제 유리한가.
  • 로드 밸런싱 환경에서 세션 불일치 문제가 왜 생기고 어떻게 해결하는가.
  • 헬스 체크는 어떤 방식으로 동작하며 어떤 값을 조정할 수 있는가.
  • 로드 밸런서 자체가 단일 장애점이 되는 문제는 어떻게 방지하는가.
네트워크 문서 전체 보기

이 개념, 내 코드에서는 어떻게 물어볼까요

데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.

공고 넣고 시작하기