514 words
3 mins
로드밸런싱

로드밸런서란#

  • 트래픽 분산
  • 장애 시 자동 우회

assets/load_balancer.png

로드밸런서 구조

로드밸런서가 필요한 이유#

  • 한 대의 서버가 감당 못 하는 트래픽을 여러 대로 나눠준다.
  • 한 대가 죽어도 서비스가 계속된다.

대표 알고리즘#

  • 라운드 로빈: 순서대로 하나씩 분배 (균등 분산)
  • 최소 연결: 현재 연결이 가장 적은 서버로 보냄 (불균형 트래픽에 유리)
  • 해시 기반: 특정 값(클라이언트 IP 등)을 해시해 고정 분배 (세션 유지에 유리)

assets/lb_algorithms.png

로드밸런싱 알고리즘 예시


L4 vs L7#

  • L4: TCP/UDP 기반
  • L7: HTTP 기반 (URL, 헤더 조건 가능)

L4 vs L7 차이#

  • L4는 포트/프로토콜 기준으로만 분배
  • L7은 URL/헤더/쿠키 등 내용을 보고 분배 가능

실습: 로컬 로드밸런싱(Nginx)#

구성#

  • VM2: 백엔드1 (8081)
  • VM3: 백엔드2 (8082)
  • VM1: 로드밸런서 (80)

VM2/VM3 서버 실행#

Terminal window
vm2> python3 -m http.server 8081
vm3> python3 -m http.server 8082

VM1 Nginx 설치#

Terminal window
vm1> sudo apt update
vm1> sudo apt install -y nginx

/etc/nginx/nginx.conf 예시#

upstream backend {
server 10.0.2.20:8081;
server 10.0.2.30:8082;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}

테스트#

Terminal window
vm1> curl http://10.0.1.10

예상 결과#

  • 요청이 백엔드로 번갈아 전달

세션 고정(Sticky Session)#

  • 특정 사용자를 항상 같은 백엔드로 보냄
  • 상태 저장형 앱에 필요

실전 시나리오#

상황: 로그인 세션이 자꾸 풀림#

  • 세션 고정 미사용
  • 공유 세션 스토리지 필요

OS별 추가 실습: 헬스체크#

Linux (curl)#

Terminal window
lin> while true; do curl -s http://10.0.1.10 | head -n 1; sleep 1; done

헬스체크 설계#

헬스체크는 단순 포트 확인이 아니라 앱의 정상 응답을 확인해야 한다.

예시#

  • /health 엔드포인트
  • DB 연결 여부 확인

실전 사례#

  • 사례 1: 로그인 풀림 → 세션 고정 필요.
  • 사례 2: 일부 서버만 과부하 → 알고리즘 문제.
  • 사례 3: 헬스체크 실패 → 잘못된 엔드포인트.

Comments

로드밸런싱
https://cheoran.github.io/posts/network-book/11-loadbalancing/
Author
Cheolhwan Kim
Published
2026-01-11
License
CC BY-NC-SA 4.0