DNS, CDN, 엣지 서비스는 SOA-C03에서 33문제가 출제되는 중요한 영역입니다. 각 서비스가 왜 필요한지, 어떻게 동작하는지를 기초부터 이해해보겠습니다.
DNS란 무엇인가?
www.example.com이라는 주소로 웹사이트에 접속할 때, 컴퓨터는 이 이름을 실제 서버의 IP 주소로 변환해야 합니다. 이 역할을 하는 시스템이 DNS(Domain Name System)입니다.
전화번호부와 똑같습니다. 친구 이름(도메인)을 전화번호부(DNS)에서 찾으면 전화번호(IP 주소)가 나옵니다. 그 번호로 전화(접속)를 겁니다.
Amazon Route 53 — AWS의 DNS 서비스
Route 53은 AWS에서 제공하는 DNS 서비스입니다. 도메인 이름을 IP 주소로 변환하고, 다양한 라우팅 정책으로 트래픽을 원하는 곳으로 보낼 수 있습니다.
이름의 유래가 흥미롭습니다. DNS가 사용하는 포트 번호가 53번이라서 Route 53이라고 이름 붙였습니다.
호스팅 영역 (Hosted Zone) — DNS 레코드 관리 컨테이너
호스팅 영역은 하나의 도메인에 대한 DNS 레코드들을 모아 놓은 공간입니다. 한 회사의 전화번호부 한 권이라고 생각하면 됩니다.
두 종류가 있습니다. 퍼블릭 호스팅 영역은 인터넷 어디서든 접근 가능한 도메인을 관리합니다. example.com을 전 세계에서 조회할 수 있게 합니다. 프라이빗 호스팅 영역은 특정 VPC 내부에서만 유효한 도메인을 관리합니다. 사내 네트워크에서만 쓰는 internal.example.com 같은 것입니다.
DNS 레코드 유형
| 유형 | 용도 | 예시 | |------|------|------| | A 레코드 | 도메인 → IPv4 주소 | www.example.com → 192.0.2.1 | | AAAA 레코드 | 도메인 → IPv6 주소 | www.example.com → 2001:db8::1 | | CNAME 레코드 | 도메인 → 다른 도메인 이름 | blog.example.com → www.example.com | | Alias 레코드 | 도메인 → AWS 리소스 | example.com → ALB, CloudFront, S3 |
Alias vs CNAME 차이가 시험에 자주 나옵니다. 확실히 이해해야 합니다.
CNAME은 도메인을 다른 도메인 이름으로 가리킵니다. 단, Zone Apex(루트 도메인, 즉 example.com)에는 사용할 수 없습니다. www.example.com에는 가능하지만 example.com 자체에는 CNAME을 붙일 수 없습니다. DNS 표준상의 제한입니다. 또한 조회할 때마다 요금이 발생합니다.
Alias는 AWS가 만든 특별한 레코드 유형입니다. Zone Apex(example.com)에도 사용할 수 있습니다. ALB, CloudFront 배포, S3 정적 웹사이트, Elastic Beanstalk URL 등 AWS 리소스와 연결할 때 사용합니다. 무료로 조회됩니다. 따라서 회사 메인 도메인(example.com)을 ALB나 CloudFront에 연결하려면 Alias를 써야 합니다.
Route 53 라우팅 정책 — 가장 중요한 부분
7가지 라우팅 정책의 차이를 정확히 알아야 합니다. 각 정책이 어떤 상황에 쓰이는지를 기억하는 것이 핵심입니다.
Simple 라우팅(단순 라우팅)은 가장 기본적인 정책입니다. DNS 조회 시 단일 리소스의 IP를 반환합니다. 하나의 웹 서버가 있고 특별한 로직이 필요 없을 때 사용합니다. 헬스 체크를 지원하지 않습니다.
Weighted 라우팅(가중치 기반 라우팅)은 여러 리소스에 가중치를 부여하여 트래픽을 비율로 나눕니다. A/B 테스트에 이상적입니다. 예를 들어 새 버전(가중치 10)과 구 버전(가중치 90)으로 10%만 새 버전으로 보내 테스트합니다. 가중치 0을 설정하면 해당 리소스로 트래픽이 가지 않습니다.
Latency-based 라우팅(지연 시간 기반 라우팅)은 사용자에게 가장 낮은 지연 시간을 제공하는 AWS 리전으로 라우팅합니다. 서울 사용자는 ap-northeast-1(도쿄 또는 서울), 뉴욕 사용자는 us-east-1로 연결됩니다. 글로벌 서비스에서 사용자 경험을 최적화할 때 사용합니다.
Failover 라우팅(장애 조치 라우팅)은 Active-Passive 재해 복구 구조를 만듭니다. 주(Primary) 리소스가 정상이면 그쪽으로 트래픽을 보내고, 헬스 체크에서 실패하면 자동으로 보조(Secondary) 리소스로 전환합니다. 재해 복구 시나리오에서 필수입니다.
Geolocation 라우팅(지리적 위치 라우팅)은 사용자가 어느 국가 또는 대륙에서 접속하는지를 기반으로 라우팅합니다. 한국에서 접속하면 한국어 콘텐츠 서버로, 미국에서 접속하면 영어 콘텐츠 서버로 보냅니다. 법적 규정 준수(특정 국가 서비스 제한 등)에도 활용됩니다.
Geoproximity 라우팅(지리적 근접성 라우팅)은 사용자와 리소스 사이의 지리적 거리를 기반으로 라우팅합니다. Bias(편향) 값을 조정하여 특정 리소스로의 트래픽 범위를 늘리거나 줄일 수 있습니다. Route 53 Traffic Flow(시각적 트래픽 편집기)와 함께 사용합니다.
Multivalue 라우팅(다중값 라우팅)은 여러 리소스 IP를 반환하고, 헬스 체크를 통과한 정상 리소스만 반환합니다. 간단한 로드 밸런싱 효과가 있지만, ELB의 대체재는 아닙니다. 최대 8개의 정상 레코드를 반환합니다.
Route 53 Health Check — 상태 모니터링
헬스 체크는 리소스가 정상적으로 동작하는지 주기적으로 확인합니다. 병원의 정기 진찰과 같습니다.
HTTP/HTTPS 엔드포인트, TCP 포트, 다른 헬스 체크 결과를 모니터링할 수 있습니다. Failover 라우팅과 함께 사용하면, 주 리소스가 다운되었을 때 자동으로 보조 리소스로 전환됩니다. CloudWatch 알람과 연동하여 리소스 장애 시 알림을 받을 수도 있습니다.
Amazon CloudFront — 전 세계 콘텐츠 배달 네트워크
CloudFront는 CDN(Content Delivery Network) 서비스입니다. 전 세계에 분산된 엣지 로케이션에 콘텐츠를 캐싱하여 사용자에게 빠르게 전달합니다.
편의점 체인 비유로 설명합니다. 여러분이 본사(오리진 서버)에서만 물건을 팔 수도 있지만, 전국 편의점(엣지 로케이션)에 물건을 미리 배치해두면 소비자가 훨씬 빠르게 구매할 수 있습니다. CloudFront는 이 편의점 체인 역할을 합니다.
서울에 있는 사용자가 미국 버지니아의 S3 버킷에서 이미지를 받아야 한다면 인터넷을 가로질러 수백 밀리초가 걸립니다. CloudFront를 사용하면 서울 엣지 로케이션에 이미지가 캐싱되어 있어 수십 밀리초 안에 전달됩니다.
CloudFront 오리진 (Origin)
오리진은 CloudFront가 콘텐츠를 가져오는 원본 서버입니다. 여러 종류를 사용할 수 있습니다.
S3 버킷은 정적 파일(이미지, CSS, JavaScript, HTML)을 저장합니다. ALB(Application Load Balancer)는 동적 웹 애플리케이션의 앞단에 위치합니다. EC2 인스턴스는 웹 서버로 직접 사용할 수 있습니다. 외부 HTTP 서버는 AWS 외부의 웹 서버도 오리진으로 사용할 수 있습니다.
CloudFront 캐싱
TTL(Time to Live)은 캐시 유효 기간입니다. 기본값은 24시간(86,400초)입니다. 이미지처럼 자주 바뀌지 않는 콘텐츠는 TTL을 길게 설정하고, 자주 바뀌는 콘텐츠는 짧게 설정합니다.
캐시 무효화(Invalidation)는 캐시된 콘텐츠를 강제로 삭제하는 기능입니다. 웹사이트를 업데이트했는데 사용자가 여전히 이전 버전을 본다면, 무효화를 실행하여 즉시 새 콘텐츠를 받게 합니다. /images/* 같은 경로 패턴으로 특정 파일들만 무효화할 수 있습니다. 무효화 자체는 요금이 발생합니다.
캐시 키는 어떤 요청이 동일한 캐시를 사용할지를 결정합니다. URL, HTTP 헤더, 쿠키, 쿼리 문자열 등의 조합으로 만들어집니다. 캐시 키를 단순하게 유지할수록(예: URL만) 캐시 적중률이 높아집니다.
CloudFront + S3 OAC (Origin Access Control)
S3 버킷의 파일을 CloudFront를 통해서만 접근할 수 있게 제한하는 설정입니다. 콘텐츠 보호에 중요합니다.
이런 상황을 생각해보세요. CloudFront를 통해 이미지를 제공하고 있는데, 누군가 S3 URL을 직접 알아내 무단으로 다운로드한다면? OAC를 설정하면 S3 버킷 정책에서 CloudFront 서비스 프린시팔만 허용하고, 직접 S3 URL 접근은 모두 차단합니다. OAC는 이전에 사용하던 OAI(Origin Access Identity)의 개선 버전입니다.
AWS Global Accelerator — 정적 IP + AWS 글로벌 네트워크
Global Accelerator는 AWS의 글로벌 백본 네트워크를 활용하여 애플리케이션 성능을 높이는 서비스입니다.
문제를 먼저 이해합니다. 인터넷은 여러 ISP(인터넷 서비스 제공자)의 네트워크를 거쳐가는 공용 도로입니다. 각 구간의 속도와 안정성이 다릅니다. Global Accelerator는 사용자의 트래픽을 가장 가까운 AWS 엣지 로케이션으로 즉시 보낸 다음, AWS 내부 고속 네트워크를 통해 최종 목적지(ALB, EC2, NLB 등)까지 전달합니다.
두 개의 정적 Anycast IP를 제공합니다. IP 주소가 바뀌지 않아 DNS 변경 없이 장애 조치가 가능합니다. TCP와 UDP 모두 지원합니다. 게임, VoIP, IoT처럼 실시간 통신이 필요한 애플리케이션에 적합합니다.
CloudFront vs Global Accelerator — 헷갈리기 쉬운 비교
| 구분 | CloudFront | Global Accelerator | |------|-----------|-------------------| | 주요 용도 | 캐시 가능한 콘텐츠(이미지, 동영상, HTML) | 캐시 불가능한 실시간 애플리케이션 | | IP 주소 | 도메인 기반(IP가 자주 바뀜) | 정적 IP 2개(Anycast) | | 프로토콜 | HTTP/HTTPS | TCP/UDP | | 캐싱 | 엣지에서 캐싱 | 캐싱 없음 | | 사용 예 | 전 세계 웹사이트, 이미지 배포 | 멀티플레이 게임, VoIP, 금융 거래 |
선택 기준은 단순합니다. "캐시가 가능한 콘텐츠를 빠르게 전달"이면 CloudFront, "캐시가 불가능한 실시간 통신을 안정적으로"이면 Global Accelerator입니다.