Last Updated on 12월 21, 2022 by Jade(정현호)
안녕하세요.
이번 글은 오랜만에 워드프레스에 관한 글로, 워드프레스의 다양한 플러그인 중에서 Redis 를 사용한 Cache 플러그인에 관한 내용을 확인 해보려고 합니다.
Redis 란
Redis 는 Remote Dictionary Server 약자로 인 메모리 데이터 저장소로 이며, 분산형 인 메모리의 Key-Value(키 값) 구조의 오픈 소스 기반의 비 관계형 데이터베이스 입니다.
Redis 는 다양한 인 메모리 데이터 구조(collection) 집합을 제공 하므로 다양한 사용자 정의 애플리케이션을 손쉽게 사용할 수 있습니다.
Redis 주로 데이터베이스, 캐싱, 세션 관리, message broker 서비스로 stream 와 Pub/Sub 및 랭킹 서비스(Ranking Board), 대기열(queue) 등의 기능으로 사용하고 있습니다.
Redis는 현재 가장 인기 있는 인메모리 Key-Value(키 값) 데이터 스토어로서, BSD 라이선스 이며, 최적화된 C 코드로 작성 되었으며, 다양한 개발 언어를 지원합니다
Redis에서는 다양한 데이터 구조(Data Structures/Collection)를 제공합니다.
- Strings / Lists / Sets
- Sorted Sets / Hashes
- Bitmaps / Bit filed /HyperLogLogs
- Streams / Geospatial
다양한 데이터 구조를 지원하는 덕에 Redis는 여러가지 용도로 사용 하며, 이런 다양한 데이터 구조를 지원 되는 것이 Memcached 와의 차이점 이기도 합니다.
Redis는 운영 효율화 및 운영 안정성 면에서 Replication 외 추가적으로 고가용성을 위한 Sentinel 과 확장을 위한 Cluster 를 자체적으로 지원하고 있기 때문에 확장성 과 문제 발생시 장애조치 면에서도 장점이라고 할 수 있습니다.
Redis 설치
Redis 는 단독형(Standalone) 유형으로 패키지 시스템으로 설치를 간단하게 할 수 있으며, 워드프레스와 같은 서버에서 설치를 하게 되면 별도의 설정 변경 없이 바로 사용할 수 있습니다.
포스팅에서는 CentOS/RHEL 계열 7 버전 또는 Ubuntu(우분투) 20.04 기준으로 설치하는 방법에 대해서 설명 드리도록 하겠습니다.
CentOS/RHEL 7 기준
sudo yum install epel-release yum-utils ca-certificates sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm sudo yum-config-manager --enable remi sudo yum install redis redis-devel sudo systemctl enable redis sudo systemctl restart redis
Ubuntu(우분투)
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list sudo apt-get update sudo apt install redis redis-server sudo systemctl enable redis-server sudo systemctl restart redis-server
Redis 에 추가적인 구성 정보나 Redis 에 대한 추가 정보는 아래 포스팅을 참조하시면 됩니다.
Plugin - Redis Object Cache
Redis 를 활용할 수 있는 워드프레스의 플러그인은 몇 가지 있으며 포스팅에서는 가장 많이 사용 되는 Redis Object Cache 플러그인을 사용하였습니다.
플러그인 정보는 아래와 같습니다
- 필요한 워드프레스 버전: 3.3 또는 이상
- 호환되는 버전: 5.9.2
- PHP 버전 요구사항: 5.6 또는 이상
- 활성 설치: 100,000+
플러그인 설치
플러그인 설치는 워드프레스 내에 플러그인 -> 추가 메뉴를 통해서 설치 할 수 있습니다
키워드 검색에서 "redis" 를 검색하면 가장 많은 설치를 한 플러그인으로 확인 할 수 있습니다
또는 아래 링크에서 직접 다운로드 받으실 수 있습니다.
PHP Redis 클라이언트 설치
Redis 는 구성 방식에 따라서 단일, 복제(Replication,Master-Replica), Sentinel(HA), 클러스터(샤딩,확장) 등으로 구분할 수 있습니다.
Redis 를 1개만 설치한 단일(Standalone) 일 경우 위에서 설치한 플러그인으로 접속 할 수 있습니다.
그외 Replication 이나 Sentinel, Cluster 로 구성되어 있을 경우 그 기능을 지원하는 적절한 드라이버 또는 클라이언트가 필요 합니다.
포스팅 시스템에서는 Sentinel 로 구성되어서 PHP Redis 클라이언트를 설치 하였습니다.
만약 Redis 를 단독으로 설치한 환경에서는 해당 단계를 Skip 하셔도 됩니다.
설치를 해야하는 클라이언트는 Predis 입니다.
클라이언트를 설치하는 방법은 여러가지가 있으며 포스팅에서는 PHP Composer 를 통해서 설치를 하였습니다.
Composer 설치
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer
Predis 설치
sudo /usrlocal/bin/composer require predis/predis
predis 의 새로운 버전이 나왔을 경우 업그레이드도 위의 명령어로 동일하게 수행하면 업그레이드 됩니다.
워드프레스 설정
모든 설치가 완료 되었다면 워드프레스의 파일 중에서 wp-config.php 파일에 Redis 연결과 관련된 정보를 추가 해줘야 합니다.
Redis 가 단독(Standalone) 일 경우 아래 링크를 참조하시면 됩니다.
redis-cache/Connection-Parameters
워드프레스와 Redis 를 같은 서버에서 실행 중이면서 포트 등의 정보를 변경하지 않았다면 접속시 기본값으로 접속 함으로 별다른 설정없이도 바로 접속 될 수 있습니다.
같은 서버에서 Redis 단독서버로 설치 하였을 경우 워드프레스의 Redis Object Cache 플러그인에서 "Enable Object Cache" 를 클릭 해서 활성화 해서 접속이 되는지를 먼저 확인 해봐도 좋을것 같습니다
Redis 가 Replication , Sentinel , Cluster 구성이라면 아래 링크를 참조하시면 됩니다.
redis-cache/Replication-&-Clustering
포스팅에서는 Sentinel 구성이라서 아래와 같이 wp-config.php 파일에 내용을 입력 하였습니다.
define( 'WP_REDIS_PASSWORD', '마스터패스워드' ); define( 'WP_REDIS_TIMEOUT', 1 ); define( 'WP_REDIS_READ_TIMEOUT', 1 ); define( 'WP_REDIS_DATABASE', 0 ); define( 'WP_REDIS_CLIENT', 'predis' ); define( 'WP_REDIS_SENTINEL', '마스터 서버이름' ); define( 'WP_REDIS_SERVERS', [ 'tcp://센티넬1-IP주소:26379', 'tcp://센티넬1-IP주소:26379', 'tcp://센티넬1-IP주소:26379', ] );
워드프레스 어드민 페이지 -> 설정 -> Redis 로 이동합니다.
화면 과 같이 "Enable Object Cache" 를 클릭 합니다
Enable 하였을 때 위에서 입력한 IP 나 비밀번호 등의 정보가 모두 맞아서 접속이 가능하다면 아래와 같이 접속이 된 상태 내역을 확인 할 수 있습니다.
활성화 후 시간이 조금 지나면 여러 정보가 수집이 되며, 아래와 같이 사용에 관한 정보를 확인 할 수 있습니다.
위에서 보이는 그래프는 기본 1시간 정보가 표시 됩니다.
조금더 긴 시간의 데이터 그래프를 보기를 원하신다면 워드프레스에 wp-config.php 파일에서 아래와 같이 metrix max time 값을 설정하시면 됩니다
## 3시간으로 설정한 예시 define( 'WP_REDIS_METRICS_MAX_TIME',10800);
그럼 속도는 얼마나 빨라질까요? 사실 페이지에서 이미지가 많은지 적은지, 그리고 페이지 접속 과정에서 외부 참조(폰트 등) 할 것이 많은 지에 따라서 속도 개선의 비중은 차이가 나게 됩니다.
그렇기 때문에 개선에 대한 부분은 각각의 시스템이나 사이트의 상황에 따라서 다를 수 밖에 없습니다.
속도 측정은 Pingdom Website Speed Test 에서 진행 하였습니다.
- Redis 플러그인 적용전
- Redis 플러그인 적용후
블로그 사이트에서 이미지가 적지 않게 있으며, 외부 참조 요건이 있다보니 원래 빠른 편은 아니며, Cache 로 활용이 많이 될 만한 요소가 많지는 않아서 인지 수치상으로는 드라마틱한 개선 까지는 아닌 것으로 확인되지만, 사용해보는 입장에서는 어느정도 체감이 되는 것 같다고 느껴 집니다.
여분의 서버가 있고 Redis 를 사용하는 데 큰 무리가 없기 때문에 포스팅 시스템에서는 사용을 하려고 합니다.
여기까지 해서 Redis 라는 메모리 캐시 기반의 Key-Value 의 비 관계형 데이터베이스를 활용한 내용에 대해서 확인 해보았습니다.
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io
좋은글 잘 읽었습니다.
캐쉬를 적용하는게 좋을까 막현히 궁금했었는데
드라마틱한 속도 향상이 없을것 같다는 결론에
마음의 평화를 얻었습니다.
그런데 게시글과 약간 상관이 없지만 게시글 중에 내용이 나타나서 질문드립니다.
상단에
Reading Time 4 min
이라고 나오는것은 워드프레스 플러그인을 설치 하신것인가요?
아니면 직접 개발하신것인지 궁금합니다.
안녕하세요
보신 기능은 플러그인 입니다.
Read Meter - Reading Time & Progress Bar for WordPress.
https://wordpress.org/plugins/read-meter
감사합니다 좋은 하루 되세요
좋은 글 감사합니다.
참, 혹시 여러 도메인을 하나의 웹서버에서 가동하면 같은 키가 충돌하지 않을까요?
혹시 a, b, c, d..도메인이 각기 다른 prefix로 redis 메모리 공간에서 운영되도록 하는 것도 가능할까요?
안녕하세요
plugin config 문서를 보시면 몇 가지 사용할 수 있는 옵션을 확인할 수 있습니다.
그 중에서 "WP_REDIS_DATABASE" 나 "WP_REDIS_PREFIX" 옵션을 사용하시면 생각하시는 여러 wordpress 를 같이 사용하실수 있을것으로 생각됩니다.
감사합니다.
https://github.com/rhubarbgroup/redis-cache/#configuration