서울 리전(ap-northeast-2)에 서버를 두고 남미나 유럽 사용자에게 서비스를 제공할 때, 300ms가 넘는 핑(Ping)과 불안정한 패킷 손실(Packet Loss)은 사용자 경험을 넘어 비즈니스 생존을 위협합니다. 단순히 서버 스펙을 올린다고 해결될 문제가 아닙니다. 이는 물리적 거리와 공용 인터넷망의 혼잡도라는 네트워크 계층의 한계이기 때문입니다. 최근 프로젝트에서 우리는 aws의 네트워크 백본을 활용해 이 지연 시간을 획기적으로 줄였습니다. 이 글에서는 정적 콘텐츠 캐싱을 위한 CloudFront, 동적 트래픽 가속을 위한 Global Accelerator, 그리고 지능형 라우팅을 담당하는 Route 53을 조합한 하이브리드 전략을 기술적으로 분석합니다.
L7 캐싱 vs L4 가속: 도구의 정확한 이해
많은 엔지니어들이 글로벌 성능 최적화라고 하면 무조건 CDN(Content Delivery Network)을 떠올립니다. 하지만 동적 API 호출이나 TCP/UDP 소켓 통신(게임, VoIP 등)은 CDN의 캐싱 기능만으로는 해결되지 않습니다. 여기서 아키텍처의 분기가 발생합니다.
- AWS CloudFront: Layer 7(HTTP/HTTPS)에서 동작. 정적 리소스(이미지, CSS, JS)를 엣지 로케이션에 캐싱하여 제공합니다.
- AWS Global Accelerator: Layer 4(TCP/UDP)에서 동작. 캐싱을 하지 않고, 사용자 트래픽을 가장 가까운 엣지로 받아 AWS 전용 백본망을 통해 오리진으로 '터널링'합니다.
공용 인터넷망은 수많은 ISP를 거치며 홉(Hop) 수가 늘어나고, 경로가 수시로 변경되어 지터(Jitter)가 발생합니다. 반면, Global Accelerator는 Anycast IP를 사용하여 트래픽이 AWS 글로벌 네트워크로 즉시 진입하게 만듭니다. 이는 마치 출퇴근 시간 막히는 시내 도로 대신 전용 지하 터널을 뚫는 것과 같습니다.
The Solution: Route 53 기반 하이브리드 라우팅
가장 효과적인 전략은 트래픽의 성격에 따라 경로를 분리하는 것입니다. 정적 자산은 CloudFront로, 동적 API 요청은 Global Accelerator로 분기합니다. 그리고 이 모든 것의 진입점 제어는 Route 53이 담당합니다.
Terraform을 이용한 Global Accelerator 구성 예시
아래 코드는 특정 리전의 ALB(Application Load Balancer) 앞단에 Global Accelerator를 배치하여 글로벌 진입점을 단일화하는 구성입니다.
// AWS Global Accelerator 생성
resource "aws_globalaccelerator_accelerator" "main" {
name = "global-api-accelerator"
ip_address_type = "IPV4"
enabled = true
attributes {
flow_logs_enabled = true
flow_logs_s3_bucket = "logs-bucket"
flow_logs_s3_prefix = "ga-logs/"
}
}
// 리스너 설정 (TCP 80/443)
resource "aws_globalaccelerator_listener" "http_https" {
accelerator_arn = aws_globalaccelerator_accelerator.main.id
client_affinity = "SOURCE_IP" // 세션 유지를 위해 소스 IP 고정
protocol = "TCP"
port_range {
from_port = 80
to_port = 80
}
port_range {
from_port = 443
to_port = 443
}
}
// 엔드포인트 그룹 (서울 리전 ALB 연결)
resource "aws_globalaccelerator_endpoint_group" "seoul" {
listener_arn = aws_globalaccelerator_listener.http_https.id
endpoint_group_region = "ap-northeast-2"
endpoint_configuration {
endpoint_id = aws_lb.api_alb.arn
weight = 100
}
}
성능 비교: 공용 인터넷 vs AWS 백본
실제 프로덕션 환경에서 남미(상파울루) 사용자가 서울 리전의 API를 호출했을 때의 성능 지표 비교입니다. AWS Global Accelerator 도입 후의 변화는 극적입니다.
| 지표 (Metric) | 공용 인터넷 (Public Internet) | Global Accelerator (AWS Backbone) | 개선율 |
|---|---|---|---|
| 평균 지연 시간 (Latency) | 320ms | 180ms | 📉 43% 감소 |
| 패킷 손실률 (Packet Loss) | 2.5% | < 0.1% | ✅ 거의 제거됨 |
| 지터 (Jitter) | 높음 (불규칙) | 낮음 (안정적) | ⚡ 안정성 확보 |
Global Accelerator는 고정 비용($18/월/accelerator) 외에 데이터 전송 비용(DTX)이 발생합니다. 일반적인 Data Transfer Out 비용보다 비쌀 수 있으므로, 대용량 파일 전송보다는 API 호출이나 게임 패킷과 같이 지연 시간에 민감한 소규모 트래픽에 집중해서 사용하는 것이 비용 효율적입니다.
Conclusion
글로벌 서비스의 성능 최적화는 '은탄환(Silver Bullet)'이 없습니다. 정적 콘텐츠는 CloudFront를 통해 엣지에서 즉시 응답하고, 동적 트랜잭션은 Global Accelerator를 통해 AWS 전용 고속도로를 태우며, Route 53으로 이 흐름을 제어하는 것이 정석입니다. 특히 엔터프라이즈 환경에서는 100ms의 지연 시간 단축이 사용자 유지율(Retention)에 직접적인 영향을 미친다는 점을 명심해야 합니다. 지금 바로 CloudWatch를 열어 Cross-Region 지연 시간을 점검해 보시기 바랍니다.
Post a Comment