본문 바로가기

AWS Design Pattern/동적 컨텐츠 처리 패턴

URL Rewriting - 정적 콘텐츠 이전

ㅁ  풀어야 할 문제

웹 서비스를 가상 서버로 제공하는 경우, 액세스 수가 많아지면 가상 서버의 수를 늘리거나 가상 서버의 사양을 올려 부하에 대응

그러나 액세스의 대부분은 정적 콘텐츠에 대한 요청이 많아 정적 컨텐츠의 액세스를 어떻게 분산시킬 것인지가 큰 문제이다.

 

ㅁ  해결/패턴

정적 콘텐츠의 액세스 분산 방법으로 인터넷 스토리지를 이용하는 방법이 있다. 그렇게 하면 가상 서버를 증가시키거나 사양을 높이지 않아도 부하에 대한 대책을 세울 수 있다.

이 방법을 이용하려면 정적 콘텐츠의 URL을 인터넷 스토리지 URL로 변경해야 하지만 정적 콘텐츠를 직접 수정하는 방법 외에 웹 서버의 필터 기능을 이용해 배포 시 URL을 변경할 수 있다.

또 인터넷 스토리지에서 배포하는 대신 콘텐츠 배포 서버에서 콘텐츠를 배포할 수 있다.

 

ㅁ  구현

AWS에서 정적 콘텐츠를 배포하는 데 S3를 이용한다.  S3에 저장되어 있는 콘텐츠를 원본으로 하여 콘텐츠 배포 서비스인 CloudFront를 이용하면 전 세계에 지연 없이 컨텐츠 배포가 가능하다.

-       EC2 정적 콘텐츠(자바스크립트/CSS/이미지 등)의 일부를 S3에 업로드(동기)한다.

-       필요에 따라 정적 콘텐츠가 업로드(동기)되는 S3를 원본으로 한 CloudFront를 만든다
(CloudFront
를 이용할 경우 원본 서버를 S3가 아닌 EC2로 직접 할 수 있다.)

-       HTML 태그의 정적 콘텐츠 URL S3 CloudFront URL로 갱신할 수 있다.

-       아파치 필터 모듈(mod_ext_filter/mod_sed)이나 프락시로 만든 Nginx 등으로 동적 갱신도 가능하다.

ㅁ  장점

-       정적 콘텐츠의 액세스를 S3/CloudFront에 분산함에 따라 많은 부하에 견딜 수 있고 EC2 비용도 줄일 수 있다.

-       CloudFront를 이용하는 경우 전 세계로 배포할 때 거리에 따른 전송 지연 대책이 되기도 한다.

-       mod_ext_filter/mod_sed Nginx 등을 이용할 때 필터를 넣으면 원래의 HTML파일을 수정하지 않고 패턴을 적용할 수 있다. 또 필터를 정지시키면 CloudFront를 사용하지 않는 형태로 쉽게 변경 가능하다.

 

ㅁ  주의점

-       CloudFront를 이용할 때 콘텐츠가 캐시 되어 있어 삭제나 갱신하는데 시간이 걸리는 경우가 있다.