Route 53, CloudFront, ELB (사용자에서 서버까지의 앞단)
사용자의 요청이 서버에 닿기까지 지나는 세 서비스를 정리합니다. Route 53 의 레코드와 라우팅 정책, 상태 확인, CloudFront 의 캐시 정책과 OAC, VPC 오리진, 2025-11 의 정액 요금제, ALB 와 NLB, GWLB 의 차이와 흔한 설정 실수입니다.
요청의 길
일반적인 웹 서비스의 요청은 이렇게 지납니다. 사용자 브라우저가 Route 53 에서 www.example.com 의 주소를 받고, 가장 가까운 CloudFront 엣지로 갑니다. CloudFront 는 캐시에 없으면 오리진인 ALB 로 요청을 보내고, ALB 가 프라이빗 서브넷의 애플리케이션으로 넘깁니다. 정적 파일은 ALB 대신 S3 가 오리진입니다. 앞단의 각 층에서 무엇을 할 수 있는지 알면 성능, 보안, 비용을 함께 잡을 수 있습니다.
Route 53
레코드와 별칭
- 호스팅 영역: 퍼블릭(인터넷용)과 프라이빗(VPC 안에서만 풀림)이 있습니다. 호스팅 영역마다 월 요금이 있고 질의 수에 따라 요금이 붙습니다.
- 별칭(alias) 레코드: ALB, CloudFront, S3 웹사이트, API Gateway 같은 AWS 리소스를 가리키는 Route 53 전용 레코드입니다. 영역의 꼭대기(
example.com)에도 쓸 수 있고, AWS 리소스를 가리키는 별칭 질의는 무료입니다. CNAME 보다 별칭을 먼저 씁니다.
라우팅 정책
| 정책 | 동작 | 쓰임 |
|---|---|---|
| 단순 | 값 하나(또는 여러 개를 무작위로) | 기본 |
| 가중치 | 비율대로 나눔 | 카나리 배포, 리전 간 트래픽 이동 |
| 지연 시간 | 사용자에게 지연이 가장 낮은 리전 | 멀티 리전 서비스 |
| 장애 조치 | 주 대상의 상태 확인이 실패하면 보조로 | 액티브-스탠바이 DR |
| 지리적 위치, 지리 근접 | 사용자 국가나 거리 기준 | 국가별 콘텐츠, 규제 |
| 다중 값 응답 | 정상인 값 여러 개 | 간단한 클라이언트 측 분산 |
| IP 기반 | 사용자 IP 대역 기준 | 통신사, 사내망별 라우팅 |
상태 확인(health check)은 HTTP, HTTPS, TCP 로 엔드포인트를 전 세계 여러 위치에서 검사하거나, CloudWatch 경보 상태를 따르게 할 수 있습니다. 리전 전환을 사람이 확실히 통제해야 하면 Application Recovery Controller 의 라우팅 제어를 씁니다.
주의 TTL 을 길게 두면 장애 조치가 늦게 퍼집니다. 장애 조치 대상 레코드는 60 초 정도로 짧게 둡니다. 반대로 바뀔 일 없는 레코드는 길게 두어 질의 요금을 줄입니다.
CloudFront
캐시를 제대로 쓰는 법
CloudFront 설정의 핵심은 캐시 키입니다. 캐시 키에 들어가는 헤더, 쿠키, 쿼리 문자열이 많을수록 같은 콘텐츠가 여러 벌로 캐시되어 적중률이 떨어집니다.
- 캐시 정책: 캐시 키와 TTL 을 정합니다. 정적 파일은 관리형
CachingOptimized, API 는CachingDisabled로 시작합니다. - 오리진 요청 정책: 캐시 키에는 넣지 않되 오리진으로는 넘길 헤더, 쿠키를 정합니다. 둘을 나눠 생각하는 것이 요령입니다.
- 응답 헤더 정책: 보안 헤더(HSTS, CSP), CORS 를 엣지에서 붙입니다.
- 정적 파일 이름에 해시를 넣고(
app.3f9a1c.js) TTL 을 길게, HTML 은 짧게 둡니다. 배포 때 무효화(invalidation)를 남발하지 않아도 됩니다.
오리진 보호
- S3 오리진은 OAC 로 CloudFront 만 읽게 하고 버킷은 비공개로 둡니다. 예시 정책은 S3 문서에 있습니다.
- ALB 나 EC2 오리진은 2024-11 에 나온 VPC 오리진으로 프라이빗 서브넷에 둔 채 CloudFront 에만 연결할 수 있습니다. 오리진을 인터넷에 노출하지 않아도 됩니다.
- 퍼블릭 ALB 를 써야 한다면 보안 그룹에 CloudFront 관리형 접두사 목록만 허용하고, 사용자 지정 헤더로 한 번 더 확인합니다.
엣지 코드
| 기능 | 실행 위치 | 맞는 일 |
|---|---|---|
| CloudFront Functions | 엣지 로케이션, 1 ms 미만 | URL 재작성, 헤더 조작, 간단한 인증 토큰 검사 |
| Lambda@Edge | 리전 엣지 캐시 | 오리진 선택, 큰 로직, 네트워크 호출 |
CloudFront 에 붙이는 ACM 인증서는 us-east-1 에서 발급해야 합니다. 서울에서 발급한 인증서는 목록에 나오지 않습니다.
정액 요금제 (2025-11)
종량제 대신 월 정액으로 CDN, WAF, DDoS 보호, Route 53, 로그, S3 크레딧을 묶은 정액 요금제가 생겼습니다.
| 플랜 | 월 요청 | 월 전송 | 비고 |
|---|---|---|---|
| Free | 100 만 | 100 GB | WAF 규칙 5 개 |
| Pro | 1,000 만 | 50 TB | 접근 로그, 캐시 태그 무효화 |
| Business | 1 억 2,500 만 | 50 TB | 봇 관리, VPC 오리진, 고급 DDoS |
| Premium | 5 억 (최대 60 억까지 조정) | 50 TB (최대 600 TB) | 월 1,000 USD 부터, Origin Shield, 자동 장애 조치 |
배포 하나와 최상위 도메인 하나에 적용되고, 초과 요금이 없습니다. 한 번의 3 배 급증은 그달에 영향이 없고, 몇 달 동안 계속 넘으면 전송 위치를 조정하는 식으로 성능이 낮아질 수 있습니다. 차단된 DDoS 와 WAF 요청은 사용량에 세지 않습니다. Free, Pro, Business 의 월 가격은 CloudFront 요금 페이지에서 확인합니다. 트래픽이 들쭉날쭉한 개인, 스타트업 사이트에는 청구서 폭탄 걱정을 줄여 주는 선택지입니다.
Elastic Load Balancing
| 종류 | 계층 | 특징 | 쓰임 |
|---|---|---|---|
| ALB | 7 (HTTP, HTTPS, gRPC) | 경로, 호스트, 헤더 기반 라우팅, 인증(OIDC, Cognito), mTLS | 웹, API, 마이크로서비스 |
| NLB | 4 (TCP, UDP, TLS) | 고정 IP(AZ 별 EIP 가능), 초저지연, 보안 그룹 지원, PrivateLink 서비스의 앞단 | 게임, IoT, 비 HTTP 프로토콜, PrivateLink |
| GWLB | 3 | 방화벽 같은 가상 어플라이언스로 트래픽을 투명하게 보냄 | 중앙 보안 검사 |
ALB 설정에서 자주 보는 것
- 대상 그룹 상태 확인: 경로, 성공 코드, 간격을 애플리케이션에 맞춥니다. 상태 확인 경로가 DB 까지 확인하면 DB 장애 때 모든 대상이 빠져 전체가 503 이 됩니다. 얕은 헬스 체크와 깊은 체크를 나눕니다.
- 등록 해제 지연(deregistration delay): 기본 300 초. 배포가 느리면 짧게 줄입니다.
- 유휴 시간 제한: 기본 60 초. 긴 요청(파일 업로드, 보고서)은 늘리거나 비동기로 바꿉니다.
- 교차 영역 부하 분산: ALB 는 항상 켜져 있고 무료, NLB 는 기본 꺼져 있고 켜면 AZ 간 전송 요금이 붙습니다.
증상, 원인, 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| 502 Bad Gateway | 대상이 연결을 끊거나 잘못된 응답, 대상의 keep-alive 가 ALB 보다 짧음 | 애플리케이션 keep-alive 시간을 ALB 유휴 시간보다 길게 |
| 503 Service Unavailable | 정상 대상이 하나도 없음 | 대상 그룹 상태 확인 이유(describe-target-health) 확인 |
| 504 Gateway Timeout | 대상 응답이 유휴 시간보다 늦음, 보안 그룹이 막음 | 처리 시간 확인, 보안 그룹 체이닝 확인 |
| CloudFront 403 | OAC, 버킷 정책 불일치, 지역 차단, WAF 차단 | 응답 헤더의 x-cache, WAF 로그 확인 |