inblog logo
|
silver
    AWS

    [AWS] Route 53

    silver's avatar
    silver
    Nov 17, 2025
    [AWS] Route 53
    Contents
    DNSRoute 53라우팅 정책(Routing Policies)헬스 체크(Health Checks)트래픽 플로우(Traffic Flow)실전 시나리오도메인 이전비용 최적화트러블슈팅
     

    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] │ ├─ Primary → Virginia │ └─ Secondary → Oregon └─ 기타 → [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
    Contents
    DNSRoute 53라우팅 정책(Routing Policies)헬스 체크(Health Checks)트래픽 플로우(Traffic Flow)실전 시나리오도메인 이전비용 최적화트러블슈팅

    silver

    RSS·Powered by Inblog