본문 바로가기

Storage&CDN/CloudFront

Amazon CloudFront 동적 컨텐츠 캐싱 및 주요 기능

AWS CDN 서비스인 CloudFront의 동적 컨텐츠 및 주요 기능에 대해서 설명하도록 한다. 주요 기능과 Best Practice 정보 소개한다.

해당 내용은 AWS SA분의 "CloudFront로 동적 컨텐츠를 전송하는 네 가지 이유" Korea Region 발표 내용을 참고 했다.

 

 

 

대부분 CDN은 보통 정적/동적 컨텐츠를 분리해서 사용하고 있었다.

동적 컨텐츠는 App Server에서 구동되고, 그 안에 정적 컨텐츠는 CDN Server를 통해 End-Point를 구분지어 컨텐츠를 전달한다.

사실 CDN 플랫폼의 경우 HTTP GET 요청뿐만 아니라 POST, PUT, OPTION 등 HTTP Method를 전부 지원한다. 또한 Header, Cookie, QueryString도 원본에 바이패스 시킬 수 있다. TTL 값을 0으로 주어 동적 컨텐츠 캐싱이 가능하게 할 수 있다. 

다만 CDN과 Origin 구간의 SPOF(Single Point Of Failure) 문제가 발생된다. CDN 장애만으로 모든 서비스가 장애가 날 수 있다. 그래서 요새는 멀티 CDN을 구성하는 추세다. 

CDN 구성

그럼에도 불구하고 우리는 CDN을 End Point로 사용하는데, 그 장점에 대해 설명한다.

 

CloudFront 구성

 

Cloudfront 구성

 

첫 번째, DDoS 방어가 용이하다. L3/L4 Layer(syn flooding, UDP 등) 공격을 CloudFront에서 먼저 대응해준다. AWS SA말로는 DDOS의 80%가 L3/L4 Layer, 20%가 L7 Layer라고 한다.

 

두 번째, L7 Layer의 공격(XSS, SQL Injection 등) 또한 차단할 수 있다. CloudFront를 사용할 경우 WAF와 연동이 가능하다. (ALB도 가능) WAF와 연동을 통해 L7 Layer에 대한 보안도 강화할 수 있다. WAF 관련 내용은 WAF 글을 참고해라.

 

세 번째, 원본이 AWS 리소스일 경우 글로벌 서비스의 경우 성능 증가 효과가 있다. 가령 한국에서 미국으로 서비스를 할 경우 미국 사용자는 퍼블릭망을 통해 한국 서버에 TCP 연결에 대략 120ms가 소요된다. 그러나 CloudFront를 사용할 경우 미국 사용자는 미국의 CloudFront Edge 서버와 TCP 연결을 맺고, 그 뒤로는 AWS의 전용망 혹은 Optimize 된 네트워크 라우팅을 통해 더 빠른 성능을 기대할 수 있다.

 

네 번째, 아마 이게 가장 큰 장점인데... 비용이 절감된다. AWS 서비스는 아웃바운드에 대한 트래픽에 대해 비용이 청구된다. CloudFront의 경우 사용량에 따라 비용을 할인 받을 수 있다.

 

그럼 간단하게 CloudFront를 구성해보자. 기본 구성은 Document를 참고하고, Origins/Behaviors 설정을 확인하자. Path 별로 HTTP Method, Header, Cookie, QueryString 등 원본과 통신 설정이 가능하다.

CloudFront Behaviors

Behaviors 동적컨텐츠(*.php, *.jsp 등) 설정은 아래와 같이 PUT, POST, PATCH, DELETE 항목을 모두 체크하고, Forward Headers에서 필요한 Headers를 넣어주면 된다. 또한 Query String도 Yes로 바꿔준다.

 

이상 AWS CloudFront 동적컨텐츠 캐싱에 대해서 알아봤다. 특별한 이유가 없는 한 Cloudfront를 App Server 앞단에 배치하여 보안 및 성능 증가를 권장한다. 또한 Cloudfront Traffic의 경우 사용량에 따라 비용을 절감하기를 바란다. 

감사합니다.

 

아 추가로 CloudFront의 경우 Client Side에 Keep-Alive 설정이 없는데, 이건 CloudFront가 Default로 구성하는 듯 하다. 원본과의 Keep-Alive는 커스텀하게 설정이 가능하다.

TCP Keep-Alive

패킷을 보면 대략 45초 정도 수준으로 TCP Keep Alive가 구성되어 있다.