PHP5.5부터는 여러분들이 아시다 시피 좋은 캐시가 들어가 있습니다.
opcache.
다만 아직 주요 호스팅에서는 opcache를 사용하는 곳이 없네요...
사실 opcache에 대한 정확한 정보나 서버에 대한 지식이 없습니다. 다만 설정하면 매우 빨라진다는 정도를 알고 있기만 했지요.
php5.6.9에 redis, memcached, xcache 정도 사용해보았고, 이번 서버세팅에서 php5.6.15으로 업데이트하면서 opcache를 사용해봤습니다. 이거에 대해서 여러분들에 작은 지식이나 한번 공유해볼까 합니다.
환경은 XE1, Cetos + apache + nginx 프록시 서버 세팅입니다.
우선 Redis캐시서버에 대해서 알려드리겠습니다. redis는 XpressEngine의 Ajaxboard 모듈에서 웹소켓 서버를 세팅할때 쓰입니다.
해당 redis를 설치하게 되면, 해당 서버내에서 당연히 redis캐시 설정을 사용할 수 있게 됩니다.
다만, 해당 캐시 서버는 XE의 기본값으로 저장되어있지 않기 때문에 아래 링크의 이슈를 확인하시고 코드를 추가 해야합니다.
https://github.com/xpressengine/xe-core/pull/1708/files
자 그럼 제가 기존 세팅에서 Redis, memcached, xcache 를 써본 체감속도로는
memcached>= redis > xcache
였던것 같습니다. 기본 비슷한 반응속도(클릭 이후 응답하여 브라우저의 로딩을 시작할때까지의 시간)은 10ms차이정도로 거의 비슷했으나, memcached가 redis보단 아주 살짝 빨랐던 것으로 보였죠.
Xcache는 정확한 정보는 없지만 아주 오래된 캐시 방식이라고 들었습니다. 그때문에 선입견이엿는지 진짜 체감이였는지 모르겠으나 전체적인 로딩시간까지 합쳐서 느렸던 기억이 얼핏 나네요. 그래서 Xcache는 그이후로 처다도 안봤습니다.(이는 php5.5세팅시절때부터 느꼈던..)
그럼 요즘 말많은 opcache에 대해서 포스팅 해볼까 합니다.
역시 이번에도 opcache에 대한 정보나 그런 것은 잘 모릅니다. 저도 아직 서버의 지식을 쌓아가는 정도만 알아주세요.
opcache가 빠르다고 하는데 이 것이 재대로 활성화 되었을때 엉청난 속도향상을 불러옵니다.
기존에 제 서버에서 memcache를 사용했을때 반응 속도가 300ms정도였습니다. opcache를 적용했더니 150ms정도로 줄어듭니다.
엉청난 차이가 느껴지는거죠.(정확히 2분의1은 아니에요. 서버 반응 속도 대비 비율은 달라질 수 있다는점 명심하시길..)
그래서 심심해서 조합을 해보기 시작합니다.
opcache + memcache = 260ms....
opcache + redis = 260ms....
오히려 느려지더군요.. 아무런 캐시 설정을 하지 않은 XE에서 속도는 기존 300대라고 가정했다면 memcache만 설정하게 되면 10ms정도 줄어든다는 가정에서 memcache는 어느정도 이득이였기 때문에 저번에는 사용했었는데, 이번 opcache를 설정하게 되면서 오히려 조합을 할때 더 느려지는 모습을 보였죠.
왜 이런 현상이 발생했을까요?
기본적으로 memcache나 redis를 XE에서 사용하겠다고 설정하게 되면
files/config/db.config.php 파일에 다음과 같은 내용을 추가 하게 됩니다.
'use_object_cache' => 'redis://127.0.0.1:6379/1',
'use_template_cache' => 'redis://127.0.0.1:6379/2',
'use_object_cache' => 'memcache://127.0.0.1:11211',
'use_template_cache' => 'memcache://127.0.0.1:11211',
redis와 memcache는 서버의 아이피가 들어가게 됩니다.
즉, memcache서버와 통신 redis서버와 통신을 해야하는 겁니다. (그래서 phpredis라는것이 존재하고, memcache도 비슷한 형태가 존재합니다. 서버 자체는 따로 서버단위에 설치 되는거죠..)
즉 제 추측으로는
opcache는 php내에서 모든 작업을 마무리하고 캐시를 설정한다면, memcache, redis는 서버 통신을 주고, 거기서버에 디비를 저장하고 그 디비정보를 거기서버에서 가져오는 방식을 택하고 있는 것 같습니다. 그래서 서버자체와 통신을 해야하는 부분에서 응답속도가 느려지는 것 같더군요.
opcache와 비슷한 방식으로 쓰이는것이 제가 알기론 APC캐시 인데, 이 캐시 역시 마찬가지로 opcache와 비슷한 속도를 보입니다..
여러분들의 서버에는 어떻게 세팅되어있나요? 서로서로 서버정보도 교환해보아요~
무.....무슨... 어..어려워....
결과적으로 opcache를 제대로 사용하려면 memcache를 꺼야한다는 이야기인가욥?
저는 노멀하게.. 기본 값으로... memcache를 사용하고 있습니닷..!
PHP는 5.6.12네요..