규도자 개발 블로그

태그와 포스트의 다대다 관계를 이용한 복합메뉴형 게시판 본문

Topic

태그와 포스트의 다대다 관계를 이용한 복합메뉴형 게시판

규도자 (gyudoza) 2019. 12. 4. 22:31

태그와 포스트의 다대다 관계를 이용한 복합메뉴형 게시판

십수년간 이 블로그가 개설돼있는 티스토리나 기타 다른 많은 블로그, 게시판류의 어플리케이션들을 써왔는데 항상 불편했던 점이 있었다. 바로 글의 분류시스템이다.

 보통 이런 류의 게시판형 어플리케이션들은 카테고리 기능을 지원하고 있고, 그 카테고리는 상위 카테고리를 지정할 수 있어서 만약 내가 내가 축구에 대한 글 쓴다면 스포츠 아래에 축구라는 카테고리를 만들어 축구 카테고리에 글을 써서 분류할 수 있다.

 하지만 예를 들어 내가 축구영화에 대한 글을 쓰고 싶은데 축구와 영화, 두 카테고리 모두에 노출시키고 싶다. 해당 카테고리가 같은 상위카테고리를 공유하고 있지 않는다면 어떡해야할까. 기존의 게시판 형태라면 당신은 둘 중 하나의 카테고리를 선택하던가 혹은 축구영화라는 새로운 카테고리를 생성해야할 것이다. 이런 불편함을 해소할 수 있는 게 바로 내가 말하고 싶은 태그와 포스트의 다대다 관계를 이용한 복합메뉴형 게시판이다.

 

 착안의 계기는 간단한 react JS + Django 어플리케이션 만들기라는 게시물 때문인데 내 블로그의 메뉴를 보면 알 수 있다시피 React와 Django의 카테고리가 나뉘어져 있으나 이 포스트는 Python을 상속하는 Django라는 카테고리에 작성돼있다. 사실 이 카테고리는 React & Next.js카테고리 안에 들어가도 되는 내용인데 말이다. 물론 태그를 통해 소팅하여 React도, Django도 포함하고 있는 해당 게시물을 조회할 수 있겠지만 냉정하게 말해서 태그로 찾아보는 사람은 거의 없다. 태그 클라우드기능도 껐을 뿐더러 이걸 켜놔도 내가 그동안 블로그에 썼던 수많은 태그들이 뒤죽박죽으로 등장하여 직관성이 떨어진다. 그래서 이 태그라는 놈을 아예 카테고리화하여 쓸 수 있게 하면 이런 블로그 포스트와 더불어 다른 데이터 모델들을 분류하는 데에 있어서 좀 더 편하지 않을까 하는 생각에서 착안한 것이다.

 아직은 실물이 없고 곧 django강좌와 함께 만들 예정인데 일단 개념을 정립하자면 이렇다. Post는 다수의 Category를 상속받는데 이 Category는 같은 Category를 상속받을 수 있는 모델이며 일종의 태그라고 할 수 있다. 그리고 이렇게 만들어진 특정한 태그만 상속관계를 나타낼 수 있게 카테고리화하여 메뉴처럼 노출시킨다는 것이 내가 만들고자 하는 분류화의 골자이다.

 

위 게시물을 예로 시나리오를 그리자면 다음과 같다.

 

  1. Javascript라는 태그를 생성한다.

  2. Javascript를 상속하는 React라는 태그를 생성한다.

  3. Python이라는 태그를 생성한다.

  4. Python을 상속하는 Django라는 태그를 생성한다.

  5. 태그 목록을 조회하여 이름은 직접 정하고 해당 메뉴를 눌렀을 때 볼 게시물들의 태그를 선택하는 식으로 메뉴를 생성한다. 구체적인 예를 들자면 새로운 메뉴를 생성할 때 "자바스크립트"라고 이름을 정하고 Javascript라는 태그를 선택하면 해당 메뉴에서 Javascript라는 태그를 추가한 모든 게시물을 볼 수 있게 한다. 그리고 "자바스크립트"라고 명명한 메뉴 하위에 "리액트"라고 명명한 메뉴를 새로 만들고 React라는 태그를 선택하면 Javascript/React로 정의할 수 있는 메뉴가 생기는 것이다. 이런 식으로 Python/Django라는 메뉴도 생성한다.

  6. 생성 후엔 이러한 모습이 될 것이다. 괄호 안 숫자는 게시물의 갯수이다.

    전체 글 갯수 (0)
    자바스크립트 (0)
        └리액트 (0)
    파이썬 (0)
        └장고 (0)

  7. 위의 간단한 react JS + Django 어플리케이션 만들기 게시물을 작성했다고 가정하고, 카테고리를 선택하듯이 태그를 선택한다. 이 글은 React와 Django두곳에서 노출시키고 싶다. 그러니 React와 Django라는 태그를 선택하여 게시하도록 하자.

  8. 그러면 최종적으로 이러한 모습이 되는 것이다.

    전체 글 갯수 (1)
    자바스크립트 (1)
        └리액트 (1)
    파이썬 (1)
        └장고 (1)

    어떤 메뉴로 들어가더라도 저 글은 해당 태그를 포함하고 있는 글이므로 노출시킬 수 있다.

 

이러한 개념이라고 할 수 있다. 만약에 React를 최상위 카테고리로 두고싶다 하면 5번 과정에서 말한 것처럼 그냥 새로이 카테고리를 명명하고(예: "리액트2") 태그를 Javascript/React를 선택하면 된다. 그러면 메뉴는 아마 이런 모습이 될 것이다.


전체 글 갯수 (1)
자바스크립트 (1)
    └리액트 (1)
파이썬 (1)
    └장고 (1)
리액트2 (1) ←이게 새로 생김


만약에 더 세분화된 카테고리를 만들고자 하면, 예를 들어 React안에서 또 개발(Development)과 상용(Production)메뉴를 나누고 싶다면 시나리오 2번과 4번에서처럼 React를 상속받는 새로운 태그를 생성하면 될 것이다. 그럼 최종적으로 Javascript/React/Development와 Javascript/React/Production이라는 태그까지 생성이 되며 해당 태그를 이용한 메뉴를 자기 멋대로 생성하면 되는 것이다.

 

나중에 django강좌를 시작할 때쯤에 이 개념을 적용하여 게시판을 만들 예정이므로 스스로도 개념을 확립하고 정립하기 위해 구체적으로 적어보았다. 이미 있는 시스템일 수도 있지만 내가 아직 써본 적이 없을 뿐더러 개발하고 나면 꽤나 유용하게 쓰일 것 같다.

 

Comments