Univ Admissions
추천전형

OCI Free Tier로 워드프레스 블로그 만들기 - (5) Oracle Linux 워드프레스 성능 최적화와 모니터링: 운영편

안녕하세요!
지난 포스팅에서 Oracle Linux에 워드프레스를 설치하고 기본 구성하는 방법을 알아보았는데요. 이번에는 더 나아가서 실제 운영에 필요한 성능 최적화, 모니터링, 보안 강화 방법을 자세히 살펴보도록 하겠습니다.
많은 분들이 워드프레스 설치 후 실제 운영 단계에서 어려움을 겪으시는데요, 이번 포스팅에서는 제가 실제 현장에서 경험한 다양한 최적화 기법과 문제 해결 방법을 공유해드리도록 하겠습니다.

이번 포스팅에서 다룰 내용

이번에는 실제 운영에 초점을 맞춰 다음 내용들을 자세히 살펴보겠습니다:
워드프레스 성능 최적화
Apache, PHP, MySQL 최적화
캐시 설정과 이미지 최적화
실시간 모니터링 시스템 구축
보안 강화 및 백업 전략
실전 운영 팁과 트러블슈팅

1. 워드프레스 성능 최적화

Apache 성능 최적화

 MPM Event 모듈 설정
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 성능 최적화

 PHP OPcache 설정
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
복사
 PHP-FPM 설정 최적화
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
복사
 wp-config.php 설정 최적화
// 데이터베이스 쿼리 최적화 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 Security 설치 및 설정
Wordfence는 무료 버전으로도 강력한 보안 기능을 제공합니다.
주요 설정 항목:
실시간 트래픽 모니터링 활성화
로그인 시도 제한 설정
악성코드 스캔 일정 설정
방화벽 규칙 설정
 wp-config.php 보안 설정
// 파일 직접 수정 비활성화 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
복사
 Object Storage 연동 백업
# 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. 성능 모니터링 및 최적화 팁

성능 측정

 Apache 벤치마크 테스트
# ab 도구 설치 sudo dnf install httpd-tools -y # 성능 테스트 실행 ab -n 1000 -c 100 http://[워드프레스_도메인]/
Shell
복사
 PHP 성능 프로파일링
# 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. 트러블슈팅 가이드

자주 발생하는 문제와 해결 방법

 502 Bad Gateway 오류
# 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 환경에서 워드프레스의 성능 최적화와 모니터링 방법에 대해 알아보았습니다. 이러한 설정들은 한 번에 완벽하게 구성하기는 어렵습니다. 서버의 상황과 트래픽 패턴을 지속적으로 모니터링하면서 조금씩 최적화해 나가는 것이 좋습니다.
특히 보안 설정은 한 번 설정하고 끝나는 것이 아니라, 지속적인 관리와 업데이트가 필요한 부분입니다. 정기적으로 보안 업데이트를 확인하고, 로그를 모니터링하면서 잠재적인 위험 요소들을 사전에 파악하고 대응하는 것이 중요합니다.