Skip to content

로드 밸런싱과 CDN

부하 분산의 개념

부하(Load)란 서버에 가해지는 처리 요청의 양입니다. 부하 분산(Load Balancing)은 이 요청을 여러 서버에 골고루 나누어 처리하는 것입니다.

부하의 종류

계층부하의 형태예시
L3/L4패킷/세그먼트의 급증대규모 동시 접속, 게임 서버
L7API 호출에 따른 연산REST API 반복 호출, DB 쿼리
L7대용량 데이터 전송이미지, 동영상 스트리밍

부하 분산을 하면 자연스럽게 **고가용성(High Availability)**이 따라옵니다. 서버 한 대가 장애가 나도 나머지 서버가 서비스를 지속할 수 있기 때문입니다.

NLB(Network Load Balancer)

L3/L4 수준에서 동작하는 부하 분산 장치입니다. IP 주소와 포트 번호를 기반으로 트래픽을 분산합니다. 구현 세부를 모두 일반화하기보다는, 클라이언트가 NLB 주소로 접속하면 NLB가 대상 그룹 중 하나로 연결을 전달한다고 이해하면 충분합니다.

사용자는 NLB의 IP 하나만 알면 됩니다. 뒤에 서버가 몇 대인지, 어느 서버와 통신하는지 알 수 없습니다.

NLB의 특징

  • 고성능, 저지연: 패킷 수준의 단순한 처리
  • 고정 IP(Elastic IP) 할당 지원
  • TCP/UDP/TLS 등 L4 중심 프로토콜 지원
  • 헬스 체크: 주기적으로 서버 상태 확인, 장애 서버 자동 제외

NLB 사용 사례

  • 대용량 게임 서버
  • IoT 디바이스 제어 (MQTT 브로커)
  • 금융 거래 시스템
  • 실시간 스트리밍 서비스

ALB(Application Load Balancer)

L7(애플리케이션) 수준에서 동작하는 부하 분산 장치입니다. HTTP/HTTPS 요청 내용을 분석하여 트래픽을 분산합니다. 리버스 프록시(Reverse Proxy) 구조입니다.

ALB vs NLB

구분ALBNLB
동작 계층L7 (HTTP/HTTPS)L3/L4 (TCP/UDP)
라우팅 기준URL 경로, 호스트명, 헤더IP, 포트 번호
TLS 터미네이션지원지원
고정 IP미지원지원 (Elastic IP)
처리 속도상대적으로 느림매우 빠름
주요 용도웹 서비스, API게임, IoT, 실시간

X-Forwarded-For (XFF)

리버스 프록시(ALB) 뒤의 서버는 클라이언트의 실제 IP를 알 수 없습니다. ALB의 IP만 보이기 때문입니다.

Client(1.2.3.4) -> ALB(10.0.0.100) -> 서버
                                       서버가 보는 출발지: 10.0.0.100 (ALB)

이 문제를 해결하기 위해 ALB가 HTTP 헤더에 원본 클라이언트 IP를 추가합니다.

X-Forwarded-For: 1.2.3.4, 10.0.0.100
                 │         │
                 원본 IP    프록시 IP

GSLB(Global Server Load Balancing)

DNS 기반으로 전 세계에 분산된 서버 중 최적의 서버로 안내하는 기술입니다.

CDN(Content Delivery Network)

콘텐츠를 사용자에게 가장 가까운 서버에서 제공하는 분산 네트워크 서비스입니다.

CDN이 제공하는 가치:

  • 응답 속도 향상: 사용자와 가까운 엣지에서 콘텐츠 제공
  • 오리진 서버 부하 감소: 캐싱으로 반복 요청 처리
  • 대역폭 비용 절감: 분산된 엣지가 트래픽 분담
  • 가용성 향상: 엣지 서버 장애 시 다른 엣지로 대체

AWS CloudFront

AWS의 CDN 서비스입니다. 전 세계 다수의 엣지 로케이션을 통해 콘텐츠를 배포합니다.

CloudFront 주요 기능:

  • S3, ALB, EC2, 외부 서버 등 다양한 오리진 지원
  • ACM 인증서와 연동한 HTTPS 지원
  • AWS WAF 통합으로 보안 강화
  • 실시간 로그 및 모니터링

AWS Amplify

프론트엔드 웹 앱의 빌드와 배포를 자동화하는 서비스입니다. 내부적으로 CloudFront(CDN)와 통합되어 있습니다.

Amplify 사용 시 Route 53 같은 DNS 서비스에서 CNAME 또는 ALIAS 레코드로 커스텀 도메인을 연결합니다. 루트 도메인(apex)인지 서브도메인인지에 따라 레코드 타입이 달라질 수 있습니다.