Tip & Tech

유용한 zigger 기술/활용 팁을 공유해 주세요.

세션 방식을 파일 저장 방식으로 변경 방법(DB 과부하가 발생하는 경우 ) 2022.11.30 09:46:05에 작성

  • 게시글 작성자 zigger
  • 게시글 조회수 573회
zigger는 기본적으로 세션 처리를 DB를 통해 처리합니다.
웹사이트에 방문자가 유입하는 경우 세션을 DB에 기록하고 select, update 처리를 통해 세션 정보를 읽어오게 됩니다.
DB 기록 세션 처리 방식은 파일 저장 방식에 비해 보안에 유리하고 세션DB를 통해 방문자들을 중앙관리 할 수 있는 장점이 있는 반면,
매 페이지 View마다 DB 쿼리가 수행되기 때문에 DB과부하가 발생할 수 있는 단점도 존재합니다.

DB세션 방식이 적합하지 않은 서버 환경에서는 서비스 장애를 유발할 수 있기 때문에
zigger 2.3.7 버전 부터는 세션을 '파일 저장'방식으로 변경할 수 있는 옵션을 제공합니다.
아래는 기본 DB방식에서 파일 저장 방식으로 변경 방법을 안내합니다.


[!]zigger 2.3.7를 신규 설치한 경우[/!]

2.3.7 버전을 신규 설치한 경우 아래와 같이 간단한 옵션 값 변경만으로 DB 처리 방식을 변경할 수 있습니다.



/lib/config.set.php 파일 66 line에서 SET_SESS_FILE 값을 true 로 변경합니다.
session이 저장되는 기본 경로는 /data/sessions 이며, 저장 경로 변경을 원하는 경우



26 line 의 PH_SESSION_FILE_PATH 옵션에서 경로를 변경합니다.
보안 강화를 위해 session 저장 디렉토리를 웹에서 접근 불가한 로컬 경로로 지정할 수 있는데, 이 때
저장 경로의 퍼미션에 쓰기 권한이 부여되어야 합니다.


[!]zigger 2.3.6이하 버전이 설치되어 있는 경우 DB 전환 옵션 추가[/!]

2.3.6 이하의 zigger가 설치되어 있는 경우 DB 전환 옵션 추가 방법을 안내합니다.
위 1을 참고하여 /lib/config.set 파일에 PH_SESSION_FILE_PATH 와 SET_SESS_FILE 상수를 추가한 다음



/lib/session.class.php 파일을 열어 171 line 부터 아래 코드로 변경합니다.
 
if (SET_SESS_FILE !== true) {
    $sess_init = new SessionHandler();
    session_set_save_handler(
        array($sess_init, 'open'),
        array($sess_init, 'close'),
        array($sess_init, 'read'),
        array($sess_init, 'write'),
        array($sess_init, 'destroy'),
        array($sess_init, 'gc')
    );

} else {
    if (!is_dir(PH_SESSION_FILE_PATH)) {
        @mkdir(PH_SESSION_FILE_PATH, 0707);
        @chmod(PH_SESSION_FILE_PATH, 0707);
    }
    session_save_path(PH_SESSION_FILE_PATH);
}


if (ini_get('session.auto_start') != 1) {
    session_start();
}