[AWS] Route 53

silver's avatar
Nov 17, 2025
[AWS] Route 53
 

DNS

: DNS는 사람이 읽을 수 있는 도메인 이름을 IP 주소로 변환하는 시스템
사용자 입력: www.example.com ↓ DNS 조회 결과: 52.78.123.456 ↓ 웹 브라우저가 해당 IP로 접속

DNS 레코드 타입

A 레코드

  • 도메인을 IPv4 주소로 매핑
  • 예: example.com → 52.78.123.456

AAAA 레코드

  • 도메인을 IPv6 주소로 매핑
  • 예: example.com → 2001:0db8:85a3::8a2e:0370:7334

CNAME 레코드

  • 도메인을 다른 도메인으로 매핑
  • 예: www.example.com → example.com
  • ⚠️ 루트 도메인(Zone Apex)에는 사용 불가

ALIAS 레코드 (Route 53 전용)

  • AWS 리소스를 가리키는 특별한 레코드
  • CNAME과 유사하지만 루트 도메인에도 사용 가능
  • 무료 (쿼리 비용 없음)
CNAME (불가): example.com → elb-123.amazonaws.com ❌ ALIAS (가능): example.com → elb-123.amazonaws.com
ALIAS 지원 대상:
  • ELB (Application, Network, Classic)
  • CloudFront 배포
  • S3 웹사이트
  • API Gateway
  • Elastic Beanstalk
  • VPC Interface Endpoint
  • Global Accelerator

MX 레코드

  • 메일 서버 지정
  • 우선순위 포함
example.com MX 10 mail1.example.com example.com MX 20 mail2.example.com

TXT 레코드

  • 텍스트 정보 저장
  • 도메인 소유권 인증에 사용
example.com TXT "google-site-verification=abc123"

DNS 쿼리 프로세스

1. 브라우저 캐시 확인 ↓ 없음 2. OS 캐시 확인 ↓ 없음 3. ISP DNS 서버 (Recursive Resolver) ↓ 없음 4. Root DNS 서버 (.com은 어디?) ↓ 5. TLD DNS 서버 (example.com은 어디?) ↓ 6. Authoritative DNS 서버 (Route 53) ↓ 7. IP 주소 반환

Route 53

Route 53은 AWS의 확장 가능하고 가용성이 높은 DNS(Domain Name System) 서비스로 도메인 등록부터 고급 트래픽 라우팅까지 다양한 기능을 제공한다

1. 도메인 등록

Route 53에서 직접 도메인을 구매 가능
# 도메인 가용성 확인 aws route53domains check-domain-availability \ --domain-name example.com # 도메인 등록 aws route53domains register-domain \ --domain-name example.com \ --duration-in-years 1 \ --admin-contact file://contact.json \ --registrant-contact file://contact.json \ --tech-contact file://contact.json

2. 호스팅 영역(Hosted Zone)

도메인의 DNS 레코드를 관리하는 컨테이너
퍼블릭 호스팅 영역:
  • 인터넷에서 접근 가능
  • 예: example.com의 DNS 레코드
프라이빗 호스팅 영역:
  • VPC 내부에서만 접근 가능
  • 예: internal.mycompany.com
# 퍼블릭 호스팅 영역 생성 aws route53 create-hosted-zone \ --name example.com \ --caller-reference $(date +%s) # 프라이빗 호스팅 영역 생성 aws route53 create-hosted-zone \ --name internal.mycompany.com \ --vpc VPCRegion=ap-northeast-2,VPCId=vpc-12345678 \ --caller-reference $(date +%s) \ --hosted-zone-config PrivateZone=true
비용:
  • 호스팅 영역: $0.50/월
  • 쿼리: 처음 10억 건까지 $0.40/백만 건

3. 레코드 생성

# A 레코드 생성 aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "www.example.com", "Type": "A", "TTL": 300, "ResourceRecords": [{"Value": "52.78.123.456"}] } }] }' # ALIAS 레코드 생성 (ALB) aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "AliasTarget": { "HostedZoneId": "Z3456789012BCD", "DNSName": "my-alb-123456789.ap-northeast-2.elb.amazonaws.com", "EvaluateTargetHealth": true } } }] }'

라우팅 정책(Routing Policies)

Route 53 -> 다양한 라우팅 정책 지원

1. Simple Routing (단순 라우팅)

가장 기본적인 라우팅으로, 단일 리소스로 트래픽을 전달
example.com → 52.78.123.456
특징:
  • 하나의 레코드에 여러 IP 지정 가능 (랜덤 반환)
  • 헬스 체크 불가
사용 사례:
  • 단순한 웹사이트
  • 단일 서버
aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "TTL": 300, "ResourceRecords": [ {"Value": "52.78.123.1"}, {"Value": "52.78.123.2"} ] } }] }'

2. Weighted Routing (가중치 기반 라우팅)

트래픽을 비율로 분산
example.com ├─ 70% → Server A (가중치 70) └─ 30% → Server B (가중치 30)
사용 :
  • A/B 테스팅
  • 블루-그린 배포
  • 카나리 배포
  • 리전 간 트래픽 분산
# Server A (70%) aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Server-A", "Weight": 70, "TTL": 60, "ResourceRecords": [{"Value": "52.78.123.1"}] } }] }' # Server B (30%) aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Server-B", "Weight": 30, "TTL": 60, "ResourceRecords": [{"Value": "52.78.123.2"}] } }] }'
카나리 배포 예시:
1단계: 구버전 100%, 신버전 0% 2단계: 구버전 90%, 신버전 10% ← 모니터링 3단계: 구버전 50%, 신버전 50% 4단계: 구버전 0%, 신버전 100%

3. Latency-based Routing (지연 시간 기반 라우팅)

사용자와 가장 가까운 리전으로 라우팅
한국 사용자 → Seoul 리전 (지연 10ms) 미국 사용자 → Virginia 리전 (지연 15ms) 유럽 사용자 → Ireland 리전 (지연 20ms)
특징:
  • 실시간 네트워크 지연 측정
  • 가장 빠른 엔드포인트 자동 선택
사용 사례:
  • 글로벌 서비스
  • 멀티 리전 배포
# Seoul 리전 aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Seoul", "Region": "ap-northeast-2", "TTL": 60, "ResourceRecords": [{"Value": "52.78.123.1"}] } }] }' # Virginia 리역 aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Virginia", "Region": "us-east-1", "TTL": 60, "ResourceRecords": [{"Value": "3.35.123.1"}] } }] }'

4. Failover Routing (장애 조치 라우팅)

Primary 리소스가 실패하면 자동으로 Secondary로 전환
정상: example.com → Primary Server (Active) Secondary Server (Standby) 장애: example.com → Primary Server ❌ Secondary Server (Active) ✅
특징:
  • 헬스 체크 필수
  • Active-Passive 구성
  • 자동 장애 조치
사용 사례:
  • 재해 복구
  • 백업 사이트
  • 고가용성 애플리케이션
# Primary aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Primary", "Failover": "PRIMARY", "TTL": 60, "ResourceRecords": [{"Value": "52.78.123.1"}], "HealthCheckId": "abc123" } }] }' # Secondary aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Secondary", "Failover": "SECONDARY", "TTL": 60, "ResourceRecords": [{"Value": "3.35.123.1"}] } }] }'

5. Geolocation Routing (지리적 위치 라우팅)

사용자의 지리적 위치에 따라 라우팅
한국 사용자 → Seoul 서버 (한국어 콘텐츠) 미국 사용자 → Virginia 서버 (영어 콘텐츠) 기타 → Default 서버
특징:
  • 국가, 대륙, 미국 주 단위 지정
  • 로컬라이제이션
  • 라이선스 제한 준수
사용 사례:
  • 콘텐츠 지역화
  • 법적 규제 준수
  • 저작권 제한
# 한국 사용자 aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Korea", "GeoLocation": {"CountryCode": "KR"}, "TTL": 60, "ResourceRecords": [{"Value": "52.78.123.1"}] } }] }' # 기본 (나머지 모든 지역) aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com", "Type": "A", "SetIdentifier": "Default", "GeoLocation": {"ContinentCode": "*"}, "TTL": 60, "ResourceRecords": [{"Value": "3.35.123.1"}] } }] }'

6. Geoproximity Routing (지리 근접 라우팅)

사용자와 리소스의 지리적 거리를 기반으로 라우팅하며, 바이어스 값으로 트래픽을 조정 가능
Seoul (바이어스 +30) ├─ 더 넓은 영역에서 트래픽 받음 └─ 일본, 중국 일부 포함 Tokyo (바이어스 0) └─ 기본 영역
바이어스 값:
  • 99 ~ +99
  • 양수: 더 많은 트래픽 유치
  • 음수: 더 적은 트래픽
사용 사례:
  • 트래픽 분산 미세 조정
  • 리소스 용량에 따른 조정

7. Multi-Value Answer Routing

여러 IP 주소를 반환하되, 헬스 체크로 정상 리소스만 반환
example.com 조회 ↓ Route 53 헬스 체크 ↓ [Server 1 ✅ - 반환] [Server 2 ✅ - 반환] [Server 3 ❌ - 제외] [Server 4 ✅ - 반환]3개 IP 주소 반환 (랜덤 순서)
특징:
  • 최대 8개 정상 레코드 반환
  • 각 레코드에 헬스 체크 연결
  • Simple Routing + 헬스 체크
사용 사례:
  • 간단한 로드 밸런싱
  • ELB 없이 고가용성 구현

헬스 체크(Health Checks)

종류

1. 엔드포인트 헬스 체크

특정 IP 또는 도메인의 상태를 모니터링
# HTTP 헬스 체크 생성 aws route53 create-health-check \ --health-check-config '{ "Type": "HTTP", "ResourcePath": "/health", "FullyQualifiedDomainName": "example.com", "Port": 80, "RequestInterval": 30, "FailureThreshold": 3 }'
설정:
  • 프로토콜: HTTP, HTTPS, TCP
  • 포트: 사용자 정의
  • 경로: 헬스 체크 엔드포인트
  • 간격: 30초 또는 10초 (빠른 체크)
  • 실패 임계값: 연속 실패 횟수

2. Calculated 헬스 체크

여러 헬스 체크의 결과를 조합
Calculated Health Check ├─ Child Health Check 1 ✅ ├─ Child Health Check 2 ✅ └─ Child Health Check 3 ❌ 조건: 3개 중 2개 이상 정상 → ✅

3. CloudWatch 알람 헬스 체크

CloudWatch 알람 상태가 기반
CloudWatch Alarm (CPU > 80%) ↓ Route 53 Health Check ↓ Unhealthy 트래픽 차단

프라이빗 리소스 헬스 체크

프라이빗 서브넷의 리소스는 직접 체크할 수 없으므로 CloudWatch를 사용
Private Subnet ↓ 지표 전송 CloudWatch Metric ↓ 알람 트리거 CloudWatch Alarm ↓ Route 53 Health Check

트래픽 플로우(Traffic Flow)

복잡한 라우팅 정책을 시각적으로 설계하는 도구입니다.

예시: 복합 라우팅

사용자 요청 ↓ [Geolocation] ├─ 한국 → [Weighted] │ ├─ 70% → Seoul AZ-A │ └─ 30% → Seoul AZ-C ├─ 미국 → [Failover] │ ├─ PrimaryVirginia │ └─ SecondaryOregon └─ 기타 → [Latency] ├─ Seoul ├─ Virginia └─ Ireland

실전 시나리오

시나리오 1: 글로벌 서비스 (멀티 리전)

example.com[Geolocation] ├─ 아시아 → [Latency] │ ├─ Seoul (ap-northeast-2) │ ├─ Tokyo (ap-northeast-1) │ └─ Singapore (ap-southeast-1) ├─ 유럽 → [Latency] │ ├─ Ireland (eu-west-1) │ └─ Frankfurt (eu-central-1) └─ 미국 → [Latency] ├─ Virginia (us-east-1) └─ Oregon (us-west-2) 각 리전에 Failover 적용: Primary (Active) + Secondary (Standby)

시나리오 2: 블루-그린 배포

1단계: 기존 버전 (블루) 100% example.com └─ [Weighted] ├─ 100% → Blue (v1.0) └─ 0% → Green (v2.0) 2단계: 신규 버전 (그린) 카나리 테스트 example.com └─ [Weighted] ├─ 90% → Blue (v1.0) └─ 10% → Green (v2.0) ← 모니터링 3단계: 전환 완료 example.com └─ [Weighted] ├─ 0% → Blue (v1.0) └─ 100% → Green (v2.0)

시나리오 3: 재해 복구 (DR)

example.com → [Failover] ├─ Primary: Seoul (운영) │ └─ Health Check: /health └─ Secondary: Virginia (DR) └─ Standby 장애 발생: Seoul ❌ → Virginia 자동 활성화 ✅ 복구 시간: ~1분 (헬스 체크 + DNS TTL)

도메인 이전

Route 53으로 도메인 이전

# 1. 현재 등록 대행자에서 잠금 해제 # 2. Authorization Code 발급 # 3. Route 53에서 이전 요청 aws route53domains transfer-domain \ --domain-name example.com \ --duration-in-years 1 \ --auth-code XXXXXXXX # 4. 이메일 승인 # 5. 이전 완료 (5-7일 소요)

외부 등록 대행자 사용

도메인은 다른 곳에 등록하고 DNS만 Route 53 사용:
1. Route 53에서 호스팅 영역 생성 2. NS 레코드 4개 확인 3. 도메인 등록 대행자에서 NS 레코드 업데이트 4. DNS 전파 대기 (24-48시간)

비용 최적화

호스팅 영역 통합

불필요한 호스팅 영역을 제거하고 통합
Before: - app.example.com ($0.50/월) - api.example.com ($0.50/월) - admin.example.com ($0.50/월) 총: $1.50/월 After: - example.com ($0.50/월) ├─ app.example.com ├─ api.example.com └─ admin.example.com 총: $0.50/월

ALIAS 레코드 사용

ALIAS는 쿼리 비용이 무료
CNAME: $0.40/백만 쿼리 ALIAS: $0 (무료)

TTL 최적화

적절한 TTL로 쿼리 수를 줄임
정적 콘텐츠: TTL 3600초 (1시간) 동적 콘텐츠: TTL 60초 (1분) 장애 조치: TTL 30초 (빠른 전환)

트러블슈팅

문제 1: DNS가 업데이트되지 않음

원인:
  • DNS 캐시
  • 높은 TTL
해결:
# DNS 캐시 플러시 (Windows) ipconfig /flushdns # DNS 캐시 플러시 (macOS) sudo dscacheutil -flushcache # 특정 DNS 서버로 조회 nslookup example.com 8.8.8.8 dig example.com @8.8.8.8

문제 2: 헬스 체크 실패

원인:
  • 방화벽/보안 그룹이 Route 53 IP 차단
  • 헬스 체크 경로 오류
해결:
# Route 53 헬스 체크 IP 대역 허용 필요 # 참고: https://ip-ranges.amazonaws.com/ip-ranges.json # 보안 그룹 규칙 추가 aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --ip-permissions IpProtocol=tcp,FromPort=80,ToPort=80,IpRanges='[{CidrIp=0.0.0.0/0}]'

문제 3: 지연 시간 증가

원인:
  • 높은 TTL
  • 잘못된 라우팅 정책
해결:
  • TTL을 60초로 단축
  • Latency-based Routing 사용
  • CloudFront 추가 (CDN)
 
💡
Route 53은 DNS 서비스 + 트래픽 관리, 장애 조치, 글로벌 확장을 지원하는 강력한 도구
  • DNS 레코드 타입 이해 (A, AAAA, CNAME, ALIAS)
  • 7가지 라우팅 정책으로 다양한 시나리오 대응
  • 헬스 체크로 자동 장애 조치
  • ALIAS 레코드로 비용 절감
  • TTL 최적화로 성능 향상
Share article

silver