친절한 우리 고모

친절한 고모의 친절한 이야기

  • 2025. 4. 26.

    by. 친절한 고모

    목차

      ⏱ WP-Cron이 뭐지? 서버 크론과는 다르다!

      워드프레스는 자체적으로 크론(Cron) 시스템을 가지고 있습니다.
      하지만 서버에서 시간 기준으로 실행되는 일반적인 크론과는 다릅니다.

      📌 WP-Cron은 페이지 로딩 시 트리거됩니다.
      즉, 누군가 사이트를 방문해야 예약 작업이 실행됩니다.


      ✅ WP-Cron vs 서버 Cron 비교

      항목WP-Cron리눅스 Cron
      실행 조건 페이지 로딩 시 지정 시간 정확히 실행
      사용 환경 워드프레스 내부 서버 OS 레벨
      정확성 사용자가 없으면 미실행 가능 항상 정확하게 실행
      사용 목적 게시글 예약 발행, 플러그인 작업, 자동 백업 등 로그 정리, 서버 스크립트 실행 등

      ⚙️ WP-Cron 기본 동작 구조

      1. 방문자가 페이지 요청
      2. 워드프레스가 예약된 작업이 있는지 확인
      3. 예약 시간이 지나면 → 등록된 콜백 함수 실행

      🧪 예약 작업 등록하기 – wp_schedule_event()

      php
      복사편집
      // 매시간 실행되는 이벤트 등록 add_action('my_hourly_event', 'my_hourly_callback'); if (!wp_next_scheduled('my_hourly_event')) { wp_schedule_event(time(), 'hourly', 'my_hourly_event'); } // 콜백 함수 function my_hourly_callback() { // 자동 이메일 전송, 로그 정리, 캐시 삭제 등 }

      📌 주기 옵션: hourly, twicedaily, daily
      커스텀 주기도 추가 가능!


      🔁 커스텀 주기 추가 – cron_schedules 필터

      php
      복사편집
      add_filter('cron_schedules', 'my_custom_cron_interval'); function my_custom_cron_interval($schedules) { $schedules['every_15min'] = array( 'interval' => 900, 'display' => 'Every 15 Minutes' ); return $schedules; } // 등록 시 'every_15min' 사용 가능

      ❌ 예약 작업 삭제

      php
      복사편집
      $timestamp = wp_next_scheduled('my_hourly_event'); wp_unschedule_event($timestamp, 'my_hourly_event');

      정기 작업 제거 시에는 반드시 unschedule 처리 필수!


      🔍 예약된 작업 확인 – 플러그인 활용

      추천 플러그인

      • WP Crontrol
        → 예약된 이벤트 목록 확인, 수동 실행, 삭제까지 가능

      📌 관리자 → 도구 → Cron Events 메뉴에서 관리 가능


      💡 실전 활용 예시

      자동화 목적실행 내용주기
      예약 포스트 발행 기본 기능 시스템 예약
      자동 뉴스레터 전송 MailerLite API 호출 매일
      캐시 정리 delete_transient() 호출 2시간마다
      외부 API 데이터 동기화 JSON 호출 후 DB 저장 30분마다
      유저 포인트 만료 조건 체크 후 소멸 처리 매일 자정

      🔐 WP-Cron 보안과 성능 팁

      1. 고트래픽 사이트에서는 비효율적
        → 트래픽마다 크론 검사 → 퍼포먼스 저하
      2. 서버 크론으로 대체 권장 (고급 설정)
        → wp-config.php에 다음 코드 삽입
      php
      복사편집
      define('DISABLE_WP_CRON', true);

      그리고 서버의 크론탭에 다음 명령어 등록:

      bash
      복사편집
      */5 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

      ✅ WP-Cron 설정 체크리스트

      항목완료 여부
      wp_schedule_event()으로 예약 등록 ✅ / ❌
      콜백 함수에서 원하는 작업 수행 ✅ / ❌
      WP Crontrol 등으로 등록 상태 확인 ✅ / ❌
      커스텀 주기 설정 완료 ✅ / ❌
      필요 시 서버 크론으로 전환 ✅ / ❌

      ⏱ WP-Cron이 뭐지? 서버 크론과는 다르다!