AWS 기술 블로그
AWS Global Accelerator를 사용하여 애플리케이션 성능 개선하기
이 글은 AWS Networking & Content Delivery Blog에 게시된 Use AWS Global Accelerator to improve application performance 글을 한국어로 번역 및 편집하였습니다.
웹 애플리케이션 및 API 환경에서 모든 고객에게 빠르고 안정적이며 안전한 액세스를 보장하는 것은 매우 중요합니다. 하지만 기존 구현 방식에서는 글로벌 인터넷 인프라의 복잡성으로 인한 지연 및 고르지 못한 성능으로 인해 글로벌 애플리케이션 사용자가 지연 및 안정성 문제에 직면하는 경우가 많습니다. AWS Global Accelerator를 사용하면 트래픽을 AWS 글로벌 네트워크에 걸쳐 라우팅하고 애플리케이션 경로를 최적화하여 사용자에게 더 빠른 성능과 더 높은 안정성을 제공할 수 있습니다.
이 게시물에서는 Global Accelerator를 사용하여 얻을 수 있는 이점, Accelerator 추가 시나리오, 애플리케이션을 서비스와 통합할 때 적용할 수 있는 성능 테스트 전략을 공유합니다. 또한 다른 AWS 서비스와의 통합을 살펴보고 AWS CloudFormation을 사용한 실제 배포 예제를 제공합니다. 더불어 애니캐스트와 DNS 기반 라우팅의 핵심적인 차이점을 분석하고, Global Accelerator를 통해 글로벌 트래픽 라우팅을 최적화하고 애플리케이션의 보안을 강화하는 방법을 단계별로 설명합니다.
Amazon Route 53을 사용한 DNS 라우팅과 Global Accelerator를 사용한 애니캐스트 라우팅 비교
애플리케이션에 Global Accelerator를 사용하는 방법을 자세히 살펴보기 전에 먼저 오늘날 가장 일반적으로 사용되는 DNS 라우팅이 작동하는 방식을 살펴보겠습니다. 일반적으로 애플리케이션 아키텍처에서는 Amazon Route 53과 같은 서비스를 사용하여 DNS 라우팅을 구성, 사용자 트래픽을 다양한 엔드포인트로 전달합니다. 클라이언트 트래픽은 지리적 근접성, 상태 확인, 구성한 라우팅 정책과 같은 요소에 따라 라우팅됩니다.
예를 들어, 여러 AWS 리전의 여러 Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스에 웹 사이트를 호스팅하고 DNS 확인을 위해 Route 53 지리 근접 라우팅 정책을 사용한다면, Route 53은 도메인 이름을 클라이언트와 가장 가까운 EC2 인스턴스의 IP 주소를 동적으로 확인하여 사용자가 위치에 따라 웹 사이트에 가장 적합한 엔드포인트로 연결되도록 합니다.
Global Accelerator와 Route 53은 동일하게 트래픽을 전달할 수 있지만 기본 메커니즘이 다릅니다. Route 53은 DNS 수준에서 작동하여 구성된 라우팅 정책을 기반으로 도메인 이름을 IP 주소로 확인합니다. 이와 반대로 Global Accelerator는 애니캐스트 IP 주소를 사용하여 가장 가까운 정상 엔드포인트로 트래픽을 라우팅합니다. 이 엔드포인트는 AWS 리전에서 호스팅되는 애플리케이션의 고정 진입점 역할을 하는 하나 이상의 정적 IP 주소로서, 트래픽이 사용자에게 가장 가까운 AWS 글로벌 네트워크로 수집될 수 있습니다. 이러한 동작 방식은 트래픽을 AWS 글로벌 네트워크에 온보딩하여 지연 시간을 줄이고 안정성을 향상시킵니다. Global Accelerator는 비디오 스트리밍 플랫폼 또는 온라인 게임 서비스와 같이 실시간 트래픽 최적화가 필요한 시나리오와 같은 많은 시나리오에서 DNS 기반 라우팅 보다 더 나은 접근 방식입니다.
Global Accelerator는 각 사용자를 지연 시간이 가장 짧은 특정 AWS 엣지 로케이션으로 라우팅하여 버퍼링을 최소화하면서 원활한 재생 환경을 제공합니다.
Global Accelerator의 고정 IP주소
Global Accelerator는 애니캐스트 라우팅을 사용하여 사용자 경험을 개선할 뿐만 아니라 IP 주소 관리를 간소화하는 데도 도움이 됩니다. Global Accelerator는 강력한 AWS 엣지 네트워크에서 제공되는 액셀러레이터의 고정 IP 주소 세트를 제공합니다. IPv4의 경우 고정 IPv4 주소 2개를 받는 반면, 이중 스택 구성의 경우 총 4개의 주소 (정적 IPv4 주소 2개와 정적 IPv6 주소 2개) 를 받습니다.또는 자체 IP 주소 범위 (BYOIP) 를 Global Accelerator로 가져온 다음 자체 주소 풀의 IPv4 주소를 할당하여 액셀러레이터에 연결할 수도 있습니다.
Global Accelerator의 IP 주소는 클라이언트에 고정된 진입점을 제공하므로 일관되고 원활한 환경을 제공할 수 있습니다. ELB (엘라스틱 로드 밸런싱), EC2 인스턴스 또는 탄력적 IP 주소 리소스를 표준 액셀러레이터의 엔드포인트 (Global Accelerator가 트래픽을 전달하는 리소스) 로 추가할시 고정 IP가 부여되고, 고객이 해당 고정 IP 주소를 사용하여 리소스에 액세스할 수 있습니다.
또한 Global Accelerator 고정 IP 주소를 사용하면 DNS 구성을 업데이트하거나 클라이언트용 애플리케이션을 변경할 필요 없이 가용 영역이나 AWS 리전 간에 엔드포인트를 쉽게 이동할 수 있습니다. 이러한 유연성 덕분에 인프라를 확장하는 동시에 고객에게 중단 없는 서비스를 보장할 수 있습니다. 새 지역 혹은 기존 지역에서 고정 IP 주소를 사용하면 손쉽게 전환하고 안정성을 유지하며 순단시간을 최소화할 수 있습니다.
Global Accelerator 사용 예시
Global Accelerator는 어플리케이션 아키텍처에서 다음 중 하나를 수행할 수 있습니다.
프론트엔드 웹 애플리케이션 — EC2 인스턴스에 호스팅된 웹 애플리케이션에 Global Accelerator를 사용하면 글로벌 사용자가 빠르고 안정적으로 액세스할 수 있습니다.
API 엔드포인트 — Global Accelerator를 로드 밸런서와 통합하여 API 엔드포인트의 성능을 개선합니다.
마이크로서비스 — 여러 AWS 지역에 배포한 마이크로서비스 간의 트래픽 흐름을 최적화합니다.
Global Accelerator가 애플리케이션 아키텍처와 어떻게 통합 되는지 설명하기 위해 두 AWS 지역에서 EC2 인스턴스에서 실행되는 웹 사이트가 있고, 애플리케이션 로드 밸런서를 통해 사용자가 웹 사이트를 접속한다고 가정해 보겠습니다. 다음 다이어그램 (그림 1) 은 이 배포를 위한 샘플 아키텍처를 보여줍니다.
이 아키텍처에 Global Accelerator를 추가하려면 다음과 같이 하십시오.
1) Global Accelerator를 생성합니다.
2) 로드밸런서에 포트 80 TCP 리스너를 추가합니다.
3) 각 지역에 하나씩, 엔드포인트 그룹 두 개를 생성합니다.
4) 액셀러레이터의 엔드포인트 그룹에 애플리케이션 로드 밸런서를 각각 추가하여 리전 엔드포인트로 추가합니다.
다음 다이어그램 (그림 2) 은 Global Accelerator 추가 후 업데이트된 아키텍처를 보여줍니다.
성능 평가 및 테스트 방법
Global Accelerator를 아키텍처에 통합하기 전과 통합한 후에는 애플리케이션 성능을 철저하게 평가하는 것이 좋습니다. 예를 들어 Apache JMeter 또는 Locust와 같은 도구를 사용하여 응답 시간, 지연 시간 및 전반적인 사용자 경험을 평가 해 보시길 바랍니다. 글로벌 액세스를 개선하는 데 Global Accelerator가 얼마나 효과적인지 검증하려면 다양한 트래픽 패턴과 지리적 분포를 가정하여 테스트를 진행 할 수 있습니다.
예를 들어 Curl 명령어의 -w time_total 옵션을 사용하여 기준 성능을 평가한다고 가정해 보겠습니다.
curl -s -o /dev/null -w %{time_total}\\n http://YourALBDNSName
명령에서 “YourAlbdnsName” 도메인은 요청 시 ALB로 라우팅 된다고 가정합니다.
time_total 명령어는 요청 후 응답시간 까지의 걸린시간을 측정 합니다.
그런 다음 Global Accelerator를 아키텍처에 통합한 후 성능을 다시 테스트할 수 있습니다. 이렇게 하려면 다음과 같은 두 번째 curl 명령을 실행하십시오.
curl -s -o /dev/null -w %{time_total}\\n http://YourAcceleratorDNSName
이 결과를 기준 성능 테스트의 결과와 비교 할 수 있으며, 스크립트 등을 활용하여 여러번의 Curl 명령어 수행 후 평균 시간값을 기준으로 비교 하는것을 권장 드립니다.
이러한 테스트를 실행하면 개선 사항을 수치화하고 사용자의 글로벌 액세스를 최적화하는 데 Global Accelerator의 효과를 검증하는 데 사용할 수 있는 전후 비교 결과를 얻을 수 있습니다.
Global Accelerator 통합을 통한 보안 강화
Global Accelerator를 다른 AWS 서비스와 원활하게 통합하여 애플리케이션의 보안을 강화하고 잠재적 위협을 완화할 수 있습니다.
예를 들어 Global Accelerator를 AWS Shield Advanced와 통합하여 보안 조치를 강화하고 잠재적인 분산 서비스 거부 (DDoS) 공격에 대응할 수 있습니다.Shield Advanced를 추가하면 운영 효율성을 유지하면서 인프라 수준의 DDoS 위협에 대한 추가 방어 계층이 제공됩니다.이는 게임, 미디어 스트리밍 서비스, IoT 시스템과 같이 네트워크 로드 밸런서를 사용하는 애플리케이션에 특히 중요합니다.
Shield Advanced와 통합하면 Global Accelerator가 네트워크 로드 밸런서로의 트래픽 흐름을 최적화하는 동시에 Shield Advanced를 통해 엣지 기반 DDoS 탐지 및 완화 기능을 제공합니다.Shield Advanced를 추가하면 네트워크 로드 밸런서가 정당한 요청을 효율적으로 처리하여 Global Accelerator가 제공하는 모든 이점을 활용할 수 있습니다.
AWS CloudFormation을 통한 배포 가속화
AWS CloudFormation을 사용하면 애플리케이션의 인프라를 보다 쉽게 자동화, 테스트 및 배포할 수 있습니다. 이 섹션에서는 Global Accelerator와 통합된 공통 아키텍처를 배포하기 위한 CloudFormation 템플릿을 제공합니다. 아키텍처에는 애플리케이션 로드 밸런서, 보안 그룹 및 간소화된 배포에 필요한 구성 요소가 포함됩니다. 이 CloudFormation 스택에서 생성한 액셀러레이터는 수신자 포트, 규칙 및 사용자가 지정한 기타 값을 기반으로 수신 트래픽을 대상 인스턴스로 라우팅합니다.
템플릿을 배포하기 전에 필요한 IAM 권한과 기타 사전 요구 사항이 AWS 계정에 이미 구성되어 있는지 확인하십시오. 그런 다음 자체 리소스 및 애플리케이션 요구 사항에 맞게 조정한 템플릿을 복사하여 AWS CloudFormation 콘솔에 붙여넣으면 샘플 애플리케이션을 위한 Global Accelerator를 빠르게 배포하고 구성할 수 있습니다. 의견에 명시된 대로 모든 자리 표시자 값을 해당 AWS 환경에 맞는 값으로 바꿔야 합니다.
AWSTemplateFormatVersion: '2010-09-09'
Resources:
MyLoadBalancer:
Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
Properties:
Subnets:
- subnet-abc # Replace with actual subnet ID in your AWS account
- subnet-xyz # Replace with actual subnet ID in your AWS account
SecurityGroups:
- !GetAtt MySecurityGroup.GroupId
LoadBalancerAttributes:
- Key: idle_timeout.timeout_seconds
Value: '60'
MyListener:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
DefaultActions:
- Type: fixed-response
FixedResponseConfig:
StatusCode: 200
ContentType: text/plain
MessageBody: 'OK'
LoadBalancerArn:
Ref: MyLoadBalancer
Port: 80
Protocol: HTTP
MySecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
GroupDescription: Security group for MyLoadBalancer
VpcId: vpc-abc # Add your VPC ID
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0 # Replace with actual CIDR range for allowed inbound traffic
IpProtocol: -1
# Note: This security group is very permissive and allows all inbound traffic from any IP address.
# Consider scoping down the security group rules to restrict access based on specific requirements.
MyTargetGroup:
Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
Properties:
VpcId: vpc-abc # Add your VPC ID
Protocol: HTTP
Port: 80
HealthCheckEnabled: true
HealthCheckIntervalSeconds: 30
HealthCheckPath: '/health'
HealthCheckPort: 80
HealthCheckProtocol: HTTP
TargetType: instance
Targets:
- Id: i-instanceID # Replace with the ID of your target instance
MyAccelerator:
Type: 'AWS::GlobalAccelerator::Accelerator'
Properties:
Name: Myaccelerator # Replace with a unique name for your accelerator
IpAddressType: IPV4
Enabled: true
MyAcceleratorListener:
Type: 'AWS::GlobalAccelerator::Listener'
Properties:
AcceleratorArn:
Ref: MyAccelerator
PortRanges:
- FromPort: 80
ToPort: 80
Protocol: TCP
이 스택을 배포하면 CloudFormation은 지정된 AWS 리전에서 애플리케이션 로드 밸런서, 대상 그룹, 보안 그룹, 리스너 및 액셀러레이터를 시작합니다. 솔루션을 완성하려면 콘솔 또는 AWS 명령줄 인터페이스 (AWS CLI) 를 사용하여 애플리케이션 로드 밸런서를 액셀러레이터에 엔드포인트로 추가하십시오. 다중 지역 지원의 경우 이 템플릿을 다른 리전에서 시작하거나 CloudFormation StackSets를 사용하도록 수정하십시오.
요약
이 게시물에서는 AWS Global Accelerator가 글로벌 트래픽 라우팅을 최적화하고 성능을 개선하며 애플리케이션의 보안을 강화하기 위한 포괄적인 솔루션을 제공하는 방법을 설명했습니다. Global Accelerator는 애니캐스트 라우팅과 다른 AWS 서비스와의 간단한 통합을 사용하여 지연 시간을 줄이면서 애플리케이션에 안정적인 사용자 경험을 보장합니다. Global Accelerator로 관리되는 프런트 엔드 웹 애플리케이션, API 엔드포인트 또는 마이크로서비스는 오늘날의 디지털 환경에서 성공하는 데 필요한 민첩성과 확장성을 제공합니다. 지금 바로 Global Accelerator를 사용하여 글로벌 애플리케이션의 잠재력을 최대한 활용하고 고객 경험을 향상시키십시오.