로드 밸런싱이란?
- 여러 서버나 네트워크 장치 간에 트래픽이나 작업 부하를 균등하게 분산시키는 기술
- 고가용성 : 한 서버에 장애가 발생해도 다른 서버가 트래픽을 처리하여 서비스 중단을 방지함
- 확장성 : 부하가 증가할 때 서버를 추가하여 성능을 유지할 수 있음
- 성능 향상 : 부하를 균등하게 분산하여 각 서버의 효율을 높임

로드 밸런싱이 필요한 이유
- 트래픽 증가 : 인터넷 사용자의 증가로 단일 서버로는 모든 요청을 처리하기 어려워짐
- 서비스 안정성 필요 : 서버 장애 시 서비스 중단을 최소화해야 함
- 확장성 요구 : 비즈니스 성장에 따라 시스템을 유연하게 확장할 필요가 있음
- 자원 효율화 : 서버 자원을 최적화하여 성능을 향상시키기 위해서
로드 밸런싱이 사용되는 곳
- 웹 서버 : 대량의 웹 요청을 여러 서버로 분산하여 처리함
- 데이터베이스 서버 : 데이터 조회 작업을 여러 서버에 분산함
- 애플리케이션 서버 : 비즈니스 로직 처리를 위한 서버 부하를 분산함
- 네트워크 장비 : 라우터나 스위치의 부하를 분산하여 네트워크 성능을 최적화함
로드 밸런싱의 작동 방식
클라이언트 측 로드 밸런싱
- 설명 : 클라이언트 애플리케이션이 직접 여러 서버로 요청을 분산함
- 특징 : 마이크로서비스 아키텍처에서 주로 사용되며, 클라이언트에 부하 분산 로직이 필요함
서버 측 로드 밸런싱
- 설명 : 중앙의 로드 밸런서가 클라이언트의 요청을 받아 여러 서버로 분산함
- 특징 : 클라이언트는 로드 밸런서의 주소만 알면 되며, 서버 추가나 제거가 용이함
DNS 로드 밸런싱
- 설명 : 하나의 도메인에 여러 IP 주소를 매핑하여 DNS 서버가 요청마다 다른 IP를 반환함
- 특징 : 설정이 간단하지만, 실시간 부하 분산이나 장애 대응이 어려움
레이어별 로드 밸런싱
L4 로드 밸런싱 (전송 계층)
- 작동 방식 : TCP/UDP 프로토콜과 포트 번호를 기반으로 트래픽을 분산함
- 특징
- 빠른 처리 속도를 제공함
- 패킷 수준에서 작동하므로 응용 계층의 내용은 인식하지 못함
- 사용 사례 : 단순한 트래픽 분산이 필요한 경우, 고성능이 요구되는 환경
L7 로드 밸런싱 (응용 계층)
- 작동 방식 : HTTP 헤더, URL, 쿠키 등 응용 계층의 데이터를 기반으로 트래픽을 분산함
- 특징
- 세밀한 트래픽 제어와 콘텐츠 기반 라우팅이 가능함
- SSL 종료, 세션 지속성 등 고급 기능을 제공함
- 사용 사례 : 웹 애플리케이션, API 게이트웨이 등에서 복잡한 트래픽 관리가 필요한 경우
로드 밸런싱 알고리즘
- 라운드 로빈(Round Robin)
- 로드 밸런서는 서버 목록을 순서대로 순환하며 각 요청을 다음 서버로 전달함
- 서버 목록의 끝에 도달하면 다시 처음 서버로 돌아가 순환을 계속함
- 균등 분배 : 모든 서버에 요청을 균등하게 분산함
- 간단한 구현 : 알고리즘이 단순하여 설정과 관리가 쉬움
- 부하 무시 : 서버의 현재 부하나 성능을 고려하지 않음
- 사용 예시 : 서버 간의 성능이 유사하고, 각 요청의 처리 시간이 비슷한 경우에 적합. 예를 들어, 정적인 콘텐츠를 제공하는 웹 서버 클러스터에서 사용됨
- 가중치 라운드 로빈 : 서버의 성능에 따라 가중치를 부여하여 분산함
- 각 서버에 가중치(weight)를 부여하고, 가중치에 비례하여 요청을 분산함
- 예를 들어, 가중치가 3인 서버는 가중치가 1인 서버보다 세 배의 요청을 받음
- 성능 반영 : 서버의 처리 능력이나 자원 상태에 따라 가중치를 설정하여 트래픽을 분산함
- 유연성 : 서버 추가나 제거 시 가중치를 조정하여 부하를 손쉽게 관리할 수 있음
- 사용 예시 : 서로 다른 성능의 서버들이 혼합된 환경에서 사용됨. 예를 들어, 새로운 고성능 서버를 추가하면서 기존 서버와 부하를 조절고자 할 때 유용함
- 최소 연결 수(Least Connections)
- 현재 가장 적은 활성 연결 수를 가진 서버로 새로운 요청을 전달함
- 로드 밸런서는 각 서버의 활성 연결 수를 지속적으로 모니터링함
- 실시간 부하 반영 : 서버의 현재 부하 상태를 고려하여 트래픽을 분산함
- 동적 분산 : 요청 처리 시간이 가변적이거나, 서버 성능이 동적으로 변화하는 환경에서 효율적임
- 사용 예시 : 동적 콘텐츠 제공이나 데이터베이스 쿼리 등 요청 처리 시간이 일정하지 않은 서비스에 적합함. 예를 들어, 사용자별로 처리 시간이 크게 차이나는 웹 애플리케이션에서 사용됨
- IP 해시(IP Hash)
- 클라이언트의 IP 주소를 특정 해시 함수에 적용하여 해시 값을 생성함
- 해시 값에 따라 특정 서버를 선택하고, 해당 서버로 요청을 전달함
- 결과적으로 동일한 클라이언트 IP는 항상 동일한 서버에 연결됨
- 세션 지속성 제공 : 클라이언트가 동일한 서버로 연결되므로, 서버에 세션 정보를 저장하는 애플리케이션에 유용함
- 간단한 구현 : 해시 함수를 사용하여 서버를 선택하므로 비교적 구현이 간단함
- 사용 예시 : 서버 측 세션을 사용하는 웹 애플리케이션이나, 상태 정보를 서버에 저장해야 하는 서비스에서 사용됨. 예를 들어, 온라인 쇼핑몰에서 장바구니 정보가 서버에 저장되는 경우에 적용할 수 있음
로드 밸런싱의 구현 방법
하드웨어 로드 밸런서
- 전용 장비를 사용하여 로드 밸런싱을 수행함
- 장점 : 높은 처리량과 안정성을 제공함
- 단점 : 비용이 높고 설정이 복잡할 수 있음
소프트웨어 로드 밸런서
- Nginx
- 오픈 소스 웹 서버로, 리버스 프록시와 로드 밸런싱 기능을 제공함
- 간단한 설정으로 HTTP/HTTPS 트래픽을 여러 백엔드 서버로 분산할 수 있음
- 장점 : 가볍고 빠르며, 다양한 기능을 플러그인으로 확장할 수 있음
- HAProxy
- 고성능의 오픈 소스 TCP/HTTP 로드 밸런서
- 다양한 로드 밸런싱 알고리즘과 고급 기능을 지원함
- 장점 : 높은 신뢰성과 성능으로 널리 사용됨
클라우드 서비스 활용
- AWS Elastic Load Balancing (ELB)
- Application Load Balancer (ALB) : L7 로드 밸런싱 지원
- Network Load Balancer (NLB) : L4 로드 밸런싱 지원
- 특징 : 자동 확장 및 고가용성을 지원하며, 관리가 편리함
- GCP Load Balancing
- 특징 : 전역 로드 밸런싱을 지원하며, 다양한 프로토콜을 처리할 수 있음
컨테이너 오케스트레이션 툴
- Kubernates (쿠버네티스)
- 컨테이너화된 애플리케이션의 배포, 스케일링, 로드 밸런싱 등을 자동화하는 오픈 소스 플랫폼
- 주요 기능
- 자동화된 롤아웃 및 롤백 : 애플리케이션 업데이트를 자동으로 관리함
- 셀프 힐링 : 장애가 발생한 컨테이너를 자동으로 재시작하거나 교체함
- 서비스 디스커버리 및 로드 밸런싱 : 클러스터 내에서 서비스 간의 통신을 쉽게 설정하고 부하를 분산함
로드 밸런싱의 운영 및 유지보수
- 로드 밸런싱을 성공적으로 구현한 후에는 시스템이 안정적이고 효율적으로 동작하도록 지속적인 관리가 필요
- 이를 위해 모니터링과 유지보수가 중요
- 헬스 체크 : 로드 밸런서가 백엔드 서버의 상태를 주기적으로 확인하여 장애가 발생한 서버를 자동으로 제외함. 이를 통해 서비스 가용성을 높이고, 클라이언트에게 장애 서버로의 연결을 방지함
- 로그 분석 : 로드 밸런서와 서버에서 생성되는 로그를 분석하여 트래픽 패턴과 오를 파악함. 이를 통해 시스템 최적화 및 문제 해결에 도움을 줌
- 성능 튜닝 : 모니터링 도구를 통해 서버 자원 사용률을 확인하고, 로드 밸런서 설정을 최적화함. 이를 통해 전체 시스템의 성능을 향상시키고 안정적인 서비스를 제공함