워드프레스 3.x로 의미있는 URL 디자인하기

한국에서도 워드프레스 인기가 높아지고 있다. 수준 높은 워드프레스 전문 에이전시도 눈에 띄고, 그곳을 통해 구축된 사이트들도 훌륭하다. 최근 대한민국에서 가장 핫한 조직 중 하나인 안철수의 진심캠프도 워드프레스로 공식 웹사이트를 만들었던데, 잠깐 둘러보다가 안타까운 점이 눈에 띄어서 몇 자 적어보기로 했다.

주로 블로거들이 쓰던 워드프레스는 3.x 버전에 들어오면서 Custom post type라던가 Post type archive 같은 기능이 개선되면서 어지간한 수준의 웹사이트를 만들기에 부족함이 없는 CMS가 됐다. 아마 워드프레스를 직접 겪어보지 않은 사람들도 많이 들어본 얘기일거다. 그런데 비교적 최근에 만들어진 워드프레스 사이트를 봐도 3.x의 장점을 전혀 살리지 못한 경우를 자주 본다.

예로 안철수 캠프의 사이트의 구조 일부를 살펴보자.

  • 안철수
    • 프로필 /profile
    • 인사말 /greetings
    • 저서 /archives/category/books
      • 안철수의 생각 /archives/1007
    • 철수 이야기 /archives/category/ahn-story
      • 안철수-문재인 단일화 공동합의문 /archives/9490
  • 정책
    • 안철수의 약속 /archives/category/policy
    • 정책 네트워크 '내일' http://tomorrow.jinsimcamp.kr/
  • 국민참여
    • 철수에게 바란다 /proposal-list

프로필, 인사말, 철수에게 바란다 등의 페이지는 워드프레스의 '페이지'로 만든 것 같고, 그 외의 페이지들은 '포스트'로 글을 등록한 다음 카테고리를 부여해서 원하는 글만 저서, 철수 이야기, 안철수의 약속 등으로 분류해 보여준 것 같다. 그리고 글의 종류에 관계없이 개별 글의 URL은 /archive/12345 형식이다. 캠프에서 원하는 내용을 방문자들에게 보여줄 수 있으니 크게 잘못됐다고 지적질 할 일은 아니다. 하지만 블로그를 억지로 홈페이지처럼 만든 느낌이다. 저서 페이지 위쪽에는 "Archive for the ‘저서’ Category"라는 어색한 제목이 나오기도 한다. 더 나은 방법이 있을 것 같지 않은가!

우선 의미있는 URL을 사용하도록 바꿀 수 있다.

위의 URL 구조 대신 아래처럼 하면 어떨까?

  • 안철수
    • 프로필 /profile
    • 인사말 /greetings
    • 저서 /books
      • 안철수의 생각 /books/ahns-thoughts 또는 /books/안철수의-생각
    • 철수 이야기 /ahn-stories
      • 안철수-문재인 단일화 공동합의문 /ahn-story/ahn-moon-agreement 또는 /ahn-story/안철수-문재인-단일화-공동합의문
  • 정책
    • 안철수의 약속 /policies
    • 정책 네트워크 '내일' http://tomorrow.jinsimcamp.kr/
  • 국민참여
    • 철수에게 바란다 /proposals
    • 안철수가 간다 /calls
  • 소식
    • 일정 /schedule
    • 보도자료 및 논평 /media
      • [보도자료]안철수 후보 국민보조금 ‘안철수 펀드’ 출시 /media/
    • 진심캠프 공지사항 /announcements

/archives/category/... 같은 주소도 제 할 일은 하지만 짧고 의미있는 URL은 장점이 많다. 의미있는 URL을 쓰면:

  • 사람이 알아볼 수 있다: /archive/12345 vs. /books/안철수의-생각. 클릭 안 해도 내용을 예상할 수 있다.
  • 웹사이트의 구조를 더 잘 드러낸다: /archive/category/book은 3-depth에 있는 페이지인가? 그런데 왜 책 페이지는 /archive/12345일까?
  • 플랫폼/사용하는 기술에 독립적이다: /archives/category/book을 쓰다 워드프레스가 아닌 다른 CMS로 옮겨 가면 어떻게 할텐가?
  • URL을 짧게 유지할 수 있다.
이런 장점들은 사용성을 개선하는데 도움을 주기도 하지만 기계들(이를테면 검색엔진)이 웹사이트를 이해하는데도 도움이 되는 것으로 알려졌다.

다른 컨텐츠는 다르게 다뤄야 한다.

저서와 보도자료는 서로 다른 종류의 컨텐츠다. 저서에는 아마도 책 제목, 표지 이미지, 출판년도, 출판사, 책 소개, 목차와 같은 정보가 들어가겠지만 보도자료는 대개 제목과 본문 정도면 족하다. (물론 인터넷 서점을 만드는게 아니니까 저서도 책 제목 그리고 설명을 담은 본문으로 충분할지 모른다. 그리고 지금 진심캠프 웹사이트는 간단한 방법을 택했지만 시간이나 숙련된 인력이 부족했기 때문이 아닐까.)

양보해서 저장되는 항목이 같다고 해도 화면에 보여주는 방법이 달라야 할 경우도 많다. 이를테면 보도자료는 언제 게시되었는지를 표시할 필요가 있지만(지금은 날짜까지면 보여진다) 저서의 경우 별로 중요하지 않으니 감춰도 된다. 저서는 책 표지 위주로 보여주는게 적당하겠지만 보도자료는 제목, 일시, 그리고 본문의 일부를 목록으로 보여주는게 적당하겠다. 예를 들어서 말이다.

그 외에도 검색 결과에 포함을 시킬지 여부 등 서로 다른 컨텐트를 구분해서 다뤄야 할 필요성은 상황에 따라 다양하게 생길 수 있는데 반해 블로그 글의 카테고리만으로는 한계가 뚜렷해 보인다.

어떻게 할 수 있나?

앞서 얘기한 Custom post type을 활용하면 된다. 만약 내가 진심캠프 웹사이트를 개발했다면 book, story(어쩌면 이건 기본 post type인 Post를 활용했을지도 모르겠다), policy, presskit, announcement 등의 custom post type을 만들었을거다. 이렇게 하면 각 post type을 백엔드에서 각각 구분해 입력하고 관리할 수 있다. 그리고 각 post type마다 입력 항목을 다르게 구성할 수 있다. 언급했듯 저서에는 출판년도와 출판사를 별도 항목으로 나눠 입력하게 하거나, 철수 이야기 그리고 안철수의 약속이 서로 다른 카테고리와 태그를 쓰도록 한다던지 하는 식 말이다.

더 나아가 여러 사람이 사이트를 나눠 관리하도록 권한을 구성할 수도 있다. 예를 들어 미디어 담당자는 presskit을 관리할 수 있지만 정책(policy)은 쓸 수 없도록 할 수 있다. [1. http://wordpress.stackexchange.com/questions/1684/what-is-the-use-of-map-meta-cap-filter] 카테고리로 구분해서는 이런게 불가능하다.

또 각 post type마다 목록 페이지를 다르게 구성할 수 있다. 물론 카테고리만으로 구분했을 때도 category-book.php, category-policy.php와 같은 식으로 템플릿을 나눠 만들 수 있지만 post type을 따로 만들면 목록 뿐 아니라 개별 페이지도 single-book.php, single-policy.php와 같이 깔끔하게 구분해 개발할 수 있다. [1. 자세한건 http://codex.wordpress.org/Template_Hierarchy#Visual_Overview 참고]

정리

이 글에서는 구체적인 개발 방법을 밝히기 보다는 워드프레스 3.x 이후에 추가된 Custom post type을 활용해 어떻게 더 나은 (블로그의 스멜이 느껴지지 않는) 웹사이트를 만들 수 있는지를 간단하게 소개했다. 각각의 구현 방법에 대해서는 이미 공개된 자료가 워낙 많아 어렵지 않게 찾을 수 있을 것이다.

About Sanghyun Park

a.k.a Baxang. Software engineer lives in Sydney, Australia born in Seoul, South Korea.