WP-Cron(wp-cron.php): 비활성화 및 시스템 크론 설정 | 워드프레스 성능 최적화

워드프레스에서 Cron 작업은 특정 시간이나 날짜에 예약된 작업을 자동으로 수행하는 기능입니다. 이 작업은 wp-cron.php 파일을 통해 실행되며, 워드프레스는 페이지가 로드 될 때마다 이 파일을 호출하여 예약된 작업을 처리합니다. 이러한 방식은 간편하지만, 트래픽이 많은 사이트에서는 성능 저하를 유발할 수 있습니다.

Ⅰ. WP-Cron의 실행 과정과 성능 문제

워드프레스는 리눅스 서버의 전통적인 Cron 시스템을 사용하지 않고 자체적인 Cron 기능인 WP-Cron을 제공합니다. WP-Cron은 wp-cron.php 파일을 통해 작동하며, ⓐ사용자가 사이트를 방문할 때마다 예약된 작업이 있는지 확인하고 이를 실행하며, ⓑRankMath와 WP Rocke와 같은 플러그인 등은 자체적으로 예약된 주기적인 작업을 실행합니다.

반대로, 트래픽이 많은 사이트에서는 wp-cron.php가 지나치게 자주 호출되어 서버에 과부하를 줄 수 있습니다. 특히, 동시에 여러 사용자가 접속할 경우 중복된 크론 작업이 실행되며, 이는 CPU 사용률 증가, 응답 지연, 페이지 로딩 속도 저하 등의 문제로 이어질 수 있습니다.

이러한 WP-Cron의 구조적 한계는 워드프레스의 성능을 저하 시킬 수 있으며, 특히 고성능이 요구되는 사이트나 쇼핑몰, 뉴스 포털 등에서는 치명적인 병목 현상을 유발할 수 있습니다.

🔄 WP-Cron의 실행 방식 및 구조

WP-Cron의 실행 방식 및 구조

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

  • WP-Cron 설정을 통한 최적화

워드프레스 성능 최적화 방식에는 여러가지가 있습니다. 캐싱 및 프론트엔드와 데이터베이스 등의 최적화 후 WP-Cron의 설정을 통한 개선 방법이 있습니다.

WordPress
 └─ 성능 최적화
     ├─ 캐싱 설정
├─ 브라우저 캐싱
├─ 객체 캐싱
├─ 페이지 캐싱
└─ 캐싱 플러그인 (WP Rocket, W3 Total Cache )
     ├─ 프론트엔드 최적화
├─ 이미지 압축  포맷(WebP )
├─ Lazy Load 적용
├─ CSS/JS 압축  병합
└─ 관련 플러그인 (Autoptimize, ShortPixel )
     ├─ 데이터베이스 정리
├─ 리비전/스팸/임시 테이블 제거
└─ DB 최적화 플러그인 (WP-Optimize )
     └─📑WP-Cron 설정
        └─ WP-Cron (wp-cron.php)
            ├─  사용자 방문  예약 작업 확인
            ├─  플러그인의 주기적 작업 (Rank Math, WP Rocket )
            ├─ WP-Cron의 성능 문제
├─ 트래픽 의존성
├─ 과도한 호출로 인한 서버 과부하
└─ 중복 실행  병목 현상
            └─ WP-Cron 실행 방식
                ├─ 트래픽 기반 가상 스케줄러
                ├─ 예약 작업의 실행 흐름
                └─ 시간 기반이 아닌 방문 기반 실행

워드프레스 페이지가 로드 될 때마다 예약된 이벤트가 확인되며, 플러그인의 주기적인 작업으로 비효율적인 WP-Cron을 효율적으로 활용할 필요가 있습니다.

1️⃣ WP-Cron 테스트

WP-CLI로 크론 작업을 확인했을 때 작동 중인 Cron이 실행되는 것을 확인할 수 있습니다. Rank Math및 WP Rocket 등의 플러그인이 예약된 작업을 하루 또는 분 단위로 실행되는 것이 확인됩니다.

WP CLI- wp-cron event list 명령어로 예약된 크론 이벤트 목록 확인_

2️⃣ WP-Cron 설정 방법

WP-Cron은 워드프레스의 예약 작업을 처리하는 가상 스케줄러로, 사용자의 방문 시 wp-cron.php가 실행됩니다. 하지만 트래픽 기반 실행은 불안정하고 과도한 호출로 서버 부하를 유발할 수 있어, 시스템 크론으로 보완하는 것이 일반적입니다.
필요 시 wp-config.php에서 DISABLE_WP_CRON을 설정해 WP-Cron을 끄고, 리눅스 크론으로 정기 실행하는 방식이 추천됩니다.

항목

WP-Cron 비활성화 + 시스템 크론 단독 실행

설정

WP-Cron을 끄고 시스템 크론에서 wp-cron.php를 실행

장점

중복 실행이 없고 정확한 시간 기반 실행이 가능하며, 서버 부하가 적음

단점

일부 플러그인 기능이 중단될 수 있고 설정 실수 시 작업 누락 위험

상황

트래픽이 많고 예약 작업이 많은 사이트에 적합

하지만 ①번 방식은 WP Rocket과 같은 캐시 플러그인이 1분 마다 PreLoad로 기능으로 방문자가 웹페이지에 방문하기 전에 캐시를 미리 생성하는 기능이 비활성화 되는 단점이 있습니다.

⚙️ wp-config.php 파일 수정

WP_CRON을 비활성화 하는 방법으로 설정할 수 있습니다.

# WP_CROM 비활성화 
define( 'DISABLE_WP_CRON', true );

WP_CRON_LOCK_TIMEOUT은 WP-Cron이 실행 중일 때 다른 실행 시도를 막아주는 “시간 기반 잠금 장치”입니다.

# 5분은 300으로 , 60분 마다 실행 3600
define('WP_CRON_LOCK_TIMEOUT', 300);

이와 같은 이유로 wp-config.php 파일에 WP-Cron을 비활성화 한 후에 System Cron 작업을 추가하는 방법보다는 System Cron을 추가하는 방법을 권장하며, 현재 관리 중인 서버에도 이 방법으로 설정했습니다.

⚙️ 리눅스 서버에 시스템 크론 활성화[기본]

개별 도메인으로 활성화 할 수 있습니다.

# 5분마다 실행
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# 30분마다 실행
*/30 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# 1시간마다 실행
0 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# 하루 1번 실행
0 3 * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# 서버가 로컬 서버일 경우 
*/5 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

# 30분마다 실행
*/30 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

# 1시간마다 실행
0 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

# 하루 1번 실행
0 3 * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

WP_CLI를 설치 했을 경우 원하는 시간대로 하나만 설정할 수 있습니다. ▼

# 5분마다 실행
*/5 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

# 30분마다 실행
*/30 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

# 1시간마다 실행
0 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

# 하루 1번 실행
0 3 * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

⚙️ WP-CLi 및 시스템 크론 1분 및 크론 작업 중복 방지

기존의 WP_CRON은 작업량이 많으면 그냥 무시(건너뜀)되고 이후에 재 실행 되는 구조입니다. 기존의 WP-Corn을 끄고 예약 작업을 5분 잠금 유지로 설정하여 시스템 크론에 설정한 중복 방지를 막습니다.

define('DISABLE_WP_CRON', true);         // WP-Cron 자동 실행 
define('WP_CRON_LOCK_TIMEOUT', 300);     // 대기    무시(건너뜀) 예약 작업 실행  5분 잠금 유지

/* That's all, stop editing! Happy publishing. */

시스템 크론 flock -n 옵션을 추가로 설정하여, 시스템 크론에선 즉시 종료로 적용합니다.

# wp cron 설정 :  flock -n → 대기 안 함 → 즉시 종료
*/1 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet 

위와 같이 설정한 조합의 결과는

  • WP 내부 자동 실행은 꺼짐 → 방문자 수와 무관하게 예약 작업 실행
  • 시스템 크론이 1분마다 실행 시도 → 예약된 작업이 있으면 실행됨
  • 잠금이 걸리면 5분 동안 재실행 안 됨 → 중복 실행 방지(사실 상 WP_CRON_LOCK_TIMEOUT은 flock -n 설정으로 굳이 필요하지 않습니다.)

중복 실행 방지로 실제 동작 흐름은

  1. 08:00 → 시스템 크론이 wp-cron.php 호출
    • 예약 작업 A 실행됨 → 잠금 5분 설정
  2. 08:01 → 시스템 크론 다시 호출
    • 작업 A는 잠금 중 → 실행 안 됨
  3. 08:02~08:04 → 동일
    • 08:05 → 잠금 풀림 → 다음 예약 작업이 있으면 실행됨

WP가 자동으로 실행하지 않는 대신, 시스템이 책임지고 실행한다는 점. 그리고 WP_CRON_LOCK_TIMEOUT은 중복 실행을 막는 보조 안전장치로 작동한다는 것입니다.

항목

WP_CRON_LOCK_TIMEOUT

flock -n

잠금 방식

워드프레스 내부

시스템 레벨

잠금 위치

DB 기반 wp_options의 doing_cron

시스템 파일 기반 ~/.wp_cron.lock

대기 여부

❌ 대기 안 함 → 건너뜀

❌ 대기 안 함 → 즉시 종료

중복 실행 방지

✅ 중복 실행 방지

✅ 중복 실행 방지

작업 완료 후 WP-CLI 명령어로 확인해 볼 수 있습니다. 기존처럼 크론이 잘 작동하는지 확인합니다.

wp cron event list

Similar Posts

  • WordPress Plugin: 정의와 역할 | 워드프레스 필수 플러그인 3가지 기준

    WordPress Plugin은 웹사이트에 다양한 기능을 추가할 수 있는 확장 도구입니다. 보안, 성능 최적화, SEO, 백업 등 핵심적인 기능 대부분이 플러그인을 통해 구현되며, 어떤 플러그인을 선택하고 조합하느냐에 따라 사이트의 완성도가 달라집니다. 이 페이지에서는 워드프레스 플러그인의 정의와 역할을 정리하고, 실제 운영에 꼭 필요한 7가지 필수 플러그인 요소를 소개합니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의…

  • 워드프레스 임베드 기능: 활용 및 장·단점

    워드프레스 임베드 기능은 웹사이트에서 외부 콘텐츠(다른 워드프레스 사이트, 유튜브 영상, 트윗, 인스타그램 게시물 등)를 별도의 코드 입력 없이 손쉽게 게시글에 삽입할 수 있도록 돕는 기능입니다. 임베드 기능은 2015년 12월 8일WordPress 4.4 때 출시 되었으며, oEmbed 기능이 핵심 기능에 통합되었습니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행 방식 및 구조Ⅱ. 워드프레스 성능 최적화1️⃣ WP-Cron…

  • [워드프레스] 차일드 테마란? 만들어야 할까요? 그럼 어떻게?

    워드프레스 CMS를 사용하면 테마는 필수로 사용하게 됩니다. 워드프레스 차일드 테마는 운영하는 워드프레스 사이트에서 필수 요소인지 먼저 생각해 볼 필요가 있습니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행 방식 및 구조Ⅱ. 워드프레스 성능 최적화1️⃣ WP-Cron 테스트2️⃣ WP-Cron 설정 방법 1. 차일드 테마란? 차일드 테마(Child Theme)는 워드프레스 프레임워크의 주요 기능 중 하나입니다. 사용 중인…

  • [WP] CMS란? 콘텐츠 관리 시스템 정의와 요구 사항 9가지

    인터넷 비즈니스를 한다면 알아야 할 여러가지 용어가 많이 있습니다. SEO, CDN, Hosting Server, Rich Snippets 등 온라인을 이용한 전자상거래 사이트, 블로그 등의 웹 사이트를 운영한다면 어느 정도의 지식이 있을 경우 같은 업종의 경쟁자보다 우위에 설 수 있기 때문입니다. 인터넷 비즈니스를 한다면 한번 쯤 CMS에 대한 용어를 인터넷 비즈니스를 하면서 들어 봤을 가능성이 큽니다….

  • 워드프레스 관리자 비밀번호 분실 시: 변경&분실 재설정

    워드프레스를 기반으로 웹 사이트를 구축 후 얼마 되지 않았고 한동안 접속을 하지 않다가 임의로 설정한 비밀번호가 생각나지 않을 때 워드프레스 관리자 비밀번호 분실 시 난감할 수 있습니다. 로그인 후 관리자 페이지에서 비밀번호를 변경하는 방법과 분실 시 변경하는 방법에 대한 몇 가지 방법을 제시합니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행 방식 및…

  • [WP] 3가지 리소스 힌트로 워드프레스 성능 향상

    워드프레스 웹 사이트를 운영하면서 초보자의 경우 테마와 플러그인을 하나 씩 설치하면서 점점 느려지는 속도에 당황하게 됩니다. SEO에도 좋지 않지만 느린 웹 사이트는 방문자 이탈율이 늘어날 수 밖에 없습니다. 속도를 향상시키기 위한 방법 중 하나는 캐시 플러그인 사용이며, 거의 모든 캐시 플러그인에 있는 리소스 힌트 제거 기능에 대해 알아 보겠습니다. 목차Ⅰ. WP-Cron의 실행 과정과…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 10   +   9   =