아파치 정적 데이터 Expires 브라우저 캐시 설정 방법

APACHE

우리가 사용하는 웹 브라우저는 사용자가 홈페이지 접속시, 홈페이지를 구성하는 HTML 문서, 이미지, CSS, JS등의 각종 파일을 다운로드 하고 렌더링해서 사용자가 시각적으로 볼수 있게 구현해 줍니다.

이때 웹서버 입장에서는 홈페이지를 구성하는 요소 만큼 리퀘스트(Request)가 이루어지며 파일을 다운로드 받는 시간 만큼 렌더링이 지연되어 페이지 로딩 속도에 영향을 미치게 되는데요.

항상 새로운 데이터를 받는다면 문제가 되지 않겠지만 웹페이지를 구성하는 CSS, JS 같은 파일들은 한번 퍼블리싱하면 바뀔 일이 없기 때문에 이러한 파일을 페이지 마다 전송하면 트래픽 낭비를 불러오는데 이러한 문제를 해결하기 위해 고안된 것이 데이터의 만료 기간, Expires 입니다.

Expires는 헤더에 만료 기간 정보를 넣어 해당 기간 동안 파일을 브라우저에서 캐싱(Caching)하게 되어 트래픽을 절감하는 기술로 접속자의 브라우저는 Expires에 지정된 기간동안 해당 파일을 임시 디렉토리에 저장해 웹페이지 렌더링에 문제가 없게 합니다.

그리고 만료 기간 이후 데이터의 변경점이 있는지 웹서버에 리퀘스트를 보내 임시 디렉토리에 저장된 파일을 보존할지, 갱신할지를 정하게 됩니다.

정적 데이터와 동적 데이터

데이터를 가공 후, 저장되어 변경점이 없는 데이터를 정적 데이터라고 합니다. 예를 들어 사용자가 에디터를 이용해 만든 HTML 문서를 파일로 ‘저장’한 결과물은 사용자가 수정해서 다시 저장하지 않는 이상은 변경점이 없죠.

반대로 PHP 같은 프로그래밍 연산을 통해 화면에 뿌려진 웹페이지는 웹서버의 메모리에 저장되며 사용자의 입력값, 쿼리, 변수등에 의해 화면에 보여지는 결과가 달라지는데 같은 HTML 코드로 이루어진 웹문서라 하더라도 파일로 저장된 상태가 아니기 때문에 동적 데이터라고 칭합니다.

간단하게 변수에 의해 그 값이 달라지는 데이터는 동적 데이터, 파일로 저장된 상태는 정적 데이터입니다.

아파치 Expires 설정

아파치는 mod_expires 모듈로 해당 기능을 사용할 수 있으며 아파치 설정 파일인 httpd.conf 또는 include 되는 <VirtualHost> 가상호스트 블럭, .htaccess 파일을 통해 정적 데이터의 종류와 expires 기간을 지정할 수 있습니다.

Expires 기간은 보통 CSS, JS 파일 같이 자주 업데이트 되지 않는 파일 같은 경우 기간을 길게 잡는 편이며 개발용 웹서버라면 파일이 수시로 변경되기 때문에 Expires 설정은 미루는 것이 좋습니다.

# a2enmod expires

아파치에서 Expires를 사용하기 위해서는 mod_expires 모듈이 필요합니다. 패키지로 설치한 경우 위 명령어를 통해 쉽게 모듈을 활성화 할수 있으며 아파치를 재시작 하면 적용됩니다.

<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType text/plain "modification plus 1 month" 
ExpiresByType text/html "modification plus 1 month" 
ExpiresByType text/xml "modification plus 1 month" 
ExpiresByType text/javascript "access plus 1 month" 
ExpiresByType text/x-javascript "access plus 1 month" 
ExpiresByType text/css "access plus 1 month" 

ExpiresByType application/javascript "access plus 1 month" 
ExpiresByType application/x-javascript "access plus 1 month" 

ExpiresByType image/bmp "access plus 1 month" 
ExpiresByType image/gif "access plus 1 month" 
ExpiresByType image/jpeg "access plus 1 month" 
ExpiresByType image/png "access plus 1 month" 
ExpiresByType image/tiff "access plus 1 month" 
ExpiresByType image/x-icon "access plus 1 month" 

ExpiresByType video/mpeg "access plus 1 month" 
ExpiresByType video/quicktime "access plus 1 month" 
ExpiresByType video/x-msvideo "access plus 1 month" 

ExpiresByType audio/mpeg "access plus 1 month" 
ExpiresByType audio/x-aiff "access plus 1 month" 
ExpiresByType audio/x-mpegurl "access plus 1 month" 
ExpiresByType audio/x-wav  "access plus 1 month" 
ExpiresByType audio/mid  "access plus 1 month" 

</IfModule>

위 예제는 파일의 MIME-TYPE 별로 만료 기간을 지정하는 것으로 웹서버에서 취급하는 파일을 등록하면 되겠습니다.

  • years
  • months
  • weeks
  • days
  • hours
  • minutes
  • seconds
ExpiresByType image/jpeg "access plus 1years 2month 9hours 59minutes 22seconds"

기간을 지정하는 문법은 위과 같으며 위처럼 나열해서 지정할 수도 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.

apache2 logo
우분투 아파치 속도를 빠르게 mod_deflate gzip 압축
아파치 웹서버 데몬은 gzip을 이용해 문서를 압축하고 클라이언트에게 전송하는 것을 지원합니다. 압축되는 문서는 html,CSS,javascript등 웹사이트를 구성하는 대부분의 문서로 문서 하나로 비교하면…