동적 게시판 생성시 테이블 설계 방법 문의

조회수 79회

동적으로 생성되는 게시판을 구현하려고 합니다. 다른 분들은 어떤식으로 구현하시는지 궁금해서 질문드립니다.

방법1 : 하나의 테이블에 몰아넣는다. ==> 이 방법은 게시판 갯수가 많아질 수 있어서 불가.

방법2 : 컬럼구조는 동일하고 테이블명만 달리해서 동적으로 생성해 준다. ==> 이 방법을 생각하고 있는데 myBatis에 테이블명을 문자열로 받아서 쿼리 실행하는 방법은 보안의 문제가 있지 않나요?

일단 2번을 생각하고 있는데 다른 방법이나 더 좋은 방법을 아시면 공유 부탁드립니다.

  • 테이블을 사용자가 생성할 수 있는 건가요? 엽토군 2022.11.21 13:31
  • 사용자가 게시판 생성 버튼을 클릭하면 게시판이 동적으로 만들어져야 합니다. 테이블 자체는 시스템에서 동적으로 처리되도록 해야하구요. Jang Gun 2022.11.21 13:35

1 답변

  • 방법1에 대하여: 만들려고 하시는 건 일종의 포럼 같은데요. 다른 사람들이 만든 포럼 구현 보면 대체로 '테이블'이라는 이름의 테이블이 있고, '게시물'이라는 이름의 테이블이 있어서, 게시물 자료 하나가 테이블 자료 하나에 속할 수 있는 뭐 그런 구조로들 많이 만듭니다. 얼마나 많은 게시판이 생성될 예정인지는 모르겠지만, 웬만해서는 이런 구성이면 '사용자가 게시판을 만들고 각 게시판에 글쓰기가 가능'해질 겁니다.

    방법2에 대하여: 사용자가 뭔가 입력했다고 해서 그걸 가지고 그대로 CREATE TABLE IF NOT EXISTS 하는 건 좋은 생각이 아닌 것 같습니다. 사용자 입력을 쿼리문에 injection하는 방법 자체는 찾으면 얼마든지 나올 테지만, 하지 마시라고 권하고 싶습니다. (보안 차원부터 해서 여러 문제가 있습니다. 이를테면 테이블명으로 쓰면 안되는 문자 − 이모지 등 − 를 쓰게 해달라는 고객의 요구를 들어줄 방법이 없습니다.)

    • 답변 감사합니다. 게시판은 구조상으로 몇천개도 생생될 수 있습니다. 왜냐하면 사용자 정의로 특정 관리자들이 게시판을 생성하는 기능이 있습니다. 사용자가 뭔가 입력했다고 만들어지는게 아니고 게시판 생성 기능을 사용했을때 게시판이 만들어져야 합니다. 저도 방법2가 좋지 않은 방법이라 생각하는데, 방법1이 걱정되는건 데이터가 많이 쌓였을때 속도문제입니다. 물론 게시판이 몇개 만들어진다고 확정지을 수는 없지만 구조상으로는 사실상 제한이 없습니다. 제한을 두더라도 게시판은 많이 생성될수 있습니다. 그래서 고민입니다. Jang Gun 2022.11.22 15:54
    • 어쩌면 찾고 계신 개념은 "파티셔닝"일지도 모르겠습니다. 자료 자체가 너무 많아서 느려지는 상황에서는 단지 테이블이 여러개라고 해서 갑자기 확 빨라지거나 그러지 않고 인덱스, 파티션, 레플리케이션 등의 대책이 서야 하지요. 그리고 좀 모질게 말씀드리자면 "몇천 개"는 컴퓨터에게는 그렇게 많은 자료가 아니고요. 너무 시작부터 천릿길을 가려고 생각지 마시고, 우선은 제로보드(현 XE)처럼 대용량을 버티는 다른 앱들이 어떻게 하는지 살펴보시면 어떨까 싶네요. 엽토군 2022.11.22 16:08
    • 감사합니다. DB 파티셔닝, Replication등은 테이블도 많아지고 데이터도 많아지고 성능에 문제가 생기면 고려되어야 하는 부분이지만 그 이전에 한테이블로 갈거냐, 아니면 테이블을 개별 게시판 별로 분리하도록 할거냐를 먼저 결정해야 되는데, 기능상, 구조상으로는 몇천개, 몇만개 거의 제한이 없이 게시판이 만들어질 수 있는 상황입니다. 제가 만들고 있는 시스템이 실제 엄청난 사용자가 들어와서 엄청난 데이터를 남길것 같지는 않으니 게시판id를 관리하는 테이블에 게시물 테이블은 게시판id를 가지고 저장되도록 해서 처리하는게 좋을것 같네요. 다시 한번 답변 감사합니다. Jang Gun 2022.11.22 17:24

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.