워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법

필자는 자체 홈 서버를 활용하여 워드프레스 사이트를 운영 중이다.
오늘은 워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 을 알아보려 한다.
Redis 활용을 위해 Redis Object Cache 플러그인 활용하는 방법을 알아보고자 한다.

워드프레스의 성능 저하는 애드고시 인 AdSense 승인, 트래픽 유입 및 검색엔진 상위 링크에 영향을 준다고 알려져 있다.
성능 개선을 여러가지 factor가 있지만 결국 I/O 개선에 영향을 주는 Cache, 특히 Object Cache, Redis Object Cache 플러그인이
쉽고 지속가능한 개선을 줄 수 있는 factor라 생각한다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법
즉, Redis Object Cache를 활용하는 구성방법은 다음과 같다.

  • docker  서버 구성
  • 플러그인 설치 : Redis Object Cache
  • 워드프레스 자체 설정
  • 워드프레스 확인
  • Redis 설정

필자 서버 환경은 집 돌아다니는 PC 기반으로 홈서버로 구성하여 운영하고 있다.
PC에 linux를 설치하고 docker 기반에  container로 구성 하여 운영 중이다.

Docker 서버 구성

먼저 Redis 서비스를 추가 한 docker-compose.yml 공유 한다.

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
      WORDPRESS_REDIS_HOST: redis
    volumes:
      - wordpress_data:/var/www/html
      - backup_data:/data
    depends_on:
      - db
      - redis

  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_ROOT_PASSWORD: somerootpassword
    volumes:
      - db_data:/var/lib/mysql
      - backup_data:/data

  redis:
    image: redis:latest
    ports:
      - "16379:6379"
    command: ["redis-server", "--requirepass", "somepasswd"]
    volumes:
      - redis_data:/data
      - backup_data:/backup

volumes:
  wordpress_data:
  db_data:
  redis_data:
  backup_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: ./backup

위는  docker-compose.yml은 docker 기반에서 다양한 서버 구성을 스크립트 형태로 간단하게 구성할 수 있는 기법이다.
위 내용은 wordpress, mysql(rdb), redis(in-memeory db)로 구성 되어 있다.
위 스크립트를 실행하면 다음과 같이 출력 된다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / docker-compose 실행 docker ps 해 보면 3개의 container 가 실행 되고 있음을 확인 할 수 있다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / docker ps

위 화면은 간단하게 redis 및 워드프레스 서비스가 잘 올라가 있음을 확인 할 수 있다.



플러그인 설치

플러그인 설치를 위해 왼쪽 메뉴에서 ‘플러그인’을  클릭하여 플러그인 메뉴로 진입한다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / 새 플러그인 추가
왼쪽 상단  ‘새 플러그인 추가’를 클릭하면 다음과 같은 화면이 나온다.
워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / redis object cach 검색

위 화면에서 ‘redis object cache’를 키인 하여 검색한다.
Redis Objec Cache  플러그인이 검색 되면 ‘지금 설치’ 클릭 후 , ‘활성화’를 클릭하여 플러그인을 활성화 시킨다.

플러그인 활성화 이후, 설정 메뉴를 보면 ‘Redis’라는 메뉴가 새로 생성 되었다.
여기를 클릭하면 아직 준비 안되어 있는 상태를 확인 할 수 있다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / redis object cache 초기 상태
여기서 ‘Enable Object Cache’를 클릭하면
다음과 같은 에러 화면이 등장한다.
워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / 초기 설정 에러



위 화면에서 당황하지 마시고 command 창을 열어서 파일 하나를 편집하면 재대로 동작 할 수 있다.

워드프레스 설정

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / objec-cache.php 설정
위와 같이 wordpress 컨테이너에 접속하여 /var/www/html/wp-content/ 디렉토리에
‘object-cache.php’가 생성 되어 있음을 알 수 있다.
이 파일을 열어 가장 마지막라인 이후에,  아래와 같은 스크립트를 추가 한다.

define( 'WP_REDIS_HOST', '10.104.0.2' );
define( 'WP_REDIS_PORT', 16379 );

// change the prefix and database for each site to avoid cache data collisions
define( 'WP_REDIS_PASSWORD', 'somepasswd' );
define( 'WP_REDIS_PREFIX', 'blog' );
define( 'WP_REDIS_DATABASE', 0 ); // 0-15

// reasonable connection and read+write timeouts
define( 'WP_REDIS_TIMEOUT', 1 );
define( 'WP_REDIS_READ_TIMEOUT', 1 );

위  스크립트에서 제일 위 라인은 서버의 내부 IP를 키인하고 저장 한다.
워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / objec-cache.php 수정

저장 하고 다시 브라우저로 돌아온다.

워드프레스 확인

브라우저로 돌아와 리로드하면 위의 에러코드가 다음과 같이 바뀌면 성공이다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / 플러그인 설정 완료
위와 화면에서 이제까지 설정이 성공적으로
잘 연결 되어 Redis Object Cache가 잘 설정 되었음을  알수 있다.
워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / 설정 완료

Redis 추가 설정

다음은 Redis의 성능을 극대화 시킬 수 있는 설정에 대해 정리하고 직접 설정하고자 한다.



  • maxmemory : redis 는 메모리에 disk I/O를 상대적으로 느린 disk에서 메모리에 상주시켜 빠르게 블로그에 접근하는 트래픽에 대응하여 속도를 향상시킨다.
    이를 위해 최대 메모리 사용량을 설정을 위한 블로그 사이즈별로 효율적인 메모리는 다음과 같다.

    1. 소형 사이트
    • 특징: 일일 방문자 수가 적고, 콘텐츠가 많지 않은 개인 블로그나 소규모 비즈니스 웹사이트.
    • 추천 maxmemory 값: 256MB ~ 512MB
    • 설명: 소형 사이트는 캐싱해야 할 데이터가 상대적으로 적기 때문에, 256MB에서 512MB 사이의 메모리로도 충분히 효과를 볼 수 있습니다.
    2. 중형 사이트
    • 특징: 중간 정도의 트래픽을 가진 사이트로, 정기적으로 업데이트되는 콘텐츠와 사용자 활동이 있는 중소기업 웹사이트 또는 인기 있는 블로그.
    • 추천 maxmemory 값: 1GB ~ 2GB
    • 설명: 중형 사이트는 더 많은 데이터를 캐싱해야 하기 때문에, 1GB에서 2GB 사이의 메모리를 설정하는 것이 적절합니다.
    3. 대형 사이트
    • 특징: 일일 방문자 수가 많고, 대량의 콘텐츠와 사용자 활동이 있는 대규모 웹사이트나 인기 포털 사이트.
    • 추천 maxmemory 값: 4GB 이상
    • 설명: 대형 사이트는 매우 많은 양의 데이터를 캐싱해야 하므로, 4GB 이상의 메모리를 설정하는 것이 좋습니다. 필요한 경우 서버의 메모리 용량에 따라 더 높은 값을 설정할 수도 있습니다.
  • maxmemory  설정해 부족할시 처리 정책
    Redis는 메모리 기반 데이터베이스로서, 메모리 관리가 매우 중요합니다. maxmemory 설정을 통해 메모리 사용 한도를 설정한 후, 메모리가 부족할 때 어떻게 처리할지를 결정하는 여러 가지 메모리 정책을 제공합니다. 이 블로그 글에서는 각 메모리 정책의 특징과 사용 시기를 설명하겠습니다.Redis는 다음과 같은 메모리 정책을 제공합니다:

    1. volatile-lru (Least Recently Used)
    • 설명: 만료 시간이 설정된 키 중에서 가장 오랫동안 사용되지 않은 키를 제거합니다.
    • 사용 시기: 캐시된 데이터에 만료 시간이 설정되어 있고, 자주 사용되는 데이터를 유지하고 싶을 때 사용합니다.
    2. allkeys-lru
    • 설명: 모든 키 중에서 가장 오랫동안 사용되지 않은 키를 제거합니다.
    • 사용 시기: 만료 시간이 설정되지 않은 키도 포함해 전체 데이터에서 자주 사용되는 데이터를 유지하고 싶을 때 사용합니다.
    3. volatile-lfu (Least Frequently Used)
    • 설명: 만료 시간이 설정된 키 중에서 가장 덜 자주 사용된 키를 제거합니다.
    • 사용 시기: 사용 빈도가 낮은 데이터를 제거하여 자주 사용되는 데이터를 유지하고 싶을 때 사용합니다.
    4. allkeys-lfu
    • 설명: 모든 키 중에서 가장 덜 자주 사용된 키를 제거합니다.
    • 사용 시기: 전체 데이터에서 사용 빈도가 낮은 데이터를 제거하고 자주 사용되는 데이터를 유지하고 싶을 때 사용합니다.
    5. volatile-ttl (Time to Live)
    • 설명: 만료 시간이 설정된 키 중에서 가장 가까운 만료 시간을 가진 키를 제거합니다.
    • 사용 시기: TTL(Time to Live)이 설정된 데이터가 많은 경우, 자연스럽게 만료되는 키를 먼저 제거하여 메모리를 확보하고 싶을 때 사용합니다.
    6. noeviction
    • 설명: 메모리가 부족할 때 새로운 데이터를 추가하려고 하면 오류를 반환하고, 기존 데이터를 제거하지 않습니다.
    • 사용 시기: 데이터 손실을 절대적으로 피해야 하는 상황에서 사용합니다. 하지만 이 정책을 사용하면 메모리 부족 시 서비스가 중단될 수 있습니다.

이제 직접 설정하는 방법을 다음과 같이 정리한다.
아래 스크립트는 최대 메모리 512MB 와 정책은 2번 allkeys-lru 로 설정 하였다.

sudo docker exec -it wordpress-redis-1 redis-cli -a somepasswd CONFIG SET maxmemory 512mb
sudo docker exec -it wordpress-redis-1 redis-cli -a somepasswd CONFIG SET maxmemory-policy allkeys-lru

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / redis 설정

위는 redis 설정이 정상적으로 수행 된  화면이다.

워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법 / redis object cache 작동

 

오늘은 워드프레스 설치 및 빠른 성능을 위한  Redis 설정 방법을 알아 보았다.
Redis를 통해 홈서버에서도 빠른 성능을 자랑하는 블로그를 만들기를 희망하며
정리 하여 보았다.