안녕하세요! 
지난 포스팅에서 Oracle Linux에 워드프레스를 설치하고 기본 구성하는 방법을 알아보았는데요. 이번에는 더 나아가서 실제 운영에 필요한 성능 최적화, 모니터링, 보안 강화 방법을 자세히 살펴보도록 하겠습니다.
많은 분들이 워드프레스 설치 후 실제 운영 단계에서 어려움을 겪으시는데요, 이번 포스팅에서는 제가 실제 현장에서 경험한 다양한 최적화 기법과 문제 해결 방법을 공유해드리도록 하겠습니다.
이번 포스팅에서 다룰 내용
이번에는 실제 운영에 초점을 맞춰 다음 내용들을 자세히 살펴보겠습니다:
•
워드프레스 성능 최적화
◦
Apache, PHP, MySQL 최적화
◦
캐시 설정과 이미지 최적화
•
실시간 모니터링 시스템 구축
•
보안 강화 및 백업 전략
•
실전 운영 팁과 트러블슈팅
1. 워드프레스 성능 최적화
Apache 성능 최적화
Apache의 프로세스 관리 방식을 최적화하면 더 많은 동시 접속을 처리할 수 있습니다.
sudo vi /etc/httpd/conf.modules.d/00-mpm.conf
Shell
복사
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
Plain Text
복사
•
StartServers: 시작 시 생성할 프로세스 수 (서버 메모리에 따라 조정)
•
ThreadsPerChild: 프로세스당 스레드 수 (CPU 코어 수 고려)
•
MaxRequestWorkers: 동시 처리 가능한 최대 요청 수
sudo vi /etc/httpd/conf.d/cache.conf
Shell
복사
# 브라우저 캐시 설정
<IfModule mod_expires.c>
ExpiresActive On
# 이미지 파일 (1년)
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
# CSS, JS 파일 (1개월)
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
# 기본값 (1주일)
ExpiresDefault "access plus 1 week"
</IfModule>
# GZIP 압축 설정
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/html text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
AddOutputFilterByType DEFLATE application/xml application/json
# 이미지는 이미 압축되어 있으므로 제외
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
</IfModule>
Plain Text
복사
PHP 성능 최적화
OPcache를 활성화하면 PHP 스크립트 실행 속도가 크게 향상됩니다.
sudo vi /etc/php.d/10-opcache.ini
Shell
복사
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
opcache.validate_timestamps=1
opcache.save_comments=1
opcache.fast_shutdown=1
Plain Text
복사
sudo vi /etc/php-fpm.d/www.conf
Shell
복사
[www]
user = apache
group = apache
; Unix 소켓 사용
listen = /var/run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660
; 프로세스 관리 설정
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
Plain Text
복사
MySQL HeatWave 성능 최적화
-- 자주 사용되는 쿼리 분석
EXPLAIN SELECT * FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish';
-- 필요한 인덱스 생성
CREATE INDEX idx_post_type_status
ON wp_posts(post_type, post_status);
-- 불필요한 데이터 정리
DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_options
WHERE autoload = 'yes' AND option_value LIKE '%old%';
SQL
복사
// 데이터베이스 쿼리 최적화
define('SAVEQUERIES', false);
// 자동 저장 주기 조정
define('AUTOSAVE_INTERVAL', 300);
// 리비전 제한
define('WP_POST_REVISIONS', 5);
// 휴지통 비우기 주기
define('EMPTY_TRASH_DAYS', 7);
PHP
복사
2. 실시간 모니터링 시스템 구축
시스템 모니터링
# 모니터링 도구 설치
sudo dnf install sysstat iotop htop -y
# sysstat 서비스 활성화
sudo systemctl enable sysstat
sudo systemctl start sysstat
Shell
복사
sudo vi /usr/local/bin/wordpress-monitor.sh
Shell
복사
#!/bin/bash
LOG_FILE="/var/log/wordpress/monitor.log"
echo "=== 워드프레스 모니터링 $(date) ===" >> $LOG_FILE
# 시스템 부하 확인
uptime >> $LOG_FILE
# 메모리 사용량
free -h >> $LOG_FILE
# 디스크 사용량
df -h /var/www/html >> $LOG_FILE
# Apache 프로세스
ps aux | grep httpd | grep -v grep >> $LOG_FILE
# PHP-FPM 상태
systemctl status php-fpm | grep "Active:" >> $LOG_FILE
# MySQL 연결 테스트
mysql -h [MySQL_HeatWave_엔드포인트] -u wordpress_user -p'password' \
-e "SELECT 1;" &>/dev/null && \
echo "데이터베이스 연결: 정상" >> $LOG_FILE || \
echo "데이터베이스 연결: 실패" >> $LOG_FILE
Shell
복사
# 디스크 공간 부족 알림
if [ $(df /var/www/html | awk 'NR==2 {print $5}' | sed 's/%//') -gt 80 ]; then
echo "디스크 공간 부족 경고" | mail -s "워드프레스 서버 알림" admin@example.com
fi
# 메모리 부족 알림
if [ $(free | awk '/Mem:/ {print $3/$2 * 100.0}') -gt 90 ]; then
echo "메모리 사용량 경고" | mail -s "워드프레스 서버 알림" admin@example.com
fi
Shell
복사
로그 모니터링
# 로그 디렉토리 생성
sudo mkdir -p /var/log/wordpress
sudo chown -R apache:apache /var/log/wordpress
# 로그 순환 설정
sudo vi /etc/logrotate.d/wordpress
Shell
복사
/var/log/wordpress/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 apache apache
sharedscripts
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
Plain Text
복사
3. 보안 강화
워드프레스 보안 설정
Wordfence는 무료 버전으로도 강력한 보안 기능을 제공합니다.
주요 설정 항목:
•
실시간 트래픽 모니터링 활성화
•
로그인 시도 제한 설정
•
악성코드 스캔 일정 설정
•
방화벽 규칙 설정
// 파일 직접 수정 비활성화
define('DISALLOW_FILE_EDIT', true);
// 보안 키 설정
define('AUTH_KEY', 'unique-value-here');
define('SECURE_AUTH_KEY', 'unique-value-here');
define('LOGGED_IN_KEY', 'unique-value-here');
define('NONCE_KEY', 'unique-value-here');
PHP
복사
# 파일 권한 설정
find /var/www/html/wordpress -type d -exec chmod 755 {} \;
find /var/www/html/wordpress -type f -exec chmod 644 {} \;
# 특수 파일 권한 설정
chmod 440 /var/www/html/wordpress/wp-config.php
chmod 750 /var/www/html/wordpress/wp-content/uploads
Shell
복사
자동 백업 설정
sudo vi /usr/local/bin/backup-wordpress.sh
Shell
복사
#!/bin/bash
# 백업 디렉토리 설정
BACKUP_DIR="/backup/wordpress"
DATE=$(date +%Y%m%d)
# 데이터베이스 백업
mysqldump -h [MySQL_HeatWave_엔드포인트] \
-u wordpress_user -p'password' wordpress_db > \
"$BACKUP_DIR/db_backup_$DATE.sql"
# 파일 백업
tar -czf "$BACKUP_DIR/files_backup_$DATE.tar.gz" \
/var/www/html/wordpress
# 오래된 백업 삭제 (30일)
find $BACKUP_DIR -mtime +30 -delete
Shell
복사
# OCI CLI 설치
sudo dnf install python36-oci-cli -y
# 백업 파일 업로드
oci os object put --bucket-name "wordpress-backup" \
--file "$BACKUP_DIR/db_backup_$DATE.sql" \
--name "db_backup_$DATE.sql"
Shell
복사
4. 성능 모니터링 및 최적화 팁
성능 측정
# ab 도구 설치
sudo dnf install httpd-tools -y
# 성능 테스트 실행
ab -n 1000 -c 100 http://[워드프레스_도메인]/
Shell
복사
# XHProf 설치
sudo dnf install php-xhprof -y
# PHP 설정에 추가
xhprof.output_dir = /var/tmp/xhprof
Shell
복사
성능 최적화 팁
# 이미지 최적화 도구 설치
sudo dnf install ImageMagick -y
# 이미지 일괄 최적화
find /var/www/html/wordpress/wp-content/uploads -type f \
\( -name "*.jpg" -o -name "*.png" \) \
-exec convert {} -quality 85 {} \;
Shell
복사
// wp-config.php에 추가
define('WP_CACHE', true);
// Redis 설치 및 설정
sudo dnf install redis -y
sudo systemctl start redis
sudo systemctl enable redis
PHP
복사
5. 트러블슈팅 가이드
자주 발생하는 문제와 해결 방법
# PHP-FPM 로그 확인
sudo tail -f /var/log/php-fpm/error.log
# PHP-FPM 재시작
sudo systemctl restart php-fpm
Shell
복사
일반적으로 PHP 오류나 메모리 부족으로 발생합니다.
# PHP 오류 로그 확인
sudo tail -f /var/log/php_errors.log
# PHP 메모리 제한 증가
sudo vi /etc/php.ini
Shell
복사
; PHP 메모리 제한 증가
memory_limit = 256M
Plain Text
복사
# MySQL 연결 테스트
mysql -h [MySQL_HeatWave_엔드포인트] -u wordpress_user -p -e "SELECT 1;"
# 방화벽 규칙 확인
sudo firewall-cmd --list-all
# SELinux 설정 확인
sudo getsebool -a | grep httpd
Shell
복사
운영 체크리스트
매일 확인해야 할 항목들:
1.
시스템 상태 확인
•
디스크 사용량
•
메모리 사용량
•
CPU 부하
•
프로세스 상태
2.
보안 점검
•
로그인 시도 기록
•
파일 변경 사항
•
악성코드 스캔 결과
•
백업 상태
3.
성능 모니터링
•
페이지 로드 시간
•
PHP 프로세스 상태
•
데이터베이스 연결
•
캐시 히트율
마치며
지금까지 Oracle Linux 환경에서 워드프레스의 성능 최적화와 모니터링 방법에 대해 알아보았습니다. 이러한 설정들은 한 번에 완벽하게 구성하기는 어렵습니다. 서버의 상황과 트래픽 패턴을 지속적으로 모니터링하면서 조금씩 최적화해 나가는 것이 좋습니다.
특히 보안 설정은 한 번 설정하고 끝나는 것이 아니라, 지속적인 관리와 업데이트가 필요한 부분입니다. 정기적으로 보안 업데이트를 확인하고, 로그를 모니터링하면서 잠재적인 위험 요소들을 사전에 파악하고 대응하는 것이 중요합니다.
