필자는 자체 홈 서버를 활용하여 워드프레스 사이트를 운영 중이다.
오늘은 워드프레스 설치 및 빠른 성능을 위한 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)로 구성 되어 있다.
위 스크립트를 실행하면 다음과 같이 출력 된다.
docker ps 해 보면 3개의 container 가 실행 되고 있음을 확인 할 수 있다.
위 화면은 간단하게 redis 및 워드프레스 서비스가 잘 올라가 있음을 확인 할 수 있다.
플러그인 설치
플러그인 설치를 위해 왼쪽 메뉴에서 ‘플러그인’을 클릭하여 플러그인 메뉴로 진입한다.
왼쪽 상단 ‘새 플러그인 추가’를 클릭하면 다음과 같은 화면이 나온다.
위 화면에서 ‘redis object cache’를 키인 하여 검색한다.
Redis Objec Cache 플러그인이 검색 되면 ‘지금 설치’ 클릭 후 , ‘활성화’를 클릭하여 플러그인을 활성화 시킨다.
플러그인 활성화 이후, 설정 메뉴를 보면 ‘Redis’라는 메뉴가 새로 생성 되었다.
여기를 클릭하면 아직 준비 안되어 있는 상태를 확인 할 수 있다.
여기서 ‘Enable Object Cache’를 클릭하면
다음과 같은 에러 화면이 등장한다.
위 화면에서 당황하지 마시고 command 창을 열어서 파일 하나를 편집하면 재대로 동작 할 수 있다.
워드프레스 설정
위와 같이 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 Object Cache가 잘 설정 되었음을 알수 있다.
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를 통해 홈서버에서도 빠른 성능을 자랑하는 블로그를 만들기를 희망하며
정리 하여 보았다.