Route 53 — AWS의 DNS 서비스
Route 53은 도메인 이름을 IP 주소로 변환하는 AWS의 DNS 서비스입니다. 도메인 등록 대행도 하지만, 이미 다른 곳에서 산 도메인의 네임서버를 Route 53으로 바꾸는 방식도 많이 씁니다.
호스팅 영역 — 도메인의 DNS 설정 공간
Route 53에서 도메인을 관리하려면 먼저 호스팅 영역을 만들어야 합니다. 호스팅 영역을 만들면 NS(네임서버) 레코드 4개가 자동으로 만들어집니다. 이 네임서버를 도메인 등록기관에 등록하면 Route 53이 그 도메인의 DNS를 관리하게 됩니다.
호스팅 영역 하나당 월 $0.50. 프리 티어에 포함되지 않습니다. 리소스를 다 지워도 호스팅 영역이 남아 있으면 매달 청구됩니다. 도메인 이전이나 학습 완료 후 반드시 삭제하세요.
레코드 종류
| 타입 | 역할 | AWS에서 쓰는 곳 |
|---|---|---|
| A | 도메인 → IPv4 | EC2 탄력적 IP 연결 |
| ALIAS | 도메인 → AWS 리소스 (AWS 전용) | ALB, CloudFront 연결 |
| CNAME | 도메인 → 다른 도메인 | 서브도메인을 외부 서비스로 |
| NS | 이 도메인의 네임서버 | 호스팅 영역 생성 시 자동 |
| MX | 메일 서버 지정 | 이메일 수신 경로 |
ALB나 CloudFront를 연결할 때는 CNAME이 아니라 ALIAS를 씁니다. CNAME은 루트 도메인(example.com)에 쓸 수 없지만, ALIAS는 가능합니다. 또 AWS 리소스 간 요청은 과금이 없어서 ALIAS가 더 경제적입니다.
Routing Policy
| 정책 | 작동 방식 | 용도 |
|---|---|---|
| Simple | 하나의 IP 반환 | 단일 서버 |
| Weighted | 비율에 따라 여러 IP 반환 (70/30) | 카나리 배포, A/B 테스트 |
| Latency | 사용자와 가장 가까운 리전으로 | 글로벌 서비스 |
| Failover | Primary 장애 시 Secondary로 | 재해 복구 |
| Geolocation | 사용자 위치 기반 | 지역별 다른 콘텐츠 |
CloudFront — 전 세계 CDN
CloudFront는 전 세계 450개 이상의 엣지 로케이션에 콘텐츠를 캐싱해서 사용자와 가까운 곳에서 제공하는 CDN 서비스입니다.
CloudFront를 쓰는 이유
- 속도: 전 세계 사용자에게 빠른 응답
- HTTPS: S3 정적 사이트도 HTTPS + 커스텀 도메인 가능
- 보안: S3를 비공개로 두고 CloudFront만 접근 허용 (OAC)
- 비용: 월 1TB 전송 무료. S3 직접 접근보다 데이터 전송 비용 감소
ACM 인증서 — 반드시 버지니아에서 발급
서울(ap-northeast-2)에서 발급한 인증서는 CloudFront 설정 화면의 인증서 목록에 아예 나타나지 않습니다. 처음 하는 분의 99%가 여기서 막힙니다. ALB용 인증서는 ALB와 같은 리전, CloudFront용은 무조건 버지니아.
| 용도 | 발급 리전 |
|---|---|
| ALB HTTPS 인증서 | ALB와 같은 리전 (예: 서울) |
| CloudFront HTTPS 인증서 | 반드시 us-east-1 (버지니아) |
OAC — S3를 비공개로 유지하면서 CloudFront만 허용
OAC(Origin Access Control)는 S3 버킷을 완전히 비공개로 두고, CloudFront만 접근할 수 있게 하는 방식입니다. 사용자는 CloudFront URL로만 접근하고, S3 버킷 URL로 직접 접근하면 차단됩니다.
- S3 버킷 — 퍼블릭 액세스 차단 유지
- CloudFront 배포 생성 → 원본: S3 버킷 → OAC 새로 생성
- CloudFront가 S3 버킷 정책을 자동으로 제안 → 정책 복사 후 S3 버킷 정책에 붙여넣기
- 기본 루트 객체:
index.html - SPA라면: 오류 응답 설정 → 403/404 →
/index.html(200 반환)
캐시 무효화 (Invalidation)
코드를 배포했는데 브라우저에 이전 버전이 계속 보인다면 CloudFront 캐시 때문입니다. Invalidation으로 캐시를 강제로 지울 수 있습니다.
# AWS CLI로 전체 캐시 무효화
aws cloudfront create-invalidation \
--distribution-id E1234567890 \
--paths "/*"
# 특정 파일만 무효화
aws cloudfront create-invalidation \
--distribution-id E1234567890 \
--paths "/index.html" "/assets/app.js"
app.js 대신 app.abc123.js처럼 빌드 해시를 파일명에 포함하면 캐시 문제가 없습니다. Vite, CRA 등 빌드 도구가 이 방식을 기본으로 지원합니다. Invalidation은 월 1000번까지 무료이지만, 파일명 해시 방식이 더 권장됩니다.