워드프레스는 최적화된 오픈 소스다. 유수의 뛰어난 프로그래머가 끊임없이 다듬고 또 많은 사용자에 의해 버그 리포팅이 된다. 소스는 더욱 정규화되고 단단해지지만, 코어 엔진이 어떻게 원하는 데이터를 던져 주는지 파악하기란 더욱 어려워 진다. 오픈 소스임에도 불구하고 말이다.
과연, 워드프레스는 어떤 방식으로 콘텐츠를 불러올까?
한 사용자가 나의 블로그에 접속하여 특정 태그 (Xdebug)를 클릭했다고 하자.
웹 브라우저 URL이 다음과 같이 나온다.
https://guspark.wordpress.com/tag/xdebug/
워드프레스는 해당 URL을 분석하고 아래와 같은 작업을 한다.
- 태그 페이지를 요청했군.
- 태그에 해당하는 템플릿을 준비하자.
- “xdebug”라는 태그가 첨부된 포스트를 찾아 출력하자.
세부적으로 알아보자.
1. 요청 URL을 해석해 콘텐츠를 선택하는 동작은 WP_Query 객체의 parse_query() 메소드가 수행한다. URL에서 쿼리 매개 변수를 추출한다. https://guspark.wordpress.com/tag/xdebug/와 https://guspark.wordpress.com?tag=xdebug/는 같다.(xdebug 값을 가진 태그를 추출)
2. 추출된 쿼리 매개변수를 MySQL 쿼리로 변환하여 콘텐츠를 가져온다. 이 과정에서는 WP_Query 객체의 get_posts() 메소드를 이용한다. get_posts()는 쿼리 매개변수를 모두 SQL문으로 변환한 후 MySQL에 쿼리를 직접 요청하여 원하는 콘텐츠를 추출한다.
3. 추출된 콘텐츠는 WP_Query 객체에 저장되어 워드프레스 루프에서 사용되고 필요 시 캐시로 저장된다.
4. 워드프레스는 쿼리 타입과 반환된 포스트의 개수를 근거로 테마에서 템플릿을 결정하며, 쿼리의 결과는 루프에 전달된다.