← 아티클 목록

로드밸런싱 알고리즘 종류 — 라운드로빈부터 해시까지

2028-07-10#networking#로드밸런싱#트래픽

서버를 여러 대로 늘렸는데 한 대만 부하가 몰린다면, 로드밸런서가 트래픽을 어떤 규칙으로 나누는지 모르기 때문일 수 있습니다. 분배 알고리즘은 크게 "순서대로 돌리느냐", "상태를 보고 정하느냐", "특정 키로 고정하느냐"로 갈립니다.

주요 알고리즘 비교

알고리즘분배 기준강점약점
라운드로빈순서대로 1대씩단순·균등서버 성능 차이 무시
가중 라운드로빈서버별 가중치 비율사양 차이 반영가중치 수동 설정
최소 연결활성 연결 가장 적은 서버긴 연결에 유리연결 수 추적 비용
IP 해시클라이언트 IP 해시값같은 IP는 같은 서버분포 불균형 가능
응답시간가장 빠른 응답 서버실시간 상태 반영측정 오버헤드

라운드로빈은 가장 흔하고 직관적입니다. 다만 서버 사양이 제각각이거나 요청 처리 시간이 들쭉날쭉하면 균등 분배가 곧 공평한 분배는 아닙니다.

상태 기반과 해시 기반

  • 상태 기반(최소 연결·응답시간): 서버의 현재 상태를 보고 정합니다. WebSocket이나 대용량 다운로드처럼 연결이 오래 유지되는 경우, 단순 라운드로빈은 한 서버에 긴 연결이 쌓일 수 있어 최소 연결이 더 안정적입니다.
  • 해시 기반(IP 해시): 같은 클라이언트를 항상 같은 서버로 보냅니다. 이른바 세션 고정(sticky session) 문제, 즉 로그인 상태가 특정 서버 메모리에 있을 때 유용합니다. 다만 근본 해법은 세션을 Redis 같은 공유 저장소로 빼는 것이고, 해시 고정은 임시방편에 가깝습니다.
로컬 터미널
# Nginx upstream 예시
# upstream backend {
#   least_conn;            # 최소 연결 방식
#   server 10.0.0.1:8080 weight=3;
#   server 10.0.0.2:8080;
# }

weight=3은 첫 서버가 다른 서버보다 3배 더 받는다는 뜻으로, 가중 분배를 표현합니다.

헬스체크가 전제다

어떤 알고리즘이든 죽은 서버로는 안 보내야 의미가 있습니다. 로드밸런서는 주기적으로 헬스체크를 보내 응답 없는 서버를 풀에서 제외합니다.

OUTPUT
$ curl -s -o /dev/null -w "%{http_code}\n" http://10.0.0.1:8080/health
200

헬스체크 경로(/health)가 200을 주는 동안만 트래픽을 받고, 실패가 누적되면 자동으로 빠집니다. 알고리즘 선택보다 이 안전망이 먼저입니다.

요점 정리

  • 라운드로빈 = 단순 순환, 가중치 = 사양 차이 반영.
  • 긴 연결이 많으면 최소 연결, 세션을 고정해야 하면 IP 해시.
  • 세션 고정은 임시방편 — 가능하면 세션을 공유 저장소로 분리하세요.
  • 어떤 알고리즘이든 헬스체크로 죽은 서버를 빼는 게 전제입니다.

로드밸런서와 트래픽 분배를 직접 구성하며 익히는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.