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

  • 워드프레스 버튼 만들기&링크 추가 방법

    워드프레스에서 콘텐츠를 작성하다 보면 추가 설명이 필요하여 내부 및 외부 링크를 만들어야 하는 경우가 있습니다. 웹사이트의 좋은 사용자 인터페이스(UI)는 좋은 사용자 경험(UX)로 연결되기 때문입니다. 워드프레스 버튼은 구텐베르크 에디터에서 빼 놓을 수 없는 매우 주요한 기능으로 자리 잡았습니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행 방식 및 구조Ⅱ. 워드프레스 성능 최적화1️⃣ WP-Cron 테스트2️⃣…

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

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

  • 워드프레스 호스팅 비교: 2025년 추천 호스팅 TOP 7

    도메인을 구매하고 워드프레스 웹사이트를 운영하기 전에는, 웹 호스팅 업체 선택이 매우 중요합니다. 호스팅 성능과 서버 위치, 고객 지원, 그리고 캐시 및 보안 기능 등이 사이트 속도와 안정성에 직접적인 영향을 미치기 때문입니다. 이 페이지에서 7개의 워드프레스 호스팅 비교를 하며, 고객 지원(채팅 및 티켓), 서버 안정성, 속도, 서버 위치, 가격 등의 항목을 분석합니다. 추천할 수…

  • Autoptimize: 워드프레스 최적화 플러그인

    워드프레스 성능 향상을 위한 방법으로 캐시 플러그인 외 최적화 플러그인 설치를 고려할 수 있습니다. 대표적인 성능 향상 플러그인으로 Autoptimize, Asset CleanUp, Perfmatters 이 세 가지 플러그인을 들 수 있습니다. 3개의 플러그인은 코드 및 리소스 최적화 분야에서 가장 대표적으로 언급되는 워드프레스 성능 향상 플러그인들입니다. 캐시 플러그인은 페이지 로딩 속도를 빠르게 하기 위해 서버 부담을…

  • [WP-Linux] 아이노드란? 워드프레스 호스팅 Inode 주 원인은 많은 사진 양.

    아이노드Inode는 Linux/Unix 파일 시스템에서 사용되는 자료 구조입니다. 모든 파일과 디렉토리는 1개의 아이노드를 가지고 으며,각 1개의 아이노드는 64Byte로 이루어져 있습니다. 워드프레스 호스팅을 사용하면서 Inode 수가 많아지다 체크하게 되었습니다. 디렉토리 내용을 확인할 수 있는 ls 명령어에 -i 옵션을 주었을 경우 inode 갯수를 확인할 수 있습니다. 목차Ⅰ. WP-Cron의 실행 과정과 성능 문제🔄 WP-Cron의 실행 방식 및…

  • [WP] 워드프레스 무차별 대입 공격(brute-force attack)을 막는 9가지 방법

    워드프레스 CMS로 만든 웹 사이트를 운영하게 되면, 관리자 주소는 https://www.domain.com/wp-admin이 됩니다. 무차별 대입 공격에 취약할 수 있는 이유는 관리자 페이지 주소 wp-admin 주소가 그대로 노출되기 때문입니다. 워드프레스를 포함한 웹 사이트의 관리자 주소가 admin과 같은 주소를 사용해서 무차별 대입 공격(brute-force attack)에 노출되는 것은 되도록 방지해야 합니다. 무차별 대입 공격(brute-force attack)이란? 웹 사이트나 컴퓨터 및…

답글 남기기

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

Prove your humanity: 9   +   5   =