The Key's Personal store

삽질러들을 구원하리라.

워드프레스 기반으로 개발 후기

이번 프로젝트에서 워드프레스를 이용하여 개발 하였다. 이에 대해 느낀점을 몇자 적어 본다.

내가 맡은 부분은 단말기와 사용자를 중간에서 연결 해주는 중계서버 기능, 웹 페이지, 관리 기능을 맡았다.
단말기 (API)-> 중계서버 및 관리 사이트 및 사용자 사이트 (API)-> 모바일

일반적으로 워드프레스를 쓴다고 한다면 다양한 플러그인과, 테마가 제공 된다는 게 큰 메리트 일 것이다.
워드프레스는 기본적으로 블로깅을 위한 CMS이다. 일반적인 사이트를 만드는 데, 워드프레스를 쓴다면 괜찮은 선택이 될 수도 있다.

그러나 일반적이지 않은 사이트를 만들 경우 워드프레스는 좋은 선택이 아닌 것 같다.
그 이유는

1. 관리자 페이지 UI
관리자 페이지가 한국에서 일반적으로 생각하는 형태의 UI가 아니다.
그렇기 때문에 실제 관리를 하는 사람이 이에 익숙해 있는 상태여야 나중에 불만이 없다.
기획단계에 관리자 UI를 만들고 실제 그대로 구현해야 했을 경우 이건 아예 새로 만들어야 하는 수준에 이를 수도 있다.
이건 정말 심각한 문제다.
다행히 이번 프로젝트는 워드프레스로 진행한다는 것을 고객에게 인식 시켰기 때문에 괜찮을 수 있었다.

2. 워드프레스의 한계
일반적인 사이트, 그러니까 게시판이 있고, 회사 소개가 있고, 회원정보를 받을 수 있는 사이트는 워드프레스를 사용해도 큰 무리가 없다.
그러나 이번 프로젝트처럼 중계서버 용도와 그에 맞는 관리 기능등 워드프레스에서 기본적으로 제공되지 않는 기능을 추가로 개발하기에는 워드프레스는 좋은 선택이 아니다.
왜냐하면 대부분을 기능을 어차피 개발 해야 하기 때문이다. 그럴려면 차라리 개발자에게 익숙한 환경에서 개발하는 게 더 효율적이다.

3. 워드프레스 국내 활성화
우리나라는 워드프레스 자체가 활성화 되어 있지 않은 것 같았다.
워드프레스 개발 관련 문서는 몇몇 블로그에서만 보이고, 대부분은 영문 문서였다.
플러그인은 워드프레스를 사용하는 데 큰 이유 중 하나이다.
이번에 SMS와 이니시스 결제 모듈을 붙여야 했었는데, 이건 굉장히 범용적인 기능이라 플러그인이 있을 줄 알았다.
그러나 없었다.
이걸 유료로 서비스해주는 플러그인은 있었다.

4. 필수적인 플러그인 커스터마이징
플러그인이 있다고 하더라도 이걸 기획에 맞춰서 개발하려면 커스터마이징 해야 한다.
개인이 사용한다면 개인이 플러그인에 맞춰서 쓰면 되지만, 기획에 맞게 개발하고, 납품을 해야 하는데, 그렇게 할 수도 없다.
필연적인 커스터마이징이 들어가야 한다.

5. 일반적이지 않은 DB 구조
진짜 할만이 많은 부분이다.
워드프레스는 DB 구조 자체가 짜여져 있다. 일반적으로 게시판 글은 wp_posts와 wp_postmeta 이 두개의 테이블에 모든 정보를 저장한다. wp_posts는 기본적인 글정보가 들어가고, wp_postmeta는 wp_posts를 기준으로 조인 되어 기타 정보들이 저장 된다.
단 두개의 테이블에 모든 정보를 저장하는 게, 나중에 속도 문제가 어떻게 될지는 모르겠다. 그걸 차치하더라도 일반적인 JOIN이 되지 않는 다.
일반적으로 JOIN은 A테이블과 B테이블의 키를 기준으로 JOIN을 한다. 워드프레스도 wp_posts의 ID와 wp_postmeta의 post_id를 조인하여 사용한다.

기본적인 형태는 다음과 같을 것이다.
SELECT *
FROM wp_posts
INNER JOIN wp_postmeta AS M1 ON M1.post_id = wp_posts.ID
where ID = 251

여기서 문제가 발생한다. 왜냐하면 키 251로 등록된 wp_postmeta는 한 건이 아니기 때문에 meta의 개수만큼 같은 내용이 반복해서 나온다.

이를 해결하기 위해서는 다음과 같이 INNER JOIN을 사용해야 한다.

 

Table 자체를 새로 만들어서 사용해도 되지만, 프로젝트 초반에는 대부분의 기능을 워드프레스 안에서 해결하기 위해 새로운 테이블 만드는 걸 제한하였다.
프로젝트 후반에는 결국 새로운 테이블을 만들 수 밖에 었었다.

6. HOOK
워드프레스의 꽃은 HOOK 인거 같다. 거의 모든 상태에서 HOOK을 걸어서 내가 처리해야 할 것들을 만들 수 있다.
근데 이게 은근히 개발을 힘들게 하는 원인이였다. 워드프레스를 잘 알고 있으면야 이럴 때는 이 HOOK을 저럴때는 저 훅을 써야겠다는 느낌이 딱 오겠지만, 그런 거 없이 처음 개발하려는 사람에게는 내가 원하는 시점의 HOOK이 어떤 것 인지, 있긴 한 건지 찾아 봐야 하는 데, 이게 많이 쓰는 훅이면 금방나오지만 잘 쓰이지 않는 기능이라면 찾는 데 오래 걸린다.

7. 워드프레스 쿼리
5번의 내용과 일맥상통하는 이야기이다. 워드프레스는 WP_Query라는 클래스를 사용하여 직접 쿼리를 짜지 않고도 사용할 수 있다. 처음에는 이를 이용해 볼려고 노력 했는데, 나중에는 sql로 직접 하게 되었다. 일반 웹개발자라면 sql은 어느 정도 다룰 수 있을 것이다. 그러나 WP_Query를 아는 사람은 얼마나 될까. 사용법이 그렇게 어렵지는 않다. 그러나 하나의 문제로 인해 완전히 접게 되었는데, 그건 바로
wp_posts와 wp_postmeta를 동시에 쿼리 할 수 없다는 것이다. 왜냐하면 WP_Query 클래스도 자체적으로 sql을 만드는 데, wp_posts와 wp_postmeta는 AND 조건으로 물려 있다. 이렇게 할 수 밖에 없는 게 5번에서 말했던 문제가 발생하기 때문이다.
이런 문제를 다른 분은 어떻게 풀었나 봤더니, 기본 내용을 불러온 후 for문을 돌리면서 추가적으로 한번더 쿼리를 날리는 방식으로 처리 하였다.

8. 게시판 문제.
한국에서는 게시판 하면 딱 떠오르는 전형적인 이미지가 있다. 블로깅과는 형태 자체가 다르다. 그렇기 때문에 이걸 게시판 형태로 변경해야 하는 문제가 있다.
KBOARD라는 한국형 게시판을 쓸 수 있게 해주는 플러그인이 있다. 아마 우리나라에서 워드프레서에서 가장 많이 사용하는 플러그인이 아닌 가 싶다. 기본적인 기능은 무료이지만 추가적인 기능을 사용하기 위해서는 유료이다. 얼마 안 되는 돈이지만 예상치 못한 지출이였다.

결국 쓸수 있는 건, 게시판 기능과 회원정보 기능 이였는데, 이마저도 100% 그대로 사용하지 못하고, 커스터마이징이 들어가야 했다.
이럴거면 차라리 워드프레스를 쓰지 않는 게 나은 선택이 아니었나 싶다.

워드프레스로 구축하면 금방 개발 할 수 있을 것 같은가? 일반적인 사이트라면 그렇다. 그러나 일반적이지 않은 사이트를 개발 한다면 피해야 한다고 생각 한다.

Leave a Reply

댓글 남기기