30장. Route 53 — AWS의 DNS
이 장에서 말하고자 하는 것
앞 장에서 우리는 DNS의 개념을 배웠다.
- 이름을 IP로 바꿔준다
- 계층 구조로 동작한다
- TTL과 캐시가 있다
이제 AWS에서 그 DNS를 직접 운영하는 도구를 본다.
Route 53
이다.
Route 53은 단순한 DNS 호스팅을 넘어
헬스 체크 · 트래픽 라우팅 · 도메인 등록까지
한 곳에서 다루도록 만들어졌다.
1. Route 53은 무엇인가
Route 53은 AWS의 관리형 DNS 서비스다.
- 권한 있는 네임서버 역할을 한다
- 가용성이 매우 높게 설계되어 있다
- 도메인 등록도 제공한다 (선택)
- AWS 리소스를 직접 가리키는 ALIAS 레코드를 제공한다
다른 DNS 서비스와 가장 큰 차이는
AWS 안의 리소스와 강하게 연동된다
는 점이다.
2. Hosted Zone — 도메인 단위 관리 구획
Route 53에서 도메인 하나를 관리하려면
먼저 Hosted Zone 을 만든다.
example.com → Hosted Zone 1
shop.com → Hosted Zone 2
Hosted Zone 안에 그 도메인의 모든 레코드가 들어간다.
example.com (Hosted Zone)
├─ A → 1.2.3.4
├─ MX → mail.example.com
├─ NS → ns-xxx.awsdns-xx.com
└─ api → 13.124.55.21
Hosted Zone을 만들면 AWS가
자동으로 NS 레코드 4개를 발급한다.
이 4개를 도메인 등록자에 등록하면
그 시점부터 Route 53이 그 도메인의 응답을 책임진다.
3. 레코드 만들기
기본 레코드 추가는 단순하다.
이름: api.example.com
타입: A
값: 13.124.55.21
TTL: 60
이 정보가 곧 DNS 응답이 된다.
dig api.example.com
# → 13.124.55.21
4. ALIAS — AWS 리소스를 직접 가리키는 특별 레코드
운영에서 가장 많이 쓰는 게 ALIAS 레코드다.
CloudFront, ALB, S3, API Gateway 같은 AWS 리소스는
실제 IP 주소가 자주 바뀐다.
A 레코드에 IP를 박아두면 그 IP가 사라질 때 장애가 난다.
대신 ALIAS를 쓰면
api.example.com (A · ALIAS) → my-alb-1234.elb.amazonaws.com
Route 53이 ALB의 현재 IP를 매번 자동으로 응답한다.
ALIAS는 CNAME처럼 보이지만 A 레코드처럼 동작한다
또 두 가지가 더 좋다.
- 도메인 최상위(apex)에도 쓸 수 있다 (CNAME은 불가)
- ALIAS 자체에 추가 요금이 없다
운영에서는 사실상
CloudFront / ALB / API Gateway는 ALIAS로 가리킨다
가 기본이다.
5. 라우팅 정책 — 같은 이름에 여러 답을 주기
Route 53은 단순한 “이름 → IP” 만 하지 않는다.
같은 이름에 대해 여러 라우팅 정책 을 선택할 수 있다.
| 정책 | 동작 |
|---|---|
| Simple | 그냥 하나의 답 |
| Weighted | 비율에 따라 분산 (예: 90% / 10%) |
| Latency | 가장 가까운 리전으로 보냄 |
| Geolocation | 사용자의 지역에 따라 다른 답 |
| Failover | 정상 리소스로 자동 전환 |
| Multi-Value Answer | 여러 IP를 헬스 체크와 함께 응답 |
운영에서 가장 많이 쓰는 두 가지는
- Failover — 운영/백업 구조
- Latency — 글로벌 서비스에서 지역 라우팅
이다.
6. 헬스 체크 — 죽은 곳으로 보내지 않기
Failover 라우팅을 쓰려면 헬스 체크 가 필요하다.
[헬스 체크] 30초마다 https://api.example.com/health 확인
↓
정상 → Primary 응답
이상 → Secondary 응답
헬스 체크는 Route 53이 전 세계 여러 지점에서
실제 요청을 보내 확인한다.
7. 우리 서비스에서 Route 53은 어디에 있나
척추 그림에서 가장 첫 점이다.
[사용자]
↓ DNS 질의
[Route 53] ← 우리가 만들 곳
↓ ALIAS 응답
[CloudFront]
↓
[API Gateway]
↓
[ALB]
↓
[ECS]
Route 53은 사용자가 우리 인프라로 들어오는
가장 첫 관문이다.
여기를 잘못 설정하면 뒤쪽이 멀쩡해도
사용자는 도달하지 못한다.
8. 직접 확인해보기 — CLI
Hosted Zone 만들기
aws route53 create-hosted-zone \
--name example.com \
--caller-reference $(date +%s)
레코드 추가
aws route53 change-resource-record-sets \
--hosted-zone-id Z123ABC \
--change-batch file://record.json
Hosted Zone에 등록된 레코드 보기
aws route53 list-resource-record-sets \
--hosted-zone-id Z123ABC
9. 코드로는 이렇게 생겼다 — Terraform
resource "aws_route53_zone" "main" {
name = "example.com"
}
# ALB를 가리키는 ALIAS 레코드
resource "aws_route53_record" "api" {
zone_id = aws_route53_zone.main.zone_id
name = "api.example.com"
type = "A"
alias {
name = aws_lb.main.dns_name
zone_id = aws_lb.main.zone_id
evaluate_target_health = true
}
}
ALIAS 레코드는 일반 A 레코드와 달리records 가 아닌 alias 블록을 쓴다는 점만 기억하면 된다.
10. 이렇게 쓰면 망한다 — 안티패턴
안티패턴 1. ALB / CloudFront 주소를 IP로 박는다
api.example.com A 13.250.55.21 ← ALB의 현재 IP
ALB는 IP가 바뀐다. 며칠 ~ 몇 주 뒤 장애 난다.
AWS 리소스를 가리킬 때는 반드시 ALIAS를 쓴다
안티패턴 2. 도메인을 산 곳의 DNS를 그대로 쓴다
도메인은 가비아
DNS도 가비아 (기본값)
가비아 DNS에는 ALIAS가 없다.
헬스 체크도, Failover도 못 쓴다.
운영 서비스라면 NS를 Route 53으로 위임한다
안티패턴 3. 핵심 레코드 TTL을 86400(하루)으로 둔다
장애 대응이 하루 늦는다.
운영 트래픽이 받는 레코드는 60~300으로 시작한다.
안티패턴 4. Failover만 설정하고 헬스 체크는 안 만든다
이러면 전환이 일어나지 않는다.
Route 53은 헬스 체크 결과로만 Primary/Secondary를 바꾼다.
11. 한 줄로 정리
Route 53은 AWS 안의 리소스와 단단히 묶이는 관리형 DNS이며
우리 인프라의 첫 관문이다
12. 이 장의 핵심 정리
- Route 53은 AWS의 관리형 DNS 서비스다.
- 도메인 단위로 Hosted Zone을 만든다.
- ALIAS는 AWS 리소스를 가리킬 때 항상 우선한다.
- 라우팅 정책으로 같은 이름에 다양한 동작을 줄 수 있다.
- Failover에는 반드시 헬스 체크가 함께 있어야 한다.
- 핵심 레코드의 TTL은 짧게 시작해 운영 데이터로 조정한다.