워드프레스 웹사이트를 안정적으로 운영하기 위해서는 정기적인 백업과 체계적인 유지보수가 필수적입니다. 이번 주차에서는 데이터 손실 방지를 위한 백업 전략, 보안 강화 방법, 그리고 효율적인 유지보수 방안을 알아보겠습니다.
8주차: 백업 및 유지보수 전략
자동 백업 스크립트 작성과 cron 작업 설정
장애 발생 시 복구 전략 (phpMyAdmin, MySQL 명령어 활용)
워드프레스 업데이트 관리와 유지보수 팁
보안 강화 플러그인 활용 (Wordfence Security 등)
1. 자동 백업 시스템 구축
1-1 백업 플러그인 설치 및 설정
UpdraftPlus 설정:
플러그인 > 새로 추가 > “UpdraftPlus” 검색 및 설치
활성화 후 설정:
백업 주기 설정: 파일은 주간, 데이터베이스는 일간 백업 권장
보관할 백업 수 설정: 최소 3개 이상 유지
백업 저장 위치 설정: 클라우드 스토리지 연동 (Google Drive, Dropbox 등)
자동 백업 테스트 실행
백업 설정 팁:
백업 파일에 날짜 포함
핵심 테이블만 선택하여 데이터베이스 백업 용량 절약
미디어 파일이 많은 경우 별도 일정으로 백업
2. 서버 레벨 백업 스크립트 구성
백업 플러그인과 별개로 서버 레벨에서 추가 백업을 구성합니다:
# 백업 디렉토리 생성
sudo mkdir -p /var/backups/wordpress
♦ 다음 내용으로 스크립트 작성
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/var/backups/wordpress"
WP_DIR="/var/www/html"
DB_USER="wpuser"
DB_PASS="your_db_password"
DB_NAME="wordpress"# 오래된 백업 삭제 (14일 이상)
find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +14 -delete
find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +14 -delete
# 파일 백업
tar -czf $BACKUP_DIR/wordpress-files-$DATE.tar.gz $WP_DIR# 데이터베이스 백업
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/wordpress-db-$DATE.sql.gz# 백업 파일 권한 설정
chmod 600 $BACKUP_DIR/wordpress-files-$DATE.tar.gz
chmod 600 $BACKUP_DIR/wordpress-db-$DATE.sql.gz# 백업 성공 로그
echo "Backup completed on $DATE" >> $BACKUP_DIR/backup_log.txt
♦ 스크립트 실행 권한 설정 및 cron 작업 추가
sudo chmod +x /usr/local/bin/backup_wordpress.sh
# crontab에 주간 백업 작업 추가
sudo crontab -e
다음 라인 추가 (매주 일요일 새벽 3시에 실행):
0 3 * * 0 /usr/local/bin/backup_wordpress.sh
3. 백업 파일 외부 저장소 동기화
로컬 백업을 외부 스토리지와 자동 동기화:
# rclone 설치 (클라우드 스토리지 동기화 도구)
sudo apt install rclone -y# rclone 설정 (최초 1회 필요)
rclone config
# 동기화 스크립트 생성sudo nano /usr/local/bin/sync_backups.sh
스크립트 내용
#!/bin/bash
# Google Drive 등의 스토리지로 백업 폴더 동기화
rclone sync /var/backups/wordpress gdrive:wordpress-backups
스크립트 권한 설정 및 cron 작업 추가:
sudo chmod +x /usr/local/bin/sync_backups.sh
# crontab에 일일 동기화 작업 추가
sudo crontab -e
다음 라인 추가 (매일 오전 5시에 실행):
0 5 * * * /usr/local/bin/sync_backups.sh
2. 복구 전략 수립
2-1. 백업에서 복원하는 방법
UpdraftPlus를 사용한 복원:
워드프레스 관리자 대시보드 > UpdraftPlus > 백업 복원
복원할 백업 선택 > 복원 버튼 클릭
복원 옵션 선택 (데이터베이스, 플러그인, 테마, 업로드 등)
복원 과정 모니터링
수동 복원 절차:
데이터베이스 복원:
# 데이터베이스 백업 파일 압축 해제
gunzip /var/backups/wordpress/wordpress-db-YYYY-MM-DD.sql.gz
# MySQL에 복원
mysql -u wpuser -p wordpress < /var/backups/wordpress/wordpress-db-YYYY-MM-DD.sql
파일 복원:
# 백업 파일 압축 해제
sudo tar -xzf /var/backups/wordpress/wordpress-files-YYYY-MM-DD.tar.gz -C /tmp
# 필요한 파일 선택적 복사 (예: 테마)
sudo cp -r /tmp/var/www/html/wp-content/themes/your-theme /var/www/html/wp-content/themes/# 권한 재설정
sudo chown -R www-data:www-data /var/www/html
2-2. 장애 시나리오별 대응 계획
웹사이트 접속 불가 상황:
서버 상태 확인:
sudo systemctl status nginx php8.1-fpm mariadb
오류 로그 확인:
sudo tail -n 100 /var/log/nginx/error.log
메모리/디스크 공간 점검:
free -h
및df -h
서비스 재시작:
sudo systemctl restart nginx php8.1-fpm mariadb
데이터베이스 오류 발생:
MariaDB 서비스 상태 확인:
sudo systemctl status mariadb
데이터베이스 로그 확인:
sudo tail -n 100 /var/log/mysql/error.log
MySQL 콘솔에서 상태 확인:
sudo mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G"
데이터베이스 복구 시도:
sudo mysqlcheck -u root -p --auto-repair --optimize wordpress
해킹 의심 상황:
변경된 파일 확인:
find /var/www/html -mtime -1 -type f | grep -v "cache"
의심스러운 PHP 파일 검사:
grep -r "base64_decode" /var/www/html
마지막 로그인 확인:
last -n 20
실행 중인 프로세스 확인:
ps aux | grep -v [p]hp-fpm
감염된 경우: 백업에서 클린 버전 복원
3. 워드프레스 업데이트 관리
3-1. 자동 업데이트 vs 수동 업데이트
자동 업데이트 설정 (소규모 업데이트에 권장):
wp-config.php
파일에 다음 코드 추가:
// 워드프레스 코어 마이너 업데이트 자동화
define('WP_AUTO_UPDATE_CORE', 'minor');
플러그인 자동 업데이트 설정 (워드프레스 5.5 이상):
워드프레스 관리자 > 플러그인 > 설치된 플러그인
개별 플러그인의 “자동 업데이트 활성화” 옵션 선택
수동 업데이트 절차 (메이저 업데이트에 권장):
완전한 백업 생성
테스트 환경에서 먼저 업데이트 테스트
사용량이 적은 시간대에 업데이트 진행
업데이트 후 모든 주요 기능 테스트
3-2. 업데이트 전 테스트 환경 구성
로컬 개발 환경 또는 스테이징 서버를 설정하여 업데이트를 사전 테스트:
Local by Flywheel 사용 (로컬 개발):
Local by Flywheel 설치
프로덕션 사이트 백업 가져오기
로컬 환경에서 업데이트 테스트
문제 없을 시 프로덕션에 적용
오라클 클라우드 두 번째 인스턴스 활용 (스테이징):
두 번째 Free Tier 인스턴스에 동일한 환경 구성
프로덕션 사이트 복제
스테이징 환경에서 업데이트 테스트
문제 없을 시 프로덕션에 적용
4. 정기적인 유지보수 일정 설정
4-1. 주간 유지보수 작업
보안 점검:
워드프레스 관리자 로그인 활동 검토
의심스러운 파일 변경 검사
실패한 로그인 시도 분석 (Wordfence 로그)
성능 모니터링:
페이지 로드 시간 측정
데이터베이스 쿼리 성능 분석
서버 리소스 사용량 검토
콘텐츠 점검:
깨진 링크 검사
만료된 콘텐츠 업데이트
스팸 댓글 정리
4-2. 월간 유지보수 작업
완전 백업 생성:
파일 및 데이터베이스 전체 백업
백업 파일 외부 저장소 동기화
백업 복원 테스트
플러그인 검토:
사용하지 않는 플러그인 비활성화 및 제거
플러그인 호환성 검사
더 나은 대안 플러그인 검토
보안 강화:
관리자 계정 암호 변경
사용자 권한 검토
보안 플러그인 설정 최적화
3. 분기별 유지보수 작업
분기마다 전체 사이트를 종합적으로 점검하여 잠재적인 문제를 사전에 차단합니다.
3-1. 전체 사이트 감사
성능 감사:
Google PageSpeed Insights, GTmetrix로 점수 재측정
TTFB(Time To First Byte) 확인:
curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}\n' https://yourdomain.com
서버 응답 시간 최적화: Nginx 캐시 설정 조정, PHP OPcache 활성화 확인
보안 감사:
워드프레스 코어 파일 무결성 검사:
wp core verify-checksums
의심스러운 파일 탐색:
bash# 최근 7일 내 수정된 파일 검색
find /var/www/html -type f -mtime -7 -exec ls -l {} \;
# base64 인코딩 코드 검출
grep -r "base64_decode" /var/www/html/wp-content
보안 플러그인(Wordfence)으로 전체 파일 스캔 실행
콘텐츠 감사:
깨진 링크 검사: Screaming Frog SEO Tool 또는 Broken Link Checker 플러그인 활용
미사용 미디어 파일 정리: Media Cleaner 플러그인으로 6개월 이상 미사용 이미지 삭제
중복 콘텐츠 확인: Copyscape로 유사도 검사
SEO 건강 상태 점검:
사이트맵 갱신: Google Search Console에 최신 사이트맵 제출
메타 태그 최적화: Yoast SEO 리포트 확인 및 미비 분야 개선
모바일 호환성 테스트: Chrome DevTools의 Lighthouse 활용
인프라 점검:
서버 로드 평균 확인:
uptime
디스크 사용량 모니터링:
df -h
MariaDB 최적화:
mysqlcheck -o wordpress_db -u wordpress_user -p
3-2. 테마 및 플러그인 업데이트 테스트
스테이징 환경 구성:
오라클 클라우드 두 번째 인스턴스에 동일한 환경 복제
프로덕션 사이트 데이터 동기화:
bashrsync -avz /var/www/html/ user@staging-server:/var/www/html/
mysqldump -u wordpress_user -p wordpress_db | mysql -u wordpress_user -p wordpress_db_staging
업데이트 적용:
테마/플러그인 순차적 업데이트 (한 번에 하나씩)
호환성 검사: PHP error_log(
tail -f /var/log/php/error.log
) 및 브라우저 콘솔 오류 확인
복구 계획 수립:
업데이트 실패 시 롤백 절차 명시화
스테이징 환경 백업 생성 후 프로덕션에 반영
3-3. 보안 감사 보고서 작성
로그 분석:
SSH 실패 로그:
grep "Failed password" /var/log/auth.log
웹 서버 공격 시도:
cat /var/log/nginx/access.log | grep "wp-admin" | awk '{print $1}' | sort | uniq -c | sort -nr
취약점 리포트:
CVE(Common Vulnerabilities and Exposures) 데이터베이스에서 사용 중인 플러그인/테마 검색
패치되지 않은 취약점 목록화 및 우선순위 지정
개선 계획 수립:
위험 수준에 따른 조치 타임라인 작성
방화벽 규칙 추가:
bash# 5분 내 10회 이상 로그인 실패 시 IP 차단
sudo fail2ban-client set nginx-limit-req banip 10/5m
4. 유지보수 체크리스트 자동화
정기 작업을 자동화하여 인간 실수를 최소화합니다.
4-1. 워드프레스 CLI(WP-CLI) 활용:
# 플러그인 일괄 업데이트
wp plugin update --all --dry-run # 테스트 실행
wp plugin update --all# 테마 업데이트
wp theme update --all
# 사용자 권한 일괄 변경 wp user update 1 –role=editor # 사용자 ID 1을 편집자로 변경
4-2. 모니터링 도구 통합:
Prometheus + Grafana: 서버 자원 사용량 시각화
UptimeRobot: 5분 간격으로 사이트 가동 시간 모니터링
Logwatch: 매일 로그 요약 리포트 이메일 전송
결론 및 다음 단계
이번 주차에서는 워드프레스 사이트의 장기적 안정성을 보장하기 위한 체계적인 유지보수 전략을 다뤘습니다. 정기적인 감사와 자동화는 사이트의 성능과 보안을 유지하는 핵심입니다.
다음 9주차에서는 오라클 클라우드 Free Tier의 한계를 넘어 고급 기능을 활용하는 방법을 배워보겠습니다.
이제 8주차 내용이 완전히 종료되었습니다. 추가 요청 사항이 있으면 알려주세요!
워드프레스 1주차: 오라클 클라우드 Free Tier 소개 및 계정 생성
워드프레스 2주차: Compute 인스턴스 생성 및 환경 설정
워드프레스 3주차: 웹 서버 (Apache/Nginx) 및 PHP 설치
워드프레스 4주차: MySQL 데이터베이스 구축 및 연동