워드프레스 Redis Cache 사용하기 - WordPress Redis Plugin

Share

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)를 제공합니다.

[Redis Data Structures]

- 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 의  비 관계형 데이터베이스를 활용한 내용에 대해서 확인 해보았습니다.


연관된 다른 글

 

 

 

 

            

4
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x