[워드프레스] 4. 로딩 : 워드프레스가 페이지를 만드는 순서

워드프레스 해부 4편 - 워드프레스가 페이지를 만드는 순서

작성자

카테고리:

* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

(워드프레스 해부 ④) 로딩

URL을 치면 화면이 뜬다. 그 사이에 워드프레스가 뭘 하는지 대부분 모른 채 지나간다. 근데 이 순서를 알면 “왜 내 코드가 안 먹히지”, “이 훅은 언제 걸어야 하지” 같은 게 한 번에 풀린다. 흐름을 따라가 보자.

  • index.php — 모든 요청의 입구. 사실상 하는 일은 wp-blog-header.php를 부르는 것뿐.
  • wp-load.php — wp-config.php를 읽어 DB 접속·상수를 세팅하고, 코어를 불러올 준비를 한다.
  • wp-settings.php — 진짜 일꾼. 코어 함수 로드 → 활성 플러그인 로드 → 테마 로드 → 그 과정에서 수많은 훅을 발동시킨다(plugins_loaded, init 등).
  • WP_Query — “이 URL은 무슨 콘텐츠를 원하나?”를 판단해 DB에서 글을 가져온다.
  • 템플릿 선택 — 가져온 콘텐츠 종류에 맞는 템플릿 파일을 골라 HTML을 그려 내보낸다.

이 흐름에서 핵심은 훅이 정해진 순간에 발동한다는 거다. 예를 들어 init 훅은 코어·플러그인·테마가 다 로드된 직후에 실행된다. 그래서 커스텀 포스트 타입 같은 걸 등록할 때 init에 걸라고 하는 거다 — 너무 이르면 필요한 함수가 아직 없고, 너무 늦으면 이미 늦다.

직접 해보기

훅이 실제로 순서대로 발동하는 걸 눈으로 보자. 테마의 functions.php(또는 mu-plugin)에 이렇게 걸어두면:

add_action( 'plugins_loaded', fn() => error_log('1) plugins_loaded') );
add_action( 'init',            fn() => error_log('2) init') );
add_action( 'wp',              fn() => error_log('3) wp (쿼리 결정됨)') );
add_action( 'template_redirect', fn() => error_log('4) template_redirect (템플릿 직전)') );

그리고 아무 페이지나 새로고침한 뒤 wp-content/debug.log(3편에서 켠 그 로그)를 보면, 1→2→3→4 순서로 찍힌다. 워드프레스가 페이지를 만드는 순서가 로그에 그대로 남는 거다.

✅ 확인 — wp-load.php가 하는 일을 한 줄로: “wp-config.php를 읽어 DB에 붙고 코어를 로드할 준비를 한다.” 이거면 흐름의 앞단을 이해한 거다.

핵심 훅의 발동 순서

흐름 속에서 훅이 어느 시점에 터지는지 알면 ‘내 코드를 어디 걸지’가 명확해진다. 자주 쓰는 훅을 순서대로 보면 이렇다.

훅시점
plugins_loaded모든 플러그인 로드 직후(이른 초기화)
init코어·플러그인·테마 준비 완료 — 대부분의 등록(CPT·택소노미)이 여기
wp_loaded완전히 로드된 뒤
template_redirect쿼리 끝, 출력 직전
wp_head / wp_footerHTML 머리·발 출력
shutdown요청 종료

메인 쿼리는 언제 도나

환경이 다 뜬 뒤, wp() 단계에서 URL을 해석해 메인 쿼리(14편)를 실행한다. 그 다음 template_redirect를 지나 템플릿 계층(15편)이 그릴 파일을 골라 루프를 돌린다. 큰 골격은 ‘환경 로드 → 쿼리 → 템플릿 선택 → 출력‘ 이 네 박자다.

왜 내 코드가 안 먹힐까 — 대개 타이밍

가장 흔한 원인은 훅을 너무 이르거나 늦게 건 것이다. 예를 들어 CPT 등록을 init보다 이른 곳에서 하면 필요한 함수가 아직 준비 안 됐고, 이미 HTML을 출력한 뒤 리디렉션하면 headers already sent 오류가 난다. ‘이 작업엔 어떤 훅이 맞나’를 위 순서표에서 찾는 게 해법이다.

각 단계를 눈으로 — 디버깅

Query Monitor(32편)의 Hooks 패널은 이번 요청에서 실제로 어떤 훅이 어떤 순서로 터졌는지 보여준다. 추측 대신 실제 발동 순서를 보면 타이밍 문제가 바로 드러난다. 코드에서도 did_action('init') 같은 걸로 특정 훅이 이미 지났는지 확인할 수 있다. 이 로딩 순서를 손에 쥐면, 훅을 다루는 다음 편이 훨씬 쉬워진다.

다음 편은 그 흐름 중 “이 URL은 무슨 콘텐츠?”를 결정하는 부분 — 퍼머링크와 리라이트 규칙이 예쁜 주소를 어떻게 해석하는지 파헤친다.

자주 묻는 질문 (FAQ)

워드프레스는 페이지를 어떻게 만드나요?

index.php → wp-load → wp-settings 순으로 코어·플러그인·테마를 로드한 뒤, 쿼리에 맞는 템플릿을 골라 HTML을 만듭니다.

플러그인은 언제 로드되나요?

코어가 뜬 직후 플러그인이 먼저, 그다음 테마가 로드됩니다. 그래서 플러그인이 테마보다 먼저 훅을 걸 수 있습니다.

코멘트

답글 남기기

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