워드프레스 8주차: 백업 및 유지보수 전략

워드프레스 웹사이트를 안정적으로 운영하기 위해서는 정기적인 백업과 체계적인 유지보수가 필수적입니다. 이번 주차에서는 데이터 손실 방지를 위한 백업 전략, 보안 강화 방법, 그리고 효율적인 유지보수 방안을 알아보겠습니다.

8주차: 백업 및 유지보수 전략

  1. 자동 백업 스크립트 작성과 cron 작업 설정

  2. 장애 발생 시 복구 전략 (phpMyAdmin, MySQL 명령어 활용)

  3. 워드프레스 업데이트 관리와 유지보수 팁

  4. 보안 강화 플러그인 활용 (Wordfence Security 등)

1. 자동 백업 시스템 구축

1-1 백업 플러그인 설치 및 설정

UpdraftPlus 워드프레스 백업 및 복구

UpdraftPlus 설정:

  1. 플러그인 > 새로 추가 > “UpdraftPlus” 검색 및 설치

  2. 활성화 후 설정:

    • 백업 주기 설정: 파일은 주간, 데이터베이스는 일간 백업 권장

    • 보관할 백업 수 설정: 최소 3개 이상 유지

    • 백업 저장 위치 설정: 클라우드 스토리지 연동 (Google Drive, Dropbox 등)

    • 자동 백업 테스트 실행

백업 설정 팁:

  • 백업 파일에 날짜 포함

  • 핵심 테이블만 선택하여 데이터베이스 백업 용량 절약

  • 미디어 파일이 많은 경우 별도 일정으로 백업

 

2. 서버 레벨 백업 스크립트 구성

백업 플러그인과 별개로 서버 레벨에서 추가 백업을 구성합니다:

# 백업 디렉토리 생성
sudo mkdir -p /var/backups/wordpress
# 백업 스크립트 생성
sudo nano /usr/local/bin/backup_wordpress.sh

♦ 다음 내용으로 스크립트 작성

#!/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. 백업 파일 외부 저장소 동기화

로컬 백업을 외부 스토리지와 자동 동기화:

bash
# 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 작업 추가:

bash

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를 사용한 복원:

  1. 워드프레스 관리자 대시보드 > UpdraftPlus > 백업 복원

  2. 복원할 백업 선택 > 복원 버튼 클릭

  3. 복원 옵션 선택 (데이터베이스, 플러그인, 테마, 업로드 등)

  4. 복원 과정 모니터링

수동 복원 절차:

  1. 데이터베이스 복원:

bash
# 데이터베이스 백업 파일 압축 해제
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

 

  1. 파일 복원:

bash
# 백업 파일 압축 해제
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. 장애 시나리오별 대응 계획

웹사이트 접속 불가 상황:

  1. 서버 상태 확인: sudo systemctl status nginx php8.1-fpm mariadb

  2. 오류 로그 확인: sudo tail -n 100 /var/log/nginx/error.log

  3. 메모리/디스크 공간 점검: free -h 및 df -h

  4. 서비스 재시작: sudo systemctl restart nginx php8.1-fpm mariadb

데이터베이스 오류 발생:

  1. MariaDB 서비스 상태 확인: sudo systemctl status mariadb

  2. 데이터베이스 로그 확인: sudo tail -n 100 /var/log/mysql/error.log

  3. MySQL 콘솔에서 상태 확인: sudo mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G"

  4. 데이터베이스 복구 시도: sudo mysqlcheck -u root -p --auto-repair --optimize wordpress

해킹 의심 상황:

  1. 변경된 파일 확인: find /var/www/html -mtime -1 -type f | grep -v "cache"

  2. 의심스러운 PHP 파일 검사: grep -r "base64_decode" /var/www/html

  3. 마지막 로그인 확인: last -n 20

  4. 실행 중인 프로세스 확인: ps aux | grep -v [p]hp-fpm

  5. 감염된 경우: 백업에서 클린 버전 복원

3. 워드프레스 업데이트 관리

3-1. 자동 업데이트 vs 수동 업데이트

자동 업데이트 설정 (소규모 업데이트에 권장):

  1. wp-config.php 파일에 다음 코드 추가:

// 워드프레스 코어 마이너 업데이트 자동화
define('WP_AUTO_UPDATE_CORE', 'minor');
  1. 플러그인 자동 업데이트 설정 (워드프레스 5.5 이상):

    • 워드프레스 관리자 > 플러그인 > 설치된 플러그인

    • 개별 플러그인의 “자동 업데이트 활성화” 옵션 선택

수동 업데이트 절차 (메이저 업데이트에 권장):

  1. 완전한 백업 생성

  2. 테스트 환경에서 먼저 업데이트 테스트

  3. 사용량이 적은 시간대에 업데이트 진행

  4. 업데이트 후 모든 주요 기능 테스트

3-2. 업데이트 전 테스트 환경 구성

로컬 개발 환경 또는 스테이징 서버를 설정하여 업데이트를 사전 테스트:

Local by Flywheel 사용 (로컬 개발):

  1. Local by Flywheel 설치

  2. 프로덕션 사이트 백업 가져오기

  3. 로컬 환경에서 업데이트 테스트

  4. 문제 없을 시 프로덕션에 적용

오라클 클라우드 두 번째 인스턴스 활용 (스테이징):

  1. 두 번째 Free Tier 인스턴스에 동일한 환경 구성

  2. 프로덕션 사이트 복제

  3. 스테이징 환경에서 업데이트 테스트

  4. 문제 없을 시 프로덕션에 적용

4. 정기적인 유지보수 일정 설정

4-1. 주간 유지보수 작업

보안 점검:

  • 워드프레스 관리자 로그인 활동 검토

  • 의심스러운 파일 변경 검사

  • 실패한 로그인 시도 분석 (Wordfence 로그)

성능 모니터링:

  • 페이지 로드 시간 측정

  • 데이터베이스 쿼리 성능 분석

  • 서버 리소스 사용량 검토

콘텐츠 점검:

  • 깨진 링크 검사

  • 만료된 콘텐츠 업데이트

  • 스팸 댓글 정리

4-2. 월간 유지보수 작업

완전 백업 생성:

  • 파일 및 데이터베이스 전체 백업

  • 백업 파일 외부 저장소 동기화

  • 백업 복원 테스트

플러그인 검토:

  • 사용하지 않는 플러그인 비활성화 및 제거

  • 플러그인 호환성 검사

  • 더 나은 대안 플러그인 검토

보안 강화:

  • 관리자 계정 암호 변경

  • 사용자 권한 검토

  • 보안 플러그인 설정 최적화

3. 분기별 유지보수 작업

분기마다 전체 사이트를 종합적으로 점검하여 잠재적인 문제를 사전에 차단합니다.

3-1. 전체 사이트 감사

  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 활성화 확인

  2. 보안 감사:

    • 워드프레스 코어 파일 무결성 검사: 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)으로 전체 파일 스캔 실행

  3. 콘텐츠 감사:

    • 깨진 링크 검사: Screaming Frog SEO Tool 또는 Broken Link Checker 플러그인 활용

    • 미사용 미디어 파일 정리: Media Cleaner 플러그인으로 6개월 이상 미사용 이미지 삭제

    • 중복 콘텐츠 확인: Copyscape로 유사도 검사

  4. SEO 건강 상태 점검:

    • 사이트맵 갱신: Google Search Console에 최신 사이트맵 제출

    • 메타 태그 최적화: Yoast SEO 리포트 확인 및 미비 분야 개선

    • 모바일 호환성 테스트: Chrome DevTools의 Lighthouse 활용

  5. 인프라 점검:

    • 서버 로드 평균 확인: uptime

    • 디스크 사용량 모니터링: df -h

    • MariaDB 최적화: mysqlcheck -o wordpress_db -u wordpress_user -p

3-2. 테마 및 플러그인 업데이트 테스트

  1. 스테이징 환경 구성:

    • 오라클 클라우드 두 번째 인스턴스에 동일한 환경 복제

    • 프로덕션 사이트 데이터 동기화:

      bash
      rsync -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
  2. 업데이트 적용:

    • 테마/플러그인 순차적 업데이트 (한 번에 하나씩)

    • 호환성 검사: PHP error_log(tail -f /var/log/php/error.log) 및 브라우저 콘솔 오류 확인

  3. 복구 계획 수립:

    • 업데이트 실패 시 롤백 절차 명시화

    • 스테이징 환경 백업 생성 후 프로덕션에 반영

3-3. 보안 감사 보고서 작성

  1. 로그 분석:

    • 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

  2. 취약점 리포트:

    • CVE(Common Vulnerabilities and Exposures) 데이터베이스에서 사용 중인 플러그인/테마 검색

    • 패치되지 않은 취약점 목록화 및 우선순위 지정

  3. 개선 계획 수립:

    • 위험 수준에 따른 조치 타임라인 작성

    • 방화벽 규칙 추가:

      bash
      # 5분 내 10회 이상 로그인 실패 시 IP 차단
      sudo fail2ban-client set nginx-limit-req banip 10/5m

4. 유지보수 체크리스트 자동화

정기 작업을 자동화하여 인간 실수를 최소화합니다.

4-1. 워드프레스 CLI(WP-CLI) 활용:

bash
# 플러그인 일괄 업데이트
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 데이터베이스 구축 및 연동

워드프레스 5주차: 워드프레스 설치 및 기본 설정

워드프레스 6주차: 무료 도메인 연결 및 SSL 인증서 설정

워드프레스 7주차: 사이트 최적화 및 성능 개선

Leave a Comment