Skip to content

Latest commit

ย 

History

History
93 lines (60 loc) ยท 7.94 KB

File metadata and controls

93 lines (60 loc) ยท 7.94 KB
layout post
title ์›Œ๋“œํ”„๋ ˆ์Šค์™€ Cron
description WP-Cron์€ ์›Œ๋“œํ”„๋ ˆ์Šค์—์„œ ์ž‘๋™ํ•˜๋Š” cron ์‹œ์Šคํ…œ์œผ๋กœ Unix/Linux ์‹œ์Šคํ…œ์˜ cron๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. WP-Cron์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
thumbnail https://usefulpa.s3.amazonaws.com/images/2014/wp_cron_clock.jpg
category wordpress
tags
wordpress
cron
devops

cron์€ ์‹œ์Šคํ…œ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ๋˜๋Š” ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์–ด๋–ค ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” UNIX ๋ช…๋ น์ด๋‹ค. ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ˜๋ณตํ•ด์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค์„ ๋ฏธ๋ฆฌ ์Šค์ผ€์ค„๋ง(scheduling)ํ•ด ๋‘๋ฉด ์ง€์ •๋œ ์‹œ๊ฐ„์— ํ•ด๋‹น ์ž‘์—…์ด ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฑ์—…์ด๋‚˜ ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ ๊ฐ™์€ ๋ฐ˜๋ณต ์ž‘์—…์ด๋‚˜ ์ด๋ฉ”์ผ ๋ฐœ์†ก ๋“ฑ ์‹œ๊ฐ„์ด ์ œ๋ฒ• ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฐฐ์น˜(batch) ์ž‘์—… ๋“ฑ์— ํญ๋„“๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์š”๊ธดํ•œ ๋ช…๋ น์ด๋‹ค.

์›Œ๋“œํ”„๋ ˆ์Šค(WordPress)๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ด๋Ÿฐ cron๊ณผ ์œ ์‚ฌํ•œ ์ž‘์—…๋“ค์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ ์ƒ๊ธด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ์ŠคํŒ… ์‹œ๊ฐ„์„ ์˜ˆ์•ฝํ•ด ๋‘” ๊ธ€์„ ๋ฐฐํฌ(publish)ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ๊ธ€์ด ์˜ฌ๋ผ์˜ค๋ฉด ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๋ฐœ์†กํ•˜๊ฑฐ๋‚˜ ํ…Œ๋งˆ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ ์›Œ๋“œํ”„๋ ˆ์Šค๋„ UNIX์˜ cron๊ณผ ์œ ์‚ฌํ•œ ๊ฐœ๋…์˜ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, UNIX์˜ cron๊ณผ ๋น„๊ตํ•˜๋Š” ์˜๋ฏธ๋กœ ํ”ํžˆ 'WP-Cron'์ด๋ผ ๋ถˆ๋ฆฐ๋‹ค.

WP-Cron์˜ ๋™์ž‘

ํ†ต์ƒ์ ์ธ cron์ด ์Šค์ผ€์ค„์— ๋งž์ถฐ ์ง€์ •๋œ ์‹œ๊ฐ„์— ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ WP-Cron์€ PHP๊ธฐ๋ฐ˜์˜ ์›น๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์ธ ์›Œ๋“œํ”„๋ ˆ์Šค์˜ ํŠน์„ฑ ์ƒ, ์›น์š”์ฒญ์ด ๋“ค์–ด ์˜ฌ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋œ๋‹ค. ์ฆ‰ ์‚ฌ์šฉ์ž๊ฐ€ ์›Œ๋“œํ”„๋ ˆ์Šค ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ์— ๋งค๋ฒˆ cron์ด ์‹คํ–‰๋˜๋Š”๋ฐ, ์ด ๋•Œ ์›Œ๋“œํ”„๋ ˆ์Šค๋Š” ์ž์ฒด cron ์Šค์ผ€์ค„ ์‹œ์Šคํ…œ์—์„œ ํ˜„์žฌ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  cron ์ž‘์—…์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŒ์•ฝ (๊ด€๋ฆฌ์ž๋ฅผ ํฌํ•จ) ์•„๋ฌด๋Ÿฐ ๋ฐฉ๋ฌธ๋„ ์—†๋Š” ์‚ฌ์ดํŠธ๋ผ๋ฉด WP-Cron์€ '๊ฒฐ์ฝ”' ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค (์ด๋ ‡๊ฒŒ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” cron ์ž‘์—…๋“ค์€ ๊ณ„์† ๋ชจ์˜€๋‹ค๊ฐ€ ์–ธ์  ๊ฐ€ ํ•œ ์‚ฌ๋žŒ์˜ ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ ๊ทธ๋™์•ˆ ๋ฏธ๋ค„ ๋’€๋˜ cron ์ž‘์—…๋“ค์ด ๋ชจ์กฐ๋ฆฌ ํ•œ๋ฒˆ์— ์‹คํ–‰๋˜์–ด ์ ‘์†์†๋„๊ฐ€ ๋А๋ ค ๋ณด์ด๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ธฐ๋„ ํ•œ๋‹ค).

์›Œ๋“œํ”„๋ ˆ์Šค ๋‚ด๋ถ€์ ์œผ๋กœ cron์€ ๋‹ค์Œ 2๊ฐœ์˜ ํŒŒ์ผ์ด ๋‹ด๋‹นํ•œ๋‹ค:

  • /wp-includes/cron.php : ๋ชจ๋“  cron ์ฒ˜๋ฆฌ ๊ด€๋ จ API ํ•จ์ˆ˜๋“ค์ด ๋“ค์–ด ์žˆ์Œ
  • /wp-cron.php : cron ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ

WP-Cron์˜ ๋‚ด๋ถ€ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์œ„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ๋กœ ํ•˜๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ์ด๋“ค WP-Cron ๊ด€๋ จ API์˜ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•๋งŒ ์†Œ๊ฐœํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.

WP-Cron ์‚ฌ์šฉํ•˜๊ธฐ

WP-Cron์€ ํฌ๊ฒŒ **cron ์ด๋ฒคํŠธ(event)**๋ผ๊ณ  ๋ถ€๋ฅด๋Š” cron ์ž‘์—… ๋ถ€๋ถ„๊ณผ ์ด๋“ค ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ์ฃผ๊ธฐ์ธ ์Šค์ผ€์ค„(schedule) ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, cron ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ API ํ•จ์ˆ˜์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 1์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์–ด๋–ค ์ž‘์—…์„ cron ์ด๋ฒคํŠธ๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ ์ž‘์—…์„ ์•ก์…˜ ํ›…(hook)์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ wp_schedule_event()๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

// ์ƒˆ cron ์ด๋ฒคํŠธ ์ƒ์„ฑ
add_action( 'prefix_hourly_event_hook', 'prefix_do_this_hourly' );
function prefix_do_this_hourly() {
	// 1์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์ˆ˜ํ–‰๋  ์–ด๋–ค ์ž‘์—…
}
// ์•ž์˜ cron ์ด๋ฒคํŠธ๋ฅผ ์Šค์ผ€์ค„์— ์ถ”๊ฐ€
wp_schedule_event( time(), 'hourly', 'prefix_hourly_event_hook' );

์ด ๋•Œ wp_schedule_event()์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ 'hourly'๋Š” cron์˜ ์‹คํ–‰๊ฐ„๊ฒฉ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์›Œ๋“œํ”„๋ ˆ์Šค์—๋Š” ๊ธฐ๋ณธ์œผ๋กœ hourly, twicedaily, ๋ฐ daily์˜ 3๊ฐ€์ง€ ๊ฐ„๊ฒฉ(intervals)์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉฐ, cron_schedules ํ•„ํ„ฐ ํ›…์„ ํ†ตํ•ด ์–ผ๋งˆ๋“ ์ง€ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์Œ์€ cron ์Šค์ผ€์ค„์— ์ƒˆ๋กœ weekly๋ผ๋Š” ์Šค์ผ€์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ๋‹ค.

function my_add_weekly( $schedules ) {
	// ์ƒˆ๋กœ 'weekly' ์Šค์ผ€์ค„์„ ์ถ”๊ฐ€
	$schedules['weekly'] = array(
		'interval' => 604800,
		'display' => __('Once Weekly')
	);
	return $schedules;
}
add_filter( 'cron_schedules', 'my_add_weekly' ); 

์ฐธ๊ณ ๋กœ, ์›Œ๋“œํ”„๋ ˆ์Šค ์‚ฌ์ดํŠธ ๋‚ด์—์„œ ์‹ค์ œ๋กœ ์–ด๋–ค cron ์ž‘์—…๋“ค์ด ๋“ฑ๋ก๋˜์–ด ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด ๋ณด๋ ค๋ฉด WP Crontrol ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์‹คํ–‰ ์ค‘์ธ cron ์ž‘์—…์„ ํ™•์ธํ•  ๋ฟ ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ/์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.

WP Crontrol

WP-Cron ์ฃฝ์ด๊ธฐ

์•ž์„œ๋„ ๋งํ–ˆ์ง€๋งŒ WP-Cron์€ ์ด๋ฆ„์€ ๊ฐ™์€ 'cron'์ด๊ธด ํ•˜์ง€๋งŒ 'ํ† ์ข… cron(UNIX cron)'๊ณผ๋Š” ๋‹ค๋ฅธ ์„ฑ๊ฒฉ์˜ cron์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐฉ๋ฌธ์ž๊ฐ€ ๊ฑฐ์˜ ์—†๋Š” ์‚ฌ์ดํŠธ(์•ž์„œ ์„ค๋ช…)
  • ์บ์‹œ(cache) ์‹œ์Šคํ…œ์ด ์ ์šฉ๋œ ์‚ฌ์ดํŠธ
  • ์ธ์ฆ, IP ํ•„ํ„ฐ๋ง, ์ฟ ํ‚ค ํ•„ํ„ฐ๋ง ๋“ฑ์œผ๋กœ wp-cron.php ํ˜ธ์ถœ ์ž์ฒด๊ฐ€ ์ฐจ๋‹จ๋œ ์‚ฌ์ดํŠธ

๋˜ํ•œ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์•„์ฃผ ๋งŽ์•„ ํŠธ๋ž˜ํ”ฝ์ด ๋†’์€ ์‚ฌ์ดํŠธ์ธ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ WP-Cron์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฉ๋ฌธ์ž๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์‹คํ–‰๋˜๋Š” cron์˜ ์„ฑ๊ฒฉ ์ƒ, ๋™์‹œ์— ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ, ์ด๋Š” ์‚ฌ์ดํŠธ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์›Œ๋“œํ”„๋ ˆ์Šค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ cron ์ฒ˜๋ฆฌ์— ๋ฝ(lock) ์‹œ์Šคํ…œ์„ ์ ์šฉํ•ด ๋‘๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๋‚˜์นœ ์šฐ๋ ค๋Š” ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ฒ ์ง€๋งŒ.

๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ WP-Cron์„ ์ฃฝ์ด๋Š” ๊ฑด ์–ด๋–จ๊นŒ? ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด cron์€ ์›Œ๋“œํ”„๋ ˆ์Šค ์† ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๋„๊ฒŒ ๋˜๋ฉด cron์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์€ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์šฐ๋ฆฌ๋Š” WP-Cron์—์„œ ๋ฒ—์–ด๋‚˜ ์ง„์งœ cron์œผ๋กœ ๊ฐˆ์•„ํƒˆ ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  WP-Cron์€ ๋„์ž. /wp-config.php ํŒŒ์ผ์— ๋‹ค์Œ ์ƒ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

// ๋‚ด๋ถ€ WP-Cron ๋น„ํ™œ์„ฑํ™”
define('DISABLE_WP_CRON', true);

๊ทธ๋Ÿฐ ๋‹ค์Œ, ์ง„์งœ cron์„ ๊นจ์šฐ์ž. ๋งŒ์•ฝ 5๋ถ„ ๋‹จ์œ„๋กœ ํ˜ธ์ถœํ•˜๋ ค๋ฉด, crontab์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด wp-cron.php๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. (crontab์˜ ์‚ฌ์šฉ๋ฒ•์€ ์ƒ๋žตํ•œ๋‹ค)

*/5 * * * * wget -q -O - http://www.your-site.com/wp-cron.php

์ด ๋•Œ wget ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•œ -O ์˜ต์…˜์€ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์ด ์•„๋‹Œ ํ‘œ์ค€์ถœ๋ ฅ(STDOUT)์œผ๋กœ ๋ณด๋‚ด๋Š” ์˜ต์…˜์ด๋ฉฐ, wget ๋Œ€์‹  ์˜ˆ๋ฅผ ๋“ค๋ฉด curl ๊ฐ™์€, HTTP ์›น์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์ด๋ฉด ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋“  ๋ฌด๋ฐฉํ•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ