여러 서버가 있을 때 트래픽을 처리하는 방법
Scale Out은 서버 한 대의 성능을 키우는 대신, 여러 대의 서버를 두고 트래픽을 분산 처리하는 방식이다. 많은 서비스가 Scale Out 구조를 선택하지만, 서버 수만 늘린다고 해서 자동으로 트래픽이 분산되지는 않는다. 이때 반드시 등장하는 개념이 Load Balancer다. 이 글에서는 Scale Out 구조에서 Load Balancer가 왜 필요한지 개념 중심으로 정리한다.
Scale Out 구조의 기본 전제
Scale Out은 동일한 역할을 수행하는 서버를 여러 대 두는 구조다.
예를 들면 다음과 같다.
- API 서버 1대 → 3대 → 10대
- 동일한 애플리케이션을 여러 인스턴스로 실행
이 구조의 목표는 하나다.
- 들어오는 요청을 여러 서버가 나눠 처리하는 것
하지만 여기에는 중요한 문제가 하나 있다.
서버가 여러 대면 어떤 서버로 요청을 보낼까
외부 클라이언트는 기본적으로 하나의 주소로 요청을 보낸다.
- 하나의 도메인
- 하나의 IP
클라이언트는 서버가 몇 대인지, 어느 서버가 살아 있는지 알지 못한다.
즉, Scale Out만으로는 다음 문제가 해결되지 않는다.
- 요청을 어떤 서버로 보낼지
- 특정 서버에 트래픽이 몰리지 않게 하는 방법
이 문제를 해결하는 역할이 Load Balancer다.
Load Balancer란 무엇인가
Load Balancer는 들어오는 요청을 여러 서버로 분산하는 역할을 한다.
Load Balancer의 기본 역할은 다음과 같다.
- 요청을 서버들에게 균등하게 분산
- 장애가 발생한 서버로 요청 전달 차단
- 서버 목록을 중앙에서 관리
클라이언트는 항상 Load Balancer만 바라보고, 실제 서버 선택은 Load Balancer가 담당한다.
Load Balancer가 없으면 생기는 문제
Scale Out 구조에서 Load Balancer가 없다면 다음 문제가 발생한다.
- 특정 서버에 트래픽 집중
- 서버 장애 시 요청 실패
- 서버 추가/제거 시 설정 변경 필요
결국 서버를 여러 대 두었음에도, 안정성과 확장성을 얻기 어렵다.
Load Balancer와 단일 장애 지점 문제
Load Balancer는 단일 진입점이기 때문에, 새로운 단일 장애 지점이 될 수 있다는 오해가 있다.
실제 운영 환경에서는 다음과 같이 구성한다.
- Load Balancer 자체를 이중화
- 클라우드 로드밸런서 사용
- Kubernetes Ingress Controller 사용
즉, Load Balancer 역시 Scale Out 구조로 운영된다.
Load Balancer가 해주는 중요한 추가 역할
단순한 트래픽 분산 외에도 Load Balancer는 다음 역할을 수행한다.
- 헬스 체크를 통한 비정상 서버 제외
- SSL 종료 처리
- 트래픽 제어 및 제한
이 기능들은 애플리케이션 서버의 부담을 줄여준다.
Scale Out + Load Balancer의 기본 흐름
일반적인 요청 흐름은 다음과 같다.
- 클라이언트 → Load Balancer → 서버 A
- 클라이언트 → Load Balancer → 서버 B
- 클라이언트 → Load Balancer → 서버 C
서버 수가 늘어나도 클라이언트 구조는 변하지 않는다.
이 점이 Scale Out 구조의 핵심이다.
무상태(stateless) 구조가 중요한 이유
Load Balancer를 사용하려면 서버가 무상태 구조여야 한다.
- 특정 서버에만 세션 정보 저장
- 특정 서버에만 상태 의존
이런 구조에서는 요청 분산이 어렵다.
그래서 Scale Out 환경에서는 다음 전략이 필요하다.
- 세션 외부 저장소 사용
- 공용 캐시 또는 DB 사용
실무에서 Load Balancer가 기본이 되는 이유
실무에서는 다음 조합이 가장 흔하다.
- 웹/API 서버: Scale Out + Load Balancer
- DB 서버: 제한적인 Scale Out
- 캐시 서버: 중앙 집중형 구조
Load Balancer는 Scale Out 구조를 완성시키는 필수 요소다.
정리
Scale Out은 서버 수를 늘리는 전략이지만, 요청을 어떻게 분산할지에 대한 해답은 아니다. Load Balancer는 여러 서버 앞단에서 트래픽을 분산하고, 장애를 감지하며, 서버 구조 변경을 감추는 역할을 한다. Scale Out을 제대로 활용하려면 Load Balancer는 선택이 아니라 필수다.