사용자 도구

사이트 도구


사이드바

tech:codeigniter:01.framework:캐시_사용_관련

캐시 개요

CodeIgniter에서 제공하는 Cache

  • View Cache : view 노출 영역을 cache함
  • DB Cache : DB resultset을 cache함
  • 일반 Cache : 캐시 라이브러리를 제공 사용자가 원하는 형태의 cache를 구현 할 수 있도록 함

Cache 사용 제약

  • View Cache : 사용자의 권한에 따라 result값이 다른 경우가 많이 있음. View Cache의 경우에는 URI의 정보를 cache 구분 key로 삼기 때문에 POST / GET 방식의 데이터 구분은 적용되지 않음(URI Segment 사용 시에는 적용 가능)
  • DB Cache : 일반 query 실행 시에는 사용상에 문제 없음. 다만 복수의 SP 호출 시 주의사항패치가 적용된 경우에는 사용 불가. (CodeIgniter는 기본적으로 SP사용을 지원하지 않으며 더더욱 한 queryexecute에 여러 resultset이 반환 될 경우 구조적으로 CodeIgniter에서 제공하는 DB Cache를 사용 할 수 없음.)

대안 제시 (Custom Cache)

  • 이에 SP를 주로 사용할 경우 Custom Cache를 만들어 Cache Helper에 등록 필요.
  • URI와 상관 없이 호출 method 및 파라미터 데이터를 통해 캐시를 구분 method 호출 후의 리턴 값을 저장하기 때문에 대부분의 상황에서 DB Cache 대용으로 사용 가능함.
  • 아래 가이드를 참조하여 상황에 맞는 cache를 사용 할 것을 추천함

캐시 사용 가이드

캐시 사용 시 고려사항(공통)

  • 일반적으로 Cache는 자주 변경되지 않으며 서버 혹은 DB에 부하가 예상되는 경우에 사용됨.
  • 만약 자주 변경되는 내용을 캐시 할 경우 캐시 만료기간 동안 해당 변경내용이 적용되지 않는 다는 사실을 염두에 두어야 함
  • 또한, Call by reference 호출 구조의 경우(&$param1 의 형태)에는 cache사용에 따른 side effect가 있을 수 있으며
  • 호출 시 시용되는 URI / 파라미터 이외의 환경에 결과 값이 종속되는 경우(예, 캐쉬 대상 내부 모듈에서 자체적으로 userSession 혹은 cookie 값, 시스템 시간을 참조하는 경우) 원하지 않는 결과 값을 받을 수 있게 됨을 주의해야 함.

Custom Cache

  • 적합한 사용 예
    1. Controller에서 Model 호출 시 결과 값을 캐싱
  • 적합하지 않은 사용 예
    1. CodeIgniter 환경의 class→method 호출이 아닌 일반 function 호출 결과를 cache에 저장하고자 할때(사용 불가)
  • Definition
mixed _cache( array $callPath, array $parameters [, int $timeout=3600] )
  • Parameters
    • callPath : 호출Method 경로 (첫번 째 index값은 object type이어야 함, 주로 $this)
    • parameters : Method 호출 시 파라미터
    • timeout : 캐시 타임아웃 기간, 초 단위 (기본 값 1시간)
  • Return Values
    • Return : 해당 Method 호출 결과 (캐시 존재 시 저장된 캐시 값)
  • 사용 예시
    • 아래 예시와 같이 Controller에서 Model 호출 시 캐시로 전환 할 수 있음 1)
    • Controller→Method 호출이 아니더라도, CodeIgniter환경에서 Class→Method 호출 시 모두 사용 가능 (예 : Controller→Controller 호출, Model→Model 호출 등, 다만 해당 호출 구조는 권장하지 않음)
캐시 적용 전.php
$data['result'] = $this->erp_test_model->get_price_change_history($param1, $param2 );
캐시 적용 후(예시 1).php
$data['result'] = 
    _cache( 
          array($this,"erp_test_model", "get_price_change_history")
        , array($param1, $param2)
    );
캐시 적용 후(예시 2).php
$data['result'] = 
    _cache( 
          array($this,"erp_test_model", "get_price_change_history")
        , array($param1, $param2)
        , 30*60 // timeout을 30분으로 조정
    );

View Cache

  • 적합한 사용 예 (아래 내용에 모두 해당되는 경우)
    1. 사용자의 계정에 상관 없이 동일한 결과값 도출
    2. 페이지 조회 시 별도 파라미터가 필요하지 않음 (ex. 검색 기능 / 페이징 부재)
    3. 혹은 모든 파라미터가 URI Segment로 구현되어 있음 (ex. /user/list/3 )
  • 적합하지 않은 사용 예 (아래 내용 중 하나라도 해당되는 경우)
    1. 사용자 계정의 권한에 따라 결과 값이 다름
    2. 페이지 호출 시 POST / GET 방식의 파라미터를 사용하는 경우

DB Cache

  • 중요 : application/config/database.php 에 캐시 경로가 지정되어 있지 않으면 사용 불가
  • 적합한 사용 예
    1. SP를 사용하지 않는 호출 건
    2. 혹은 SP를 사용하는 경우더라도 SP의 결과 값이 하나이고, 대상 method 안에서복수의 SP 호출 시 주의사항에 명시된 아래의 명령어를 하나도 사용하지 않은 경우
$query->close_result();
$query->next_result();
$query->next_result_array();
  • 적합하지 않은 사용 예 (아래 내용 중 하나라도 해당되는 경우)
    1. SP를 호출하고 있으며 결과 result set이 둘 이상인 경우
    2. 대상 method에서 위에 명시한 명령어 중 하나라도 사용했을 경우
1) 해당 cache 모듈은 helper 모듈로 등록되어 있으며, autoload를 통해 자동 로드가 되기 때문에 해당 cache사용을 위해 controller에서 별도 load혹은 초기화 선언을 할 필요 없음. 모듈 위치 : ./application/helpers/cache_helper.php 참조
tech/codeigniter/01.framework/캐시_사용_관련.txt · 마지막으로 수정됨: 2019/01/09 18:37 (바깥 편집)