테마
로드 밸런싱과 CDN
부하 분산의 개념
부하(Load)란 서버에 가해지는 처리 요청의 양입니다. 부하 분산(Load Balancing)은 이 요청을 여러 서버에 골고루 나누어 처리하는 것입니다.
부하의 종류
| 계층 | 부하의 형태 | 예시 |
|---|---|---|
| L3/L4 | 패킷/세그먼트의 급증 | 대규모 동시 접속, 게임 서버 |
| L7 | API 호출에 따른 연산 | 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
| 구분 | ALB | NLB |
|---|---|---|
| 동작 계층 | 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 프록시 IPGSLB(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)인지 서브도메인인지에 따라 레코드 타입이 달라질 수 있습니다.