예약 발행은 블로그 관리를 편하게 해주지만, 가끔 예약한 시간이 지나도 글이 공개되지 않는 일이 발생합니다. 이 글에서는 예약 발행이 실패하는 대표적 원인과 단계별 점검 방법을 정리합니다. 실무에서 바로 적용 가능한 점검 항목과 해결 방법을 중심으로 설명하니, 하나씩 따라 해 보세요.
예약 발행의 기본 원리 (간단히)
워드프레스는 자체적인 스케줄러인 WP-Cron을 통해 예약 작업(포스트 발행 등)을 처리합니다. WP-Cron은 실제 서버의 cron처럼 항상 실행되는 서비스가 아니라 방문자가 사이트를 요청할 때마다 트리거되는 방식입니다. 따라서 서버 설정, 트래픽, 플러그인/캐시 설정 등에 따라 예약 작업이 정상적으로 실행되지 않을 수 있습니다.
자주 발생하는 원인과 점검·해결 방법
1) 사이트/워드프레스 시간대 설정 오류
문제 설명: 워드프레스 설정의 시간대가 잘못되어 예약 시간이 실제 예상 시간과 달라질 수 있습니다.
확인 방법: 관리자 > 설정 > 일반(Settings > General)에서 시간대(Timezone)를 확인합니다. 서버 시간과 비교하려면 호스팅의 PHP 시간도 확인하세요.
해결 방법: 시간대를 올바르게 맞추고, 필요 시 예약 시간을 다시 설정합니다.
2) WP-Cron 비활성화 (DISABLE_WP_CRON)
문제 설명: wp-config.php에서 DISABLE_WP_CRON이 true로 설정되어 있으면, 워드프레스가 자동으로 wp-cron을 트리거하지 않습니다. 대신 서버 크론을 따로 설정해야 합니다.
확인 방법: wp-config.php 파일에서 다음 라인을 찾습니다.
define('DISABLE_WP_CRON', true);
해결 방법: 해당 상수가 true라면 서버에 실제 cron을 등록했는지 확인하거나, 상수를 삭제하거나 false로 변경(호스팅 환경에 따라 다름)합니다. 서버 크론 예시:
* * * * * curl -s https://your-site.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
3) 트래픽 부족으로 WP-Cron 미발동
문제 설명: 방문자가 거의 없는 사이트는 WP-Cron이 잘 실행되지 않을 수 있습니다.
해결 방법: 서버 크론을 사용해서 주기적으로 wp-cron.php를 호출하거나, 호스팅에서 제공하는 스케줄러를 설정합니다.
4) 플러그인·테마 충돌
문제 설명: 일부 플러그인(특히 캐시, 보안, 성능 최적화 플러그인)이나 테마가 wp-cron의 정상 실행을 방해할 수 있습니다.
확인 방법: 최근에 설치·업데이트한 플러그인이 있다면 임시로 비활성화하거나, 기본 테마(예: Twenty Twenty-Three)로 전환하여 문제가 해결되는지 확인합니다.
해결 방법: 충돌이 확인되면 해당 플러그인의 설정을 조정하거나, 대체 플러그인을 사용합니다.
5) 캐시 및 역방향 프록시(Varnish, CDN) 문제
문제 설명: 페이지 캐시나 프록시가 wp-cron 호출을 차단하거나 wp-cron 요청을 캐시하여 정상 작업을 막을 수 있습니다.
확인 방법: 캐시 플러그인 설정에서 wp-cron.php를 제외(exclude)하거나, CDN/프록시 규칙을 점검합니다.
해결 방법: wp-cron.php 요청을 캐시에서 제외하고, 필요 시 CDN 규칙을 수정합니다.
6) 호스팅 보안 규칙·방화벽에 의한 차단
문제 설명: 호스팅의 보안 규칙이 내부 HTTP 호출 또는 외부에서의 wp-cron.php 접근을 차단할 수 있습니다.
확인 방법: 호스팅 로그나 방화벽 설정에서 차단된 항목을 확인하고, wp-cron.php로의 접근이 허용되는지 확인합니다.
해결 방법: 호스팅사에 문의해 wp-cron 실행 관련 요청을 허용해 달라고 요청하거나, 서버 cron 방식으로 대체합니다.
7) 데이터베이스 문제 또는 예약 이벤트 누적
문제 설명: 예약 이벤트가 데이터베이스에 쌓여 실행이 지연되거나, DB 문제로 인해 예약 상태가 갱신되지 않을 수 있습니다.
확인 방법: WP Crontrol 같은 플러그인으로 예약 이벤트 목록을 확인하거나, wp_posts 테이블의 post_status가 future인지 확인합니다. 워드프레스의 Action Scheduler(예: WooCommerce)는 도구 메뉴의 Scheduled Actions에서 확인합니다.
해결 방법: 불필요한 예약 이벤트를 삭제하거나, 데이터베이스 최적화/복구를 진행합니다.
8) PHP 제한(실행 시간, 메모리) 또는 서버 에러
문제 설명: wp-cron 실행 중 PHP 에러가 발생하면 예약 작업이 중간에 실패할 수 있습니다.
확인 방법: 서버의 에러 로그 또는 워드프레스 디버그 로그(debug.log)를 확인합니다.
해결 방법: 메모리(limit)나 실행 시간(max_execution_time)을 늘리거나, 에러를 유발하는 코드를 수정합니다.
우선 점검할 순서(실무 가이드)
- 관리자 > 설정 > 일반에서 시간대 확인 및 예약 시간 재설정
- wp-config.php의 DISABLE_WP_CRON 설정 확인
- WP Crontrol 또는 Action Scheduler로 예약 이벤트 존재 여부 확인
- 캐시·CDN 설정에서 wp-cron.php를 제외(또는 캐시 비활성화 후 테스트)
- 플러그인·테마 충돌 점검(비활성화·스위치)
- 서버 로그 및 워드프레스 디버그 로그 확인
- 서버 크론으로 wp-cron.php를 호출하도록 설정(트래픽 적은 사이트 권장)
체크포인트 (간단 체크리스트)
- 시간대가 정확한가? (Settings > General)
- 예약 글의 상태가 “Scheduled(future)”로 되어 있는가?
- wp-config.php에 DISABLE_WP_CRON이 설정되어 있지 않거나, 서버 크론이 등록되어 있는가?
- WP Crontrol 또는 Action Scheduler에서 예약 이벤트가 표시되는가?
- 캐시/프록시가 wp-cron 요청을 차단하지 않는가?
- 서버 에러 로그나 디버그 로그에 관련 에러가 없는가?
- 플러그인/테마 변경 후에도 문제가 재현되는가?
유용한 도구와 명령어
- WP Crontrol 플러그인: 예약된 워드프레스 작업을 시각적으로 확인·관리
- Action Scheduler (WooCommerce 등): 스케줄된 작업의 큐 확인(도구 > Scheduled Actions)
- WP-CLI로 확인:
wp cron event list - 서버에서 wp-cron 호출 테스트:
curl -I https://your-site.com/wp-cron.php?doing_wp_cron
자주 묻는 질문 (FAQ)
1. 예약 발행이 가끔만 실패하고 대부분은 정상적으로 되는 경우, 어디부터 봐야 하나요?
간헐적 실패는 트래픽 패턴(방문자에 의한 WP-Cron 트리거), 서버 과부하, 일시적 플러그인 충돌 등 여러 원인이 섞여 있을 수 있습니다. 우선 디버그 로그와 서버 에러 로그를 확인하고, 문제가 발생한 시간대의 방문자 수·서버 상태를 점검하세요. 안정성이 필요하면 server cron으로 대체하는 것을 권장합니다.
2. wp-config.php에 DISABLE_WP_CRON을 true로 설정해도 괜찮나요?
가능은 하지만 그 경우 반드시 서버 측에서 주기적으로 wp-cron.php를 호출하는 실제 cron 작업이 있어야 합니다. 그렇지 않으면 예약 작업이 전혀 실행되지 않습니다. 호스팅 환경에 따라 자동으로 처리해주는 곳도 있으니 호스팅사 문서를 확인하세요.
3. 캐시를 사용하면 예약 발행이 실패하나요?
캐시 자체가 예약 발행을 직접적으로 막지는 않지만, wp-cron 호출이 캐시되거나 차단되면 문제가 발생할 수 있습니다. 캐시 설정에서 wp-cron.php를 제외하거나, 테스트 시 캐시를 비활성화해 원인을 확인하세요. 또한 Varnish나 CDN 규칙도 함께 점검해야 합니다.
마무리
예약 발행 실패는 원인이 다양하기 때문에 차근차근 의심 지점(시간대, WP-Cron 설정, 캐시, 플러그인, 서버 상태)을 점검하는 것이 중요합니다. 간단한 설정 수정으로 해결되는 경우가 많고, 트래픽이 적은 사이트라면 서버 cron으로 대체하면 안정성이 크게 향상됩니다. 점검 중 로그를 남기고 한 번에 하나씩 변경해 문제의 원인을 정확히 파악하세요.
답글 남기기