개발자의 하루

memcached 윈도우 설치 및 세션공유 본문

Client

memcached 윈도우 설치 및 세션공유

단독질주 2017. 6. 8. 19:35
반응형



일반적으로 php에서 세션은 파일로 많이 사용하십니다.


하지만 웹 서버가 2대 이상일경우 로그인이 풀리는 문제가 발생될 수 있습니다.

A서버에서 로그인을 해서 세션을 얻었는데 B서버로 페이지 이동을 하면 바로 세션이 풀리면서 로그아웃이 되는 것이죠.

(물론 A서버 B서버 동일한 도메인 또는 서브도메인이어야 세션이 공유 가능합니다.)


이런 경우 일명 세션 공유라고 세션폴더를 공유 형태로 유지하거나

rsync 등을 사용해서 세션 동기화를 하거나

DB를 이용하는 등 다양한 방법으로 세션을 유지하여 로그인 상태를 유지합니다.


물론 보안에 매우 취약한 쿠키를 이용하면 로그인은 유지 되겠지만 설마 쿠키로 로그인을 하진 않으시겠죠!


그외 일명 세션서버를 두어 세션을 관리하는 방법도 있습니다.

세션 서버는 memcached나 Redis 등을 많이 사용됩니다.


리눅스에서는 YUM을 통해 쉽게 memcached 설치가 가능하지만 윈도우에서는 어렵진 않지만 꽤 귀찮게 설치를 해야 됩니다.



memcached 설치

먼저 memcached 데몬을 다운 받습니다.

소스 형태로는 많이 존재하는데 윈도우용 데몬파일은 잘 보이질 않아 첨부합니다.


memcached-1.2.4-win32.zip

memcached-1.2.5-win32.zip

memcached-1.2.6-win32.zip


memcached-win32-1.4.4-14.zip

memcached-win64-1.4.4-14.zip


memcached-1.4.5-amd64.zip

memcached-1.4.5-win64.zip

memcached-1.4.5-x86.zip


구글링해서 받으시거나 첨부된 파일로 받으시면 됩니다.


memcached 버전에 따라 설치 방식이 조금 다릅니다.

memcached 1.4.5이상

c:\> schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"

서비스로 등록되지 않고 작업 스케줄러로 등록하셔야 됩니다.


c:\> schtasks /delete /tn memcached

작업스케줄러에서 직접 지우거나 cmd창에서 지울수 있습니다.


memcached 1.4.5 미만

c:\> c:\memcached\memcached.exe -d install

c:\> c:\memcached\memcached.exe" -d runservice -m 512

서비스로 등록하고 환경설정을 해주시면 됩니다.

레지스트리에서도 변경 가능합니다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached


c:\> c:\memcached\memcached.exe -d start

cmd 창에서 서비스를 시작하거나 제어판-관리도구-서비스에서 시작 중지 등이 가능합니다.


c:\> c:\memcached\memcached.exe -d uninstall

서비스 제거



memcached가 정삭 동작하면

C:\>netstat -an


 프로토콜  로컬 주소           외부 주소              상태

...

  TCP    0.0.0.0:11211          0.0.0.0:0              LISTENING

...

  TCP    [::]:11211             [::]:0                 LISTENING

...

  UDP    0.0.0.0:11211          *:*

..

  UDP    [::]:11211             *:*


memcached 기본포트인 11211 포트가 정상적으로 열린것을 확인 가능합니다.



memcache 연동

memcache 연동은 자신의 윈도우 환경에 맞은 php_memcache.dll 파일을 구하면 됩니다.


https://pecl.php.net/package/memcache


PECL(PHP Extension Community Library)에서 memcache 윈도우용 DLL를 찾습니다.



자신의 서버 환경에 맞는 파일을 다운 받습니다.

해당되는 버전이 없다면 이 글의 하단부분을 참고하세요.


다운로드 한 파일을 압축을 풀어 php_memcache.dll 파일을 PHP extension 폴더에 복사합니다.


php환경파일인 php.ini를 열어 맨 하단에 아래 줄을 추가하고

[MemCache]

extension=php_memcache.dll


세션을 memcach로 사용하기 위해 기존 세션 설정을 변경합니다.

;session.save_handler = files

;session.save_path = "c:/temp/"


session.save_handler = memcache

session.save_path = "tcp://localhost:11211?persistent=1"

기존 session.save_handler와 session.save_path는 주석처리 해주시고 새롭운 설정을 위와 같이 추가합니다.


설정이 모두 끝나면 웹서버를 재시작하고

<?php

phpinfo();

?>

phpinfo로 확인합니다.


memcache가 정상적으로 로드 되었습니다.



세션 부분이 memcache로 변경되었습니다.



웹서버가 A(1.1.1.1), B(1.1.1.2), C(1.1.1.3) 3대 있고 A(1.1.1.1)에 memcached 데몬이 있다면

각각의 세션 저장 부분을 모두 A로 지정하면 3대의 서버에서 쉽게 세션 공유됩니다.

A 서버

session.save_handler = memcache

session.save_path = "tcp://1.1.1.1:11211?persistent=1"


B 서버

session.save_handler = memcache

session.save_path = "tcp://1.1.1.1:11211?persistent=1"


C서버

session.save_handler = memcache

session.save_path = "tcp://1.1.1.1:11211?persistent=1"



PECL사이트에서 자신에게 맞는 PHP 버전이 없다면 아래 URL에서
자신에게 맞는 php 버전을 찾으시고 Collection of PECL modules for PHP x.x.x 파일을 받으시면 됩니다.


PHP v.7.x.x는 아래 URL을 참조하세요

https://github.com/nono303/PHP7-memcache-dll




[ 추가 2017.06.09 ]  PECL 사이트의 php 5.3 버전은 오늘자로 5.3.27 이고 5.3.5에서는 작동되지 않습니다. 결국 php 버전은 5.3.27로 올리고 설정완료.





반응형