본문 바로가기
FullStack/41. WEB.WAS

웹 서비스 성능 개선 - mod_expires 정적 리소스 캐시 사용

by nakanara 2022. 2. 16.
반응형

아파치 웹 서버에 정적 리소스에 대해 캐시 설정하여, 설정된 기간 동안 로컬 PC에 저장된 리소스를 사용하여 성능을 올리는 방법입니다.

캐시 주기 설정 값인 Cache-Controlmax-age 값을 조절하는 mod_expires 모듈을 http.conf에서 사용 처리합니다

# mod_expires 모듈 주석 해제
LoadModule expires_module modules/mod_expires.so

웹 서비스에 공통으로 설정할 경우 http.conf 파일에 내용 추가

# 캐시 설정 Type 정의
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "access plus 1 days"
  ExpiresByType image/png "access plus 1 days"
  ExpiresByType image/jpeg "access plus 1 days"
  ExpiresByType text/css "access plus 1 days"
  ExpiresByType application/javascript "access plus 1 days"
  ExpiresByType application/x-shockwave-flash "access plus 1 days"

  # Cache-Control: no-cache, no-store, max-age=0
  # Pragma: no-cache 가 설정된 경우 제외 작업 
  Header unset Cache-Control
  Header set Pragma "none"
</IfModule>

특정 웹 서비스를 위해 vhost.conf 설정할 경우

<VirtualHost *:80>

  ServerAdmin admin@nakanara.com
  DocumentRoot "/usr/local/apache2/htdocs"
  ServerName nakanara.com
  ServerAlias nakanara.com
  ErrorLog "|bin/rotatelogs logs/web_error_log-%Y-%m-%d.log 86400"
  CustomLog "|bin/rotatelogs logs/web_access_log-%Y-%m-%d.log 86400" combined

  ExpiresActive On
  ExpiresByType image/gif "access plus 1 days"
  ExpiresByType image/png "access plus 1 days"
  ExpiresByType image/jpeg "access plus 1 days"
  ExpiresByType text/css "access plus 1 days"
  ExpiresByType application/javascript "access plus 1 days"
  ExpiresByType application/x-shockwave-flash "access plus 1 days"

  # Cache-Control: no-cache, no-store, max-age=0
  # Pragma: no-cache 가 설정된 경우 제외 작업 
  Header unset Cache-Control
  Header set Pragma "none"
</VirtualHost>

설정 방법은 다음과 같으며, plus는 생략이 가능합니다.

ExpiresDefault "<base> [plus] {<num> <type>}*"
ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"

ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/gif "access 1 days"

캐시 설정 단위는 아래처럼 가능합니다.

  • years, months, weeks, days, hours, minutes, seconds

캐시 설정 전/후 비교

image

변경 전 3.6MB 다운로드하던 리소스가 24.3KB로 되었으며, 다운로드 용량이 표시되던 항목이 memory cache, disk cache로 변경된 것을 확인할 수 있으며, 최종적으로 3.41 걸리던 시간이 1.02초로 단축되었습니다

참고

반응형