안녕하세요. 린치핀소프트 한광희입니다.

“템플릿 계층 구조 이해하기”

워드프레스는 “템플릿 계층 구조(Template Hierarchy)” 가 있습니다. 이 템플릿 계층구조는 왜? 어디서 필요한 것일까요?

많은 워드프레스 서적/블로그등을 참고하시면 워드프레스는 템플릿 계층 구조를 통해서 포스트/페이지와 같은 콘텐츠를 효과적으로 보여준다고 설명합니다.

오늘 템플릿 계층구조에 대한 설명을 통해 워드프레스가 어떻게 효과적으로 콘텐츠를 보여주는 시스템을 지원하고, 해당 시스템을  쉽게 이해할수 있는지 알려드리겠습니다.

screenshot-developer.wordpress.org 2015-08-24 19-38-02

<워드프레스 계층 구조>

우선 위의 계층구조 도표를 살펴보겠습니다. 계층 구조의 순서는 좌측 부터 우측으로 나아갑니다.(좌측부터 시작하여 우측에서 최종 대응)

좌측부터 살펴보면 Singular Page, Archive Page. Search Result Page 등등이 있고 최우측에 보면 index.php 파일 하나가 있는것을 보실수 있습니다.

그리고 그 사이를 다양한 php 파일등이 선과 함께 나열되어 있습니다.

워드프레스 계층구조란?

워드프레스 계층구조를 이해하려면 우선 워드프레스가 다양한 콘텐츠/택소노미(Taxonomy)를 지원하는것부터 이해해야합니다.

워드프레스는 초기 블로깅 엔진으로 시작했지만 시간의 흐름에따라 오늘날 다양한 콘텐츠를 관리하는 시스템으로 자리잡게 되었습니다.

워드프레스의 데이터베이스(DB)를 통해 콘텐츠 관리시스템을 관찰해보면 분류되는 콘텐츠만 포스트(글),페이지,택소노미(카테고리,태그), 메뉴, 댓글(코멘트), 링크(Link), 리비전(revision), 미디어(attachement) 등등 여러가지가 있으며 이런 콘텐츠는 Custom Post Type(CPT) , Custom Taxonomy등의 기능을 이용하여 다시 크게 콘텐츠를 분류하여 확장 할 수 있습니다.

일예로서는 우커머스(Woocommerce)와 같은 전자상거래 쇼핑몰에서 각 상품은 Product를 포스트타입을 생성하여 하나의 확장된 콘텐츠로서도 관리됩니다.

 

이렇게 수많은 콘텐츠가 생성되고 콘텐츠타입을 확장할 수 있다면 뒤따라 오는 문제가 바로 해당 콘텐츠를 보여주는 페이지를 제작하는 문제입니다. 각 콘텐츠는 분류뿐만아니라 포스트타입별로 갖추고 있는 데이터 필드 종류가 다르며 웹 페이지에서 해당 포스트 타입을 매끄럽게 잘 보여줄수 있도록 템플릿이 구축 되어야 합니다.

즉, 수없이 확장할수 있는 포스트(콘텐츠)에 대응하여 포스트를 보여주는 방식인 템플릿의 계층관계를 명시하는것이 템플릿 계층 구조입니다.

아직도 조금 어려우신가요?

위의 계층구조를 토대로 워드프레스 테마와 플러그인 개발/운용하게 되면 확장되거나 추가 생성한 콘텐츠(포스트 타입)등을 사용자에게 보여주는 페이지 템플릿을 구성하는데 있어 큰 고민을 할 필요가 없다는 정도만 이해하셔도 좋습니다.

 

하나의 예를 들어보겠습니다. 제가 Book이라는 “사용자 정의형 포스트 타입”을 생성하였다고 가정하겠습니다.

그러면 해당 Book이라는 콘텐츠 타입의 각 콘텐츠의 모든 부분(세부 사항)을 보여주는 템플릿이 하나 필요합니다. 추가적으로 방금 말씀드린 하나의 콘텐츠뿐만 아니라 모든 Book타입의 포스트를 보여주는 아카이브 형식의 템플릿이 필요합니다. 또 Book이라는 콘텐츠가 택소노미(카테고리,태그)를 가지고 있다면 각 카테고리/태그별로 Book 포스트를 보여주는 템플릿들이 필요하게 됩니다.

이게 다일까요? 아닙니다. 추가적으로 Book포스트 각각에 달린 댓글과 Book을 작성한 저자의 소개 페이지가 필요하다면 또 각기 댓글과 Book포스트를 작성한 작성자를 소개하는 템플릿도 필요합니다.

이렇듯 Book이라는 사용자정의형포스트타입을 하나 추가할때 정말 여러가지 템플릿을 제작해야합니다. 매번 이렇게 해야한다면 정말 번거롭고 어려운 작업이 되겠지요.

 

이 때, 템플릿 계층 구조는 정말 도움이 된답니다. 우선 Book의 아카이브 페이지는 위의 계층구조에 따르면 archive-Book.php라는 파일이 템플릿에 대응됩니다. 또, Book의 싱글 포스트 템플릿은 single-Book.php에 대응됩니다. 만약 앞서 말한 이 2가지 템플릿을 제작하지 못했다면 워드프레스는 Book이라는 콘텐츠를 이용자에게 보여주지 못할까요?

아닙니다. 놀랍게도 워드프레스는 해당 템플릿이 존재하지 않으면 아카이브는 archive.php 템플릿을 차용하여 콘텐츠를 보여주며 싱글포스트는 single.php 템플릿을 차용하여 콘텐츠를 보여줍니다.

다른예로 여러분이 “저자”라는 택소노미(Taxsonomy)를 생성하였다고 합니다. 그래서 위의 “저자”라는 택소노미 중 “린치핀소프트”라는 텀(Term)페이지를 보고싶다고 워드프레스에 요청합니다.

워드프레스가 페이지 템플릿을 참조하는 절차는 다음과 같습니다.

1. 해당요청이 저자(택소노미)를 검색하는 요청인가?

2. 워드프레스 테마가 저자(택소노미) 중 린치핀소프트(텀)을 보여주는 템플릿이 있는가? (Taxonomy-저자-린치핀소프트.php) 검색.

3. 위의 템플릿 없다면, 저자(택소노미) 를 지원하는 템플릿이 있는가? (Taxonomy-저자.php)검색.

4. 위의 템플릿이 없다면 taxonomy.php 파일을 검색합니다.

5. 위의 taxonomy.php파일도 테마파일내 존재하지 않으면 archive.php , archive.php도 존재하지 않으면 최종적으로 index.php파일을 불러와 이용자에게 보여주게됩니다.

위의 순서를 템플릿 계층구조 표와 이해하시면 왼쪽에 위치한 파일부터 검색하여 해당 파일이 존재하지 않으면 우측에 있는 파일로 검색을 요청하고 최종적으로 index.php까지 검색되는것을 보실수가 있습니다.(보통 정확하고 구체적으로 명시된 템플릿부터 시작하여 좀더 범용적인 템플릿파일을 검색한다고 생각하시는게 쉽습니다)

 

이런 계층구조의 순서를 이해하면 우리가 제작한 사용자정의형 CPT와 택소노미도 위의 계층구조를 이해하여 정확한 템플릿을 만들어 기대한 효과를 연출할 수 있습니다.

CPT 또는 택소노미를 생성하고 해당 CPT,택소노미를 보여주는 템플릿을 생성하여 테마폴더에 위치시키면 나머지 작업은 워드프레스가 URL과 고유주소셋팅값을 해석하여 계층구조에 따라 콘텐츠를 보여줍니다.

 

이런면에서 본다면 위의 계층구조는 사실 그리 복잡한것이 아니고 간단한 구조입니다. 또한, 테마나 플러그인을 통해 포스트를 개발할때의 템플릿은 위의 계층구조만 염두해두면 전혀 문제가 없습니다!