AWS EB에 Django 사용 시 Cache 설정 방법
MWC 2014에 선보일 데모 프로그램을 AWS EB에 Django로 개발하였다. 주요 기능 완료 후 페이지 로딩 속도를 개선하기 위해 HTTP cache 설정을 하였다. 생각보다 고생을 해서 어떤 함정이 있었는지 이 블로그에 정리해두고자 한다.
1. AWS EB의 Apache mod_wsgi 설정
Static 파일에 대한 cache 설정은 Apache의 mod_wsgi 설정 파일의 수정이 필요하다. 하지만, mod_wsgi 설정 파일을 직접 수정해봐야 다음 번 application 버전을 AWS EB에 업로드 하면 다시 초기 설정 값으로 바뀌어 버린다. 이 문제를 해결하기 위해서는 AWS EB의 configuration hook 파일을 직접 수정해 주어야 한다. 자세한 방법은 stackoverflow의 다음 Q&A를 참고하시라.
2. S3 Cache 설정
만일, static 파일들을 AWS S3에 저장해두고 사용한다면 AWS S3의 각 object들의 cache 설정이 필요하다. 지정한 bucket의 모든 object에 대해 cache 설정을 하는 Python 예제 코드를 참고하기 바란다.
3. Django storage를 사용하는 경우
Django storage를 사용하여 AWS S3에 파일을 업로드한 경우 이 파일에 대한 URL 링크가 HTTPS이거나 혹은, auth string param이 추가되어 있으면 local cache가 불가능하다. 이 문제를 해결하기 위해서는 아래 두 설정 값을 settings.py 파일에 추가한다.
4. 최종 확인
1. AWS EB의 Apache mod_wsgi 설정
Static 파일에 대한 cache 설정은 Apache의 mod_wsgi 설정 파일의 수정이 필요하다. 하지만, mod_wsgi 설정 파일을 직접 수정해봐야 다음 번 application 버전을 AWS EB에 업로드 하면 다시 초기 설정 값으로 바뀌어 버린다. 이 문제를 해결하기 위해서는 AWS EB의 configuration hook 파일을 직접 수정해 주어야 한다. 자세한 방법은 stackoverflow의 다음 Q&A를 참고하시라.
2. S3 Cache 설정
만일, static 파일들을 AWS S3에 저장해두고 사용한다면 AWS S3의 각 object들의 cache 설정이 필요하다. 지정한 bucket의 모든 object에 대해 cache 설정을 하는 Python 예제 코드를 참고하기 바란다.
3. Django storage를 사용하는 경우
Django storage를 사용하여 AWS S3에 파일을 업로드한 경우 이 파일에 대한 URL 링크가 HTTPS이거나 혹은, auth string param이 추가되어 있으면 local cache가 불가능하다. 이 문제를 해결하기 위해서는 아래 두 설정 값을 settings.py 파일에 추가한다.
AWS_QUERYSTRING_AUTH = False
AWS_S3_SECURE_URLS = False
Safari나 Chrome 브라우저의 developer tool을 사용해서 static file들의 local cache가 정상적으로 동작하는지 확인한다.
댓글
댓글 쓰기