Skip to main content

Edge를 활용한 애플리케이션 성능 향상

만약 애플리케이션 엔드포인트를 인터넷에 직접 배치한다면 애플리케이션으로부터 멀리 있는 최종 사용자는 성능 관점에서 이상적이지 않은 경험을 할 수 있습니다. 여기서 성능 저하의 가장 큰 원인 중 하나는 최종 사용자로부터 애플리케이션까지의 먼 거리입니다.

예를 들어, aws 미국 버지니아 리전에 위치한 애플리케이션이 있고 싱가포르의 사용자가 해당 어플리케이션에 접근한다고 가정해보면 액세스하려는 싱가포르의 사용자는 먼저 인도로 라우팅 된 다음 이집트, 남아공, 스페인, 영국, 캐나다 등으로 라우팅 후 시카고에서 미국으로 진입하여 최종적으로 aws 미국 버지니아 리전에 도달할 수 있습니다. 우리 모두는 두 점 사이에 최단 거리가 직선이라는 것을 알고 있지만 불행히도 퍼블릭 인터넷은 우리가 원하는 직선 경로를 거의 생성하지 않습니다. 성능을 향상시키려면 사용자가 있는 곳에서 애플리케이션까지 더 짧고 직선과 유사한 라인을 만들어야 합니다. 어떻게 해야 할까요 ?

우리는 이 문제를 해결할 수 있는 방법이 있습니다. 바로 aws 엣지 서비스를 활용하는 것입니다. 예를 들어 엣지 서비스 중 하나인 아마존 클라우드 프론트의 경우 최종 사용자의 위치와 가장 가까운 곳에서 콘텐츠를 캐시할 수 있습니다. 캐시는 웹 서비스를 가속화할 수 있는 아주 유용한 방법입니다.

엣지 로케이션에서의 캐싱은 이미지, 비디오, 자바스크립트 및 css 파일과 같은 정적 자산에 적합합니다. 그러나 오늘날 우리는 점점 늘어나고 있는 최종사용자별 보유한 동적 컨텐츠 요청 또한 고민해야 합니다. 프로필 페이지, 일부 API 전자상거래 카트 등과 같은 동적 요청은 캐시할 수 없습니다. 각 요청은 애플리케이션 서버에 도착해야 하며 이는 퍼블릭 인터넷을 가로지르는 긴 여정을 의미합니다. 여기서 좋은 소식은 클라우드 프론트가 콘텐츠를 캐시하는 단순한 cdn이 아니라는 것입니다.

클라우드 프론트는 엣지 로케이션을 aws 리전에 연결하는 aws의 글로벌 네트워크를 활용합니다. 이것은 일반적인 퍼블릭 인터넷을 경유하는 것보다 훨씬 빠르고 안정적인 성능을 얻을 수 있음을 의미합니다. 즉 캐싱을 할 수 없는 동적 컨텐츠의 경우에도 aws 글로벌 네트워크를 활용함으로써 컨텐츠 전송이 소요되는 시간을 크게 단축할 수 있습니다. 성능 개선뿐만 아니라 디도스 공격 방어 측면에서도 aws 엣지 서비스는 매우 좋은 대안이 될 수 있습니다.

전 세계적으로 퍼져있는 엣지 로케이션은 각각 수백 Gbps의 밴드리스 가용량을 제공하고 있습니다. 그리고 모든 패킷을 실시간으로 검사하여 악성 패킷으로 판단되면 애플리케이션으로 전달하지 않고 엣지 레벨에서 차단할 수 있는 환경을 제공합니다. 또한 Shield Advanced와 같은 엣지 서비스를 함께 구현하여 다양한 방식의 대규모 디도스 공격으로부터 더 높은 수준의 보호를 실현할 수 있습니다.

현재 엣지 로케이션에서 동작하는 서비스들은 다음과 같습니다.

  • Amazon CloudFront
  • AWS Global Accelerator
  • AWS WAF
  • AWS Shield
  • Amazon Route 53
  • CloudFront Functions / Lambda@Edge
- CloudFront는 aws의 cdn 서비스로 http 및 https 프로토콜 기반의 트래픽을 가속합니다.
- Global Accelerator는 tcp/udp 기반의 트래픽까지 모두 가속할 수 있습니다. aws WAF는 다양한 웹 계층의 공격으로부터 애플리케이션을 보호합니다.
- Shield는 디도스 공격으로부터 애플리케이션을 보호합니다.
- Route 53은 aws의 DNS 서비스로 매우 높은 가용성을 기반으로 다양한 라우팅 정책을 제공합니다.
- CloudFront Functions, Lambda@Edge는 엣지 환경에서 사용할 수 있는 컴퓨팅 자원으로 다양한 비즈니스 로직을 애플리케이션으로부터 엣지로 오프로딩할 수 있습니다.

AWS Edge services로 어떻게 성능을 개선할 수 있는가 ?

Amazon CloudFront로 웹 성능 개선하기

정적 컨텐츠 (image, CSS, JS, videos)

  • 콘텐츠를 사용자 가까이로 이동 (캐싱)
  • 파일을 더 작게 만들기 (압축)

동적 컨텐츠 (profile names, ecommerce carts, APIs)

  • AWS 글로벌 네트워크를 통한 가속화 (경로 최적화)
  • 사용자와 가까운 곳에서 연결 종료(Edge에서 TCP/TLS 연결)
  • 연결 시에 발생하는 프로토콜 레벨의 오버헤드 최적화

AWS-Architecture_edge1

캐시가 가능한 정적 컨텐츠의 성능에서 가장 중요한 것은 바로 캐시 히트율을 높이는 것입니다. 캐시된 컨텐츠는 애플리케이션과의 통신으로 발생하는 추가 지연이 없기 때문에 가장 빠른 응답을 제공할 수 있기 때문입니다. 클라우드 프론트는 다층화된 캐시 계층을 제공하여 이를 실현합니다. 최종 사용자의 요청은 가장 먼저 엣지 로케이션으로 인입되며 캐시되어 있는 컨텐츠인 경우에는 바로 최종 사용자에게 응답합니다. 엣지 로케이션에서 캐시미스가 발생하는 경우 해당 요청은 바로 애플리케이션으로 전달되지 않으며 중간 캐시 계층인 리저널 엣지 캐시로 전달되어 한 번 더 캐시여부를 확인합니다.

Regional Edge에서도 캐시 미스가 발생한다면 애플리케이션으로 요청이 전달되게 됩니다. 캐시 히트율을 더욱 개선하기 위하여 클라우드 프론트에 오리진 쉴드를 추가적으로 고려할 수 있습니다. 클라우드 프론트의 오리진 쉴드는 중간 캐시 계층을 추가하여 캐시 히트율 측면에서 도움을 줄 수 있기 때문입니다.

클라우드 프론트의 캐시 서버 또한 내부적으로 각 역할별로 계층화되어 있습니다.

  • 레이어1: TCP/TLS 연결을 담당하며 aws WAF와의 연동 및 일부 핫 컨텐츠에 대한 캐시 역할 수행

  • 레이어2: 실제 메인 캐싱 역할, 레이어 1에서 레이어 2로 요청이 전달될 때 캐시키 기반의 consistent 핵심 알고리즘을 적용하여 각 콘텐츠를 저장하고 있는 캐시 서버를 찾아가게 된다. 이로 인하여 클라우드 프론트는 중복된 캐시를 최소화하여 캐시 볼륨 최적화를 수행, 이는 결국 캐시 히트율을 증가시켜 성능 개선에 도움

  • 레이어3: 중간 캐시 계층인 Regional Edge Cache 또는 애플리케이션과의 연결 관리, 컨텐츠 압축 담당

AWS-Architecture_edge2

다음은 클라우드 프론트가 어떻게 캐시가 불가능한 동적 컨텐츠를 가속화할 수 있는지 살펴보겠습니다. 일반적으로 웹 서비스 통신을 하기 전에는 tcp 연결이 수립되어야 합니다. tcp 연결을 위해서는 최종사용자와 서버간의 연결 동기화를 위하여 동기화 요청패킷 승인 패킷등 여러 번의 데이터 패킷이 오고 가야 합니다. 만약 https 서비스인 경우에는 tcp 연결 이후에 추가적으로 tls 연결이 수립되어야 하며 이 과정에서 암호화 유형이 협상되고 키가 교환되는 등 더 많은 통신이 발생하게 됩니다. tcp 및 tls 연결이 완료된 이후에서야 최종 사용자는 http 요청을 서버로 보내게 되며 서버는 최종적으로 해당 요청에 대하여 응답하게 됩니다. 즉 이것은 실제 컨텐츠 다운로드를 시작하기 이전에 최종 사용자와 서버 사이의 구간에서 데이터 패킷이 여러 번 왕복해야 함을 의미합니다. 최종 사용자와 서버 사이의 구간이 길어지면 길어질수록 rtt라고 불리는 왕복 시간 지표가 비례하여 증가하게 되며 왕복 회수가 늘어날수록 당연히 지연시간도 늘어납니다. 또 한가지 기억해야 할 것은 해당 통신이 발생하는 퍼블릭 인터넷은 언제든지 혼잡이 발생할 수 있는 영역이라는 것입니다. 거리가 늘어나면 늘어날수록 혼잡으로 인한 지연 가능성은 커지며 때때로 통신 자체가 불가능한 상황이 발생하기도 합니다. 그렇다면 클라우드 프론트는 어떻게 tcp 및 tls 협상 과정을 개선할 수 있을까요 ?

AWS-Architecture_edge3

클라우드 프론트는 각 엣지 로케이션에서 연결 종료를 지원합니다. 즉 클라우드 프론트의 400개 이상의 엣지 로케이션은 최종 사용자에 가깝게 위치하여 TCP 및 TLS 연결 협상시에 이동해야 하는 거리를 단축시켜 줍니다. 그러므로 모든 동적 컨텐츠는 짧은 tcp 및 tls 연결 협상 시간을 기반으로 성능이 개선됩니다. 또한 서비스를 이용하는 최종 사용자들이 전 세계적으로 퍼져있다면 전 세계적으로 분포되어 있는 로케이션을 기반으로 더 큰 성능 개선을 얻을 수 있습니다.

엣지 로케이션과 애플리케이션 사이에서의 성능 개선

AWS-Architecture_edge4

클라우드 프론트는 애플리케이션과 통신시에 tcp tls 연결을 활성 상태로 유지하여 재사용할 수 있습니다. 즉 첫 번째 요청으로 클라우드 프론트와 애플리케이션의 연결이 수립되면 후속 요청들은 애플리케이션과 통신시에 tcp tls 연결 협상 과정을 제거하고 바로 http 통신을 시작할 수 있음을 의미합니다. 또한 애플리케이션이 aws 자원인 경우 퍼블릭 인터넷이 아닌 aws 글로벌 네트워크 기반으로 통신하게 되므로 더욱 빠르고 안정적인 성능을 확보할 수 있습니다.

AWS-Architecture_edge5

클라우드 프론트는 라스트 마일 전송도 가속합니다. 과거의 http1.1은 페이지별 객체들에 대하여 제한된 수의 병렬 다운로드를 지원했습니다. 즉 브라우저는 한 번에 제한된 수의 객체들만 다운로드하므로 페이지를 로드하는데 걸리는 시간이 크게 늘어날 수 있었습니다. 클라우드 프론트는 더 많은 병렬 객체 다운로드 및 헤드 압축을 지원하는 http2를 즉시 구현할 수 있습니다. http2는 더 많은 병렬 다운로드를 지원하므로 페이지 로드 시간을 대폭 줄이고 사용자 경험을 개선할 수 있습니다. 또한 클라우드 프론트는 컨텐츠 압축을 통해 객체를 더 작게 만들어 더 빠른 다운로드를 제공합니다.

AWS Global Accelerator

aws 글로벌 엑셀러레이터는 엣지 로케이션 및 aws 글로벌 네트워크를 활용하여 tcp/udp 워크로드의 네트워크 성능을 최대 60%까지 개선합니다. 또한 두 개의 고정 애니캐스트 IP 주소를 제공하며 해당 엔트리포인트 뒤에서 최종 사용자측 혹은 DNS 측의 설정 변경 없이 aws 애플리케이션 엔드포인트를 추가하거나 제거할 수 있습니다.

마지막으로 페일오버 설정을 통해 애플리케이션 엔드포인트 간에 장애 조치를 몇 초 내에 자동으로 수행할 수 있습니다.

만약 미국 버지니아 리전과 유럽 아일랜드 리전에서 애플리케이션이 구동되는 경우 전 세계에 퍼져있는 최종 사용자들은 퍼블릭 인터넷을 통해 해당 애플리케이션에 접근하게 됩니다. 하지만 퍼블릭 인터넷은 빈번하게 혼잡이 발생할 수 있는 환경이며 거리가 멀어질수록 성능 측면에서 안정적인 성능을 제공하기 어렵습니다.

글로벌 액셀러레이터를 적용하게 되면 전 세계의 최종 사용자들은 고정된 두 개의 애니캐스트 기반 ip로 요청을 하게 됩니다. 해당 요청은 가장 가까운 엣지 로케이션으로 전달되며 엣지 로케이션부터 애플리케이션 엔드포인트까지는 aws 글로벌 네트워크를 기반으로 빠르고 안정적으로 트래픽을 전송하게 됩니다. 또한 특정 애플리케이션 엔드포인트가 장애가 발생할 경우 30초 이내에 서비스 가용성을 계속해서 유지할 수 있습니다.

요약

  • Amazon CloudFront는 정적 및 동적 콘텐츠를 가속화합니다.
  • Amazon CloudFront는 다층화된 캐시 계층 및 서버 내의 캐시 볼륨 최적화로 캐시 히트율을 최적화합니다.
  • Edge location에서 TCP/TLS 연결을 종료합니다.
  • Edge location에서 애플리케이션 사이의 연결을 재사용합니다.
  • AWS Global Network는 장거리 요청을 가속화합니다.
  • AWS Global Accelerator는 HTTP 및 비 HTTP 트래픽을 가속화합니다.

AWS Edge services로 어떻게 DDoS 공격을 방어할 수 있는가 ?

AWS Network 서비스로 Amazon CloudFront, AWS Global Accelerator, Amazon Route 53을 활용한다면 다음과 같은 이점을 얻을 수 있습니다.

  • 완전 인라인 DDoS 완화 시스템: 탐지 지연 없이 자주 사용되는 인프라 계층(L3 및 L4) DDoS 공격으로부터 애플리케이션을 보호합니다.
  • SYN 프록시: SYN 프록시 기능은 SYN Flood 공격을 차단하기 위한 기법으로 새로운 연결 시도에 대하여 추가 검증을 수행하고, 합법적인 최종 사용자에게만 서비스를 제공합니다.
  • 오류 격리: 공격 볼륨이 AWS에서 업스트림으로 정체를 일으키는 경우 오류가 소스에 더 가깝게 격리되고 합법적인 최종 사용자에게 미치는 영향이 최소화됩니다.

전 세계적으로 분산된 네트워크: 전세계의 분포된 Edge Location은 Shield의 DDoS 완화 용량에 대한 광범위한 액세스를 제공합니다.

WAF에 의한 감지 및 차단

  • 비율 기반 규칙: 규칙과 일치하는 요청이 사용자가 정의한 임계값을 초과하는 경우 불량 행위자의 IP 주소를 자동으로 차단할 수 있습니다. (이는 HTTP 플러드 공격을 완화하는 데 유용합니다.)
  • IP 평판 규칙: Amazon IP 평판 목록 규칙 그룹에는 Amazon 내부 위협 인텔리전스를 기반으로 하는 규칙이 포함됩니다.
  • 익명 IP 목록: 익명 IP 목록 규칙 그룹에는 최종 사용자에 대한 난독화를 허용하는 서비스의 요청을 차단하는 규칙이 포함되어 있습니다.

AWS Shield Standard & Advanced

AWS-Architecture_edge6

Shield Standard

  • 추가 비용 없이 자동 보호 제공
  • 기본 AWS 서비스에 대한 정적 임계값 DDoS 보호
  • 결정적 패킷 필터링
  • 우선 순위 기반 트래픽 조정

모든 AWS 리전에서 모든 AWS 리소스에 대한 가장 일반적인 네트워크 및 전송 계층 DDoS 공격에 대한 자동 방어

Shield Advanced의 이점

  • 최소한의 아키텍처 변경으로 마찰 없는 설정
  • 완전 관리형 서비스 기반의 낮은 운영 오버헤드
  • 유동적인 보안 위협에 대한 가시성
  • 비용 관점에서의 보호

AWS Shield Advanced 사용 가능 서비스

  • Application Load Balancer
  • Classic Load Balancer
  • Network Load Balancer
  • AWS Global Accelerator
  • CloudFront
  • Route 53
  • EC2

요약

  • Edge location을 기반으로 동작하는 CloudFront, Global Accelerator, Route 53을 활용하면 DDoS 공격에 효과적으로 대응할 수 있습니다.
  • WAF의 비율 기반 규칙, IP 평판 규칙, 익명 IP 목록 규칙을 통하여 공격 IP 혹은 의심스러운 IP를 차단할 수 있습니다.
  • AWS Shield Standard는 가장 일반적이고 빈번하게 발생하는 네트워크 및 전송 계층 DDoS 공격으로부터 애플리케이션을 보호합니다.
  • AWS Shield Advanced는 설정, 운영, 가시성, 비용 측면에서 DDoS 공격 방어에 대한 추가적인 이점을 제공합니다.

Edge를 활용한 애플리케이션 성능 향상 및 DDoS 방어 전략 - 이갑인, AWS