NOSQL - redis 그누보드 세션처리,최근게시물 활용으로 속도 향상 > 그누보드5 팁자료실

그누보드5 팁자료실

NOSQL - redis 그누보드 세션처리,최근게시물 활용으로 속도 향상 정보

NOSQL - redis 그누보드 세션처리,최근게시물 활용으로 속도 향상

첨부파일

redis.png (16.5K) 9회 다운로드 2014-07-09 11:42:42
latest.lib.php (7.3K) 88회 다운로드 2014-07-09 11:44:12
latest.skin.php (2.1K) 34회 다운로드 2014-07-09 11:44:12

본문

이번에 소개해 드릴 내용은 VMWARE에서 후원해 주는 인메모리 기반의 NOSQL key-value 저장 데이터베이스를 활용해서 그누보드 기반으로 운영되는 사이트의 응답속도 향상을 위해 작업한 내용을 공유하고자 합니다.

서버에 redis 를 설치해야 하는 환경이므로 단독 서버 호스팅을 이용해 서비스를 운영중인 사이트에 해당되는 내용입니다.

회사 부서 인트라넷 사이트에 적용해서, 큰 규모의 사이트에 적용했을때 얼마만큼의 속도향상이 있을지 저도 궁금합니다.

중규모 이상의 사이트를 운영하는 분들중에서 설치과정이 어려운 분들은 댓글 남겨 주십시요.
직접 적용해보면서 체감 성능이 어느정도 인지 테스트 해보고 싶네요.


그럼 설치과정 부터 활용방법까지 설명드리겠습니다.

1. redis 설치
- Centos 6.4 리눅스 서버에 redis.io 사이트에서 다운받은 redis를 설치하였습니다.
  설치과정은 아래와 같이 간단합니다. 

$ wget http://download.redis.io/releases/redis-2.8.12.tar.gz
$ tar xzf redis-2.8.12.tar.gz
$ cd redis-2.8.12
$ make

 서버에 redis 정상 작동하는지 테스트 해봅니다.
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

2. php 와 redis를 연동하기 위한 모듈 설치
- phpredis, predis 등이 있는데 phpredis 기반으로 설치했습니다.
- phpredis 설치방법은 https://github.com/nicolasff/phpredis 에서 해결했습니다.

- http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=77300 참고


3. php.ini 설정 - 스크린샷 참고
- 세션 핸들러를 redis로 바꿔주었습니다.
session.save_handler = redis
extension=redis.so


4. 그누보드5 세션 처리 변경

common.php 파일을 열어  SESSION 설정 라인을 찾아 세션처리를 바꾸어 줍니다.
@ini_set('session.save_handler', 'redis');
@ini_set('session.save_path',    'tcp://127.0.0.1:6379');

5. 최신글 함수 파일저장 방식에서 인메모리 redis db로 변경하기

그누보드5의 최신글 함수와 redis 최신글 함수의 진행 흐름을 간략히 비교해보겠습니다.

가. 그누보드5 기본 최신글(파일 활용)
- 파일 존재 여부 체크
- 파일 존재 [Y] 시 파일 생성시간과 캐시 시간 비교 후, serialize된 파일을 $list에 담고 캐시시간이 클경우
  파일을 삭제한후,  파일을 새로운 내용으로 다시 캐시를 생성하도록 셋팅해줍니다.
- 파일 존재[N] 시 DB에서 해당내용을 가져와 처리한 후 캐시 생성 체크시 파일에 기록합니다.
- latest.skin 파일을 통해 화면에 출력합니다.

나. redis cache 함수
- redis 서버에 접속 , serialize로 저장되도록 셋팅
- key 의 TTL 값을 통해 key가 있는지 체크 하고 있을경우 key값을 활용해서 value 값을 가져옵니다.
- key가 없을 경우 새로 key를 생성할 수 있도록 구분자를 줍니다.
- DB에서 최신글 데이터를 가져와 $list 처리후 연관배열에 bo_subject와 list를 담아 redis에 저장합니다.
- latest.skin 파일을 통해 화면에 출력합니다.

서로를 비교하자면 파일을 지우고 생성할 필요없이,
redis에서는 생성한 키값이 자동으로 삭제되기 때문에 키 존재 여부 파악만으로 쉽고 빠르게 메모리에 캐시하는 장점이 있습니다.


6. redis를 활용한 기본 베이직 최신글과 그룹최신글 함수를 첨부파일로 올려드립니다.

사용방법은
latest_redis("스킨명","게시판 bo_table값","갯수","제목길이","캐시타임")
gr_latest_redis("스킨명","그룹값","갯수","제목길이","캐시타임") 입니다.


7.스킨 파일 수정

- 그누보드는 게시판 제목인 $bo_subject를 파일에 변수값으로 기록을 남기지만, redis 는 게시판제목을 포함해서 serialize 하게 되어
latest.skin.php내 $bo_subject 을 $list['bo_subject']로 수정해줘야 게시판 제목이 나옵니다.

그리고 $list[$i] 모든 부분을 $list['list'][$i] 로 모두 치환해 줘야 됩니다.

끝으로 첨부파일에 latest.lib.php 함수와 latest.skin.php 를 올려드리겠습니다.


사이트 운영 하는데 큰 도움 되었으면 합니다.


추천
8

댓글 8개

이런건 닥치고 추천입니다! redis로 세션을 관리한다라면
그누보드를 다른 도메인간에 다중으로 관리를 한다면 세션을 공유를 좀더 쉽게 할수 있지 않을까 싶습니다.
맞습니다. 여러대의 서버로 서비스를 하는 곳에서 로그인서버로 활용하는 경우도 있습니다.

이걸 활용한 다양한 팁들이 나올걸로 봤는데, 별 반응이 없네요.

도움을 드리고 싶은데도 나서는 분도 안계시네요
웹서버에 해당 프로그램 설치가 필수적이기 때문에 단독 호스팅이 아닌 경우 웹호스팅사에서 제공하지 않으면 불가능합니다.
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT