웹 페이지 캐싱
CodeIgniter는 최대 성능을 얻을 수 있도록 페이지를 캐시할 수 있게 해줍니다.
CodeIgniter는 매우 빠르지만, 페이지에 표시하는 동적 정보의 양은 사용되는 서버 리소스, 메모리, 처리 사이클과 직접적으로 연관되며 이는 페이지 로딩 속도에 영향을 줍니다. 페이지를 캐싱하면 완전히 렌더링된 상태로 저장되므로 정적 웹 페이지에 훨씬 가까운 성능을 얻을 수 있습니다.
캐싱은 어떻게 동작하나요?
캐싱은 페이지별로 활성화할 수 있으며, 페이지가 새로고침되기 전까지 캐시를 유지할 시간을 설정할 수 있습니다.
참고
페이지별은 URI별을 의미합니다. v4.5.0부터는 요청의 HTTP 메서드도 함께 고려합니다. 즉, 같은 URI라도 HTTP 메서드가 다르면 별도로 캐시됩니다.
경고
웹 페이지 캐싱은 동일한 HTTP 메서드와 URI를 가진 요청들 사이에서 공유됩니다. 캐시 키는 인증된 사용자, 쿠키, 인가(authorization) 헤더, Cache-Control, Vary에 따라 달라지지 않습니다. 인증·인가 필터가 실행되기 전에 캐시된 응답이 반환될 수 있으므로, 보호되거나 개인화된 응답에는 사용하지 마십시오.
페이지가 처음 로드되면 현재 설정된 캐시 엔진을 사용해 해당 페이지가 캐시됩니다. 이후 페이지 로드에서는 캐시를 가져와 요청한 사용자의 브라우저로 전송합니다.
캐시가 만료되었으면 삭제 후 갱신되어 브라우저로 전송됩니다.
참고
Benchmark 태그는 캐시되지 않으므로 캐싱이 활성화된 상태에서도 페이지 로딩 속도를 계속 확인할 수 있습니다.
캐싱 설정
캐시 엔진 설정
웹 페이지 캐싱을 사용하기 전에 app/Config/Cache.php 를 수정하여 캐시 엔진을 설정해야 합니다. 자세한 내용은 캐시 설정 를 참고하세요.
$cacheQueryString 설정
Config\Cache::$cacheQueryString 으로 캐시 생성 시 쿼리 문자열 포함 여부를 설정할 수 있습니다.
유효한 옵션은 다음과 같습니다:
false: (기본값) 비활성화. 쿼리 문자열을 고려하지 않으므로 URI 경로가 같고 쿼리 문자열만 다른 요청에는 동일한 캐시가 반환됩니다.true: 활성화. 모든 쿼리 파라미터를 고려합니다. 이 경우 같은 페이지에 대해 많은 캐시가 반복해서 생성될 수 있으니 주의하세요.array: 활성화. 단, 지정한 쿼리 파라미터 목록만 고려합니다. 예:
['q', 'page'].
$cacheStatusCodes 설정
Added in version 4.7.0.
Config\Cache::$cacheStatusCodes 로 캐시를 허용할 HTTP 응답 상태 코드를 제어할 수 있습니다.
유효한 옵션은 다음과 같습니다:
[]: (기본값) 모든 HTTP 상태 코드를 캐시합니다. 하위 호환성은 유지되지만 임시 오류 페이지도 캐시될 수 있습니다.[200]: (권장) 성공 응답만 캐시합니다. 이렇게 하면 임시여야 하는 오류 페이지(404, 500 등)의 캐싱을 방지할 수 있습니다.상태 코드 배열: 특정 상태 코드만 캐시합니다. 예:
[200, 404]: 성공 응답과 Not Found 페이지를 캐시합니다.[200, 404, 410]: 성공 응답과 특정 오류 코드를 캐시합니다.[200, 201, 202, 203, 204]: 모든 2xx 성공 응답.
경고
빈 배열 [] 을 사용하면 임시 오류 페이지(404, 500 등)도 캐시될 수 있습니다. 운영 애플리케이션에서는 임시 오류를 캐시하지 않도록 [200] 으로 제한하는 것을 고려하세요. 예를 들어 404 페이지가 캐시되면 리소스가 생성된 뒤에도 캐시 만료 전까지 계속 남아 있게 됩니다.
참고
이 설정과 관계없이 DownloadResponse 및 RedirectResponse 인스턴스는 PageCache 필터에서 절대 캐시되지 않습니다.
캐싱 활성화
캐싱을 활성화하려면 컨트롤러 메서드 어디든 다음 태그를 넣으세요:
<?php
$this->cachePage($n);
여기서 $n은 페이지를 새로고침 사이에 캐시 상태로 유지할 초 수입니다.
위 태그는 메서드 내부 어디에 두어도 됩니다. 표시 순서의 영향을 받지 않으므로 가장 논리적인 위치에 두세요. 태그를 추가하면 페이지 캐싱이 시작됩니다.
중요
출력에 영향을 줄 수 있는 설정 옵션을 변경했다면 캐시를 수동으로 삭제해야 합니다.
캐시 삭제
더 이상 페이지를 캐시하고 싶지 않다면 캐싱 태그를 제거하세요. 그러면 만료 시 더 이상 갱신되지 않습니다.
참고
태그를 제거해도 캐시는 즉시 삭제되지 않습니다. 정상적으로 만료되어야 합니다.