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

  • 워드프레스 DB Collation: utf8mb4_unicode_520_ci

    워드프레스 전용 서버를 구축하기 위한 준비를 APM 설치 후 테스트 도메인으로 워드프레스를 설치했다. 설치 후 데이터베이스를 확인해 보니 워드프레스 DB Collation이 utf8mb4_general_ci가 아닌 utf8mb4_unicode_520_ci로 확인되었다. 워드프레스 utf8mb4_unicode_520_ci가 표준이었나 생각하다가 구글링 후 워드프레스 utf8mb4_unicode_520_ci가 표준이라는 것을 확인했다. 예전에 시간적 여유가 있을 때 utf8mb4_general_ci를 사용했었고 그때는 utf8mb4_general_ci가 표준이었는지 모르겠지만 지금 생각해보니 예전에도 표준 정렬은 unicode_ci를…

  • 워드프레스 점유율 43%: 전 세계 웹사이트에서 가장 많이 쓰이는 CMS

    W3Techs의 월드 와이드 웹 기술 설문조사에 따르면 워드프레스 점유율은 2025년 3월 43.4%입니다. 전 세계의 웹 사이트 43.4%가 워드프레스 CMS로 만들어 졌다는 걸 의미입니다. 시장 점유율은 61.1%로 확인되며, 2위가 쇼피파이, 3위가 윅스, 4위가 스퀘어스페이스, 5위 줌라로 확인되고 있습니다. 1~5위 순위는 오랜 시간 변동 없이 이어질 것으로 보입니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의…

  • 검증 받은 워드프레스 SEO 플러그인 BEST 5

    운영하는 워드프레스 웹사이트가 광고 외 유기적인 트래픽이 필요한 블로그이거나 관련 비즈니스 사이트일 경우 워드프레스 SEO 플러그인은 워드프레스 운영 중에 필요한 필수 플러그인 항목에 포함 시켜야 합니다. 워드프레스를 사용한다면 SEO 플러그인을 사용해야 하는 이유는 온페이지 SEO 및 테크니컬 SEO를 손 쉽게 구축할 수 있기 때문입니다. 이를테면 내부 링크와 백링크, SEO 감사, 타이틀 태그 및…

  • 워드프레스 캐시 플러그인 및 최적화 플러그인

    워드프레스로 만들어진 웹사이트는 플러그인을 설치할 수록 속도가 느려집니다. 이는 필연적인 현상으로 워드프레스 사이트 속도가 느린 경우 워드프레스 캐시 플러그인을 설치하여 사이트의 성능을 향상 시켜야 한다고 공식 문서에서도 언급하고 있습니다. 일반적으로 워드프레스 웹사이트는 HTML, CSS, JavaScript 등으로 직접 코딩 된 일반 웹사이트에 비해 느릴 수 있습니다. 그 이유는 워드프레스의 작동 방식 때문입니다. 목차Ⅰ. WP-Cron의…

  • 리눅스 서버에 워드프레스 설치하는 두 가지 방법: FTP vs wget

    워드프레스는 대표적인 CMS로, 리눅스 서버 환경에서도 수동 설치 방식으로 손쉽게 구축할 수 있습니다. 이 문서에서는 워드프레스 설치를 두 가지 방법, FTP를 이용한 수동 업로드 방식과 wget 명령어를 활용한 설치 방식을 다룹니다. 서버 환경과 사용자의 숙련도에 따라 원하는 방식을 선택하여 진행하시면 됩니다. ※ 이 문서는 호스팅 계정, 데이터베이스 계정, SSL 설정이 완료된 상태를 기준으로…

  • 워드프레스 핑백 트랙백이란? 비활성화 방법 2가지

    핑백과 트랙백은 내 워드프레스 콘텐츠를 다른 웹사이트에 알리는 기술입니다. 하지만 두 가지 기능은 많은 단점을 가지고 있습니다. 워드프레스 핑백과 트랙백을 사용했을 경우 장점과 치명적인 단점에 대해 알아 보겠습니다. 워드프레스 홈페이지 활용 팁 핑백과 트백백 기능과 어떤 점에서 다른지와 미사용 방법과 왜 사용을 지양하는지 알아 보겠습니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행…

답글 남기기

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

Prove your humanity: 7   +   5   =