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

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)

워드프레스에서 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

  • 워드프레스 플러그인: Health Check&Troubleshooting | 플러그인 충돌 테스트

    워드프레스 플러그인 충돌 테스트를 위해 모든 플러그인을 직접 비활성화하면 방문자에게 사이트가 깨져 보일 수 있습니다. 이때 사이트는 그대로 유지하고 관리자만 테스트할 수 있는 Health Check & Troubleshooting 플러그인을 사용할 수 있습니다. ✅ Health Check&Troubleshooting 플러그인 설치 플러그인 명을 검색해서 플러그인 충돌 테스트를 해야 한다면 먼저 플러그인을 설치합니다. ✅ 플러그인 충돌 테스트 관리자 페이지…

  • 클라우드웨이즈 워드프레스 관리자 페이지 로그인 방법

    클라우드웨이즈 워드프레스 관리자 페이지에 로그인을 하는 방법입니다. 먼저 CloudWays에 관리자 페이지에서 My Applications으로 이동 후 Access Details 탭에서 Admin Panel URL에서 로그인 페이지로 이동할 수 있습니다. 1️⃣ 클라우드웨이즈 워드프레스 관리자 정보 확인 유저 네임은 이메일 주소로 설정이 되어 있으므로 이메일 주소를 그대로 사용하면 되며, 변경할 수 있는 정보는 관리자 페이지 비밀 번호와 DataBase…

  • WP Fastest Cache 플러그인: 기본 설정 및 속도 테스트

    워드프레스를 설치하고 테마까지 적용한 초기 상태에서는 일반 사용자용 페이지와 관리자 페이지 모두 빠른 속도를 체감할 수 있습니다. 그러나 플러그인이 하나둘 추가되면서 사이트는 점점 느려지고 무거워지기 마련입니다. 이러한 성능 저하를 해결하기 위해 많은 캐시 플러그인들이 사용되지만, WP Fastest Cache 플러그인은 가볍고 간편한 인터페이스를 제공하면서도 기능 면에서 결코 부족하지 선택지 중 하나입니다.WP Fastest Cache는 프리…

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

    아이노드Inode는 Linux/Unix 파일 시스템에서 사용되는 자료 구조입니다. 모든 파일과 디렉토리는 1개의 아이노드를 가지고 으며,각 1개의 아이노드는 64Byte로 이루어져 있습니다. 워드프레스 호스팅을 사용하면서 Inode 수가 많아지다 체크하게 되었습니다. 디렉토리 내용을 확인할 수 있는 ls 명령어에 -i 옵션을 주었을 경우 inode 갯수를 확인할 수 있습니다. 명령어로 Inode 확인 wp-includes 28개의 아이노드가 있음을 알 수 있으며(폴더를…

  • 워드프레스 301 리다이렉트: 정의 및 설정 방법

    워드프레스로 구축한 웹사이트에서 301 리다이렉트 설정은 사이트 이전이나 URL 변경 시 방문자와 검색엔진이 새 주소로 자동 이동하도록 하는 중요한 작업입니다. 워드프레스 301 리다이렉트를 사용해야 하는 이유와 실제 적용 사례를 살펴보겠습니다. 301 리다이렉트는 현재 URL에서 다른 URL로 보내는 것을 의미합니다. 이는 전화기의 착신 전환과 비슷한 개념으로, 사용자가 기존 주소로 접속해도 자동으로 새 주소로 안내하는…

  • [WP] 테마포레스트(themeforest)란?

    테마포레스트(themeforest)는 HTML 템플릿, 워드프레스 및 다른 CMS 등의 플랫폼에서 고객이 22$, 39$, 66$ 등과 같이 테마 및 플러그인을 구매할 수 있는 마켓플레이스입니다. 결제는 신용카드 or 페이팔 결제가 가능합니다. 1. 테마포레스트에서 테마 및 플러그인 찾는 방법 themeforest는 Envato Market로 알려져 있기도 하며, 워드프레스 유료 테마 및 플러그인을 판매하기도 합니다. 많이 알려진 avada 테마도 themeforest에서…

답글 남기기

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

Prove your humanity: 4   +   5   =