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

  • 워드프레스 Neve 테마 설치: 속도 테스트

    Neve 테마는 빠르고 가벼운 워드프레스 테마로, 초보자부터 고급 사용자까지 모두를 위한 유연한 구조를 제공합니다. 공식 테마 디렉토리에 등록된 무료 테마 중 하나로, 블록 에디터(Gutenberg)는 물론 Elementor, Brizy, Beaver Builder 등 다양한 페이지 빌더와도 높은 호환성을 자랑합니다. 특히, Neve는 모바일 퍼스트 구조와 AMP 지원, 최적화된 코드 덕분에 속도 측면에서도 매우 뛰어난 평가를 받고 있습니다….

  • [WP] 워드프레스 XML-RPC 취약점과 비활성화 해야 하는 이유 2가지

    워드프레스 xmlrpc.php는 보안 문제가 발생합니다. xmlrpc.php 파일을 이용한 워드프레스 사이트에 대한 무차별 대입 공격이 문제입니다. xmlrpc.php 취약점으로 많은 워드프레스 유저에게 알려진 문제이기도 합니다. ‘XML-RPC‘의 기본 기능 및 활용성과 문제가 되는 이유에 대해 알아 보겠습니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행 방식 및 구조Ⅱ. 워드프레스 성능 최적화1️⃣ WP-Cron 테스트2️⃣ WP-Cron 설정 방법…

  • Ghost CMS란? WordPress vs Ghost 2개 CMS 비교

    2023년 워드프레스 CMS 점유율은 43% 정도이며, 압도적인 점유율을 유지하고 있는 콘텐츠 관리 시스템(CMS)이 틀림 없습니다. 워드프레스 테마와 플러그인은 무한에 가까운 확장성을 가지고 있기 때문입니다. Ghost CMS는 콘텐츠 제공 중심 CMS입니다. WordPress vs Ghost 차이점을 알아 보도록 하겠습니다. Ghost CMS는 자바 스크립트로 작성되며, MIT 라이선스에 따라 배포됩니다. 둘 다 무료 오픈소스인 점이 동일합니다. 목차Ⅰ. WP-Cron의…

  • Clearfy 설정 가이드: 워드프레스 성능 최적화

    워드프레스 사이트의 속도를 높이기 위해 캐시 플러그인을 고려할 때, Clearfy Cache는 단순한 캐시 플러그인을 넘어 워드프레스 전반을 최적화하는 통합 도구로 평가받고 있습니다. 이 글에서는 Clearfy의 주요 기능과 설정 방법을 단계별로 살펴보고, 실제 사이트에서 성능을 높이기 위한 실전 팁을 함께 정리했습니다. WP Fastest Cache나 W3 Total Cache와 같이 캐시 플러그인이지만 캐시 기능보다 워드프레스 최적화…

  • TLS/SSL 보안인증서 종류(형식) 4가지와 기능

    SSL 인증서의 목적은  웹 사이트에 접속하기 전 기존 HTTP 프로토콜에서 HTTPS 프로토콜로 변경이 되면서 전송 된 데이터를 암호화 하여 데이터를 보호하는 목적을 가지고 있습니다. 이번에 TLS(SSL) 인증서의 종류에 대해 알아 보겠습니다. SSL 보안인증서 종류는 크게 싱글(Single)인증서, 멀티(Multi) 인증서, 와일드카드(WildCard), 엔터프라이즈(EnterPrise) 인증서 4개로 볼 수 있습니다. SSL 인증서 종류에 따라 어떤 점이 다른지 기능들을 살펴…

  • [WP] 워드프레스 드롭인 플러그인이란?

    워드프레스 드롭인 플러그인Drop-In Plugin은 제한된 Wordpress 기능을 대체하거나 향상 시키는 기능을 가진 플러그인입니다. 추가 기능을 제공하기도 하며 워드프레스 관리자 페이지 플러그인 카테고리에서 확인할 수 있습니다. 하나의 파일로 서버 디렉토리 내의 루트 폴더/wp-content/Drop-In-Plugin명 워드프레스 /wp-content/ 폴더 내에 위치하며, 워드프레스 관리자 페이지 > 플러그인 > 드롭인 플러그인(활성화 된 경우)을 활인할 수 있습니다. 목차Ⅰ. WP-Cron의 실행…

답글 남기기

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

Prove your humanity: 10   +   2   =