ZALNAS에서 성격이 서로 다른 여러 게시판을 하나의 board_data 테이블로 관리하면 특정 게시판에서만 사용하는 컬럼이 계속 늘어나게 됩니다. 그 결과 대부분의 게시물에서는 불필요한 컬럼이 비어 있고, 새로운 콘텐츠 유형을 추가할 때마다 공용 게시판 구조와 기존 기능에 영향을 줄 가능성이 커집니다.
이를 해결하기 위해 게시물의 공통 정보는 기본 테이블에 유지하고, 게시판 또는 콘텐츠의 성격에 따른 전문 정보는 별도의 확장 테이블로 분리하는 구조를 적용하는 것이 적절합니다.
공통 게시물 테이블 + 콘텐츠 유형별 확장 테이블 구조를 장기 기준으로 사용합니다.
다만 현재 운영 중인 board_data를 즉시 축소하거나 교체하지 않고, 보드게임·이벤트처럼 새롭게 연계되는 콘텐츠부터 확장 구조를 적용한 뒤 기존 게시판을 점진적으로 전환합니다.
board_data 게시물 공통 정보 ├─ board_post_seo SEO 정보 ├─ boardgame_post_details 보드게임 게시물 전용 정보 ├─ event_post_details 행사·공연 게시물 전용 정보 ├─ board_post_tags 태그 연결 ├─ board_post_media 이미지·첨부파일 └─ content_board_links 포스팅봇 원본과 게시물 연결
board_data에는 대부분의 게시판에서 공통으로 사용하는 최소 항목을 둡니다.
확장 테이블은 개별 게시판 ID마다 만드는 것이 아니라 콘텐츠 유형 또는 업무 도메인별로 만듭니다. 보드게임 게시판이 여러 개 생기더라도 보드게임 전문 정보는 하나의 구조를 공동으로 사용해야 테이블 증가와 중복 개발을 방지할 수 있습니다.
보드게임의 제작자, 출시연도, 인원, 시간, 난이도 같은 정보는 단순한 게시물 부가정보가 아니라 보드게임 자체를 설명하는 구조화된 정보입니다. 따라서 boardgame_games를 보드게임 정보의 원본 도메인 테이블로 유지하고, 리뷰·전략·가이드·게임 소개 게시물이 해당 게임을 참조하는 방식이 적절합니다.
boardgame_games
│
├─ 게임 소개 게시물
├─ 리뷰 게시물
├─ 전략 게시물
└─ 가이드 게시물
포스팅봇 초안 생성
↓
content_items / content_versions 저장
↓
검토 및 발행 승인
↓
board_data에 공통 게시물 생성
↓
유형별 확장 테이블 저장
↓
content_board_links에 원본-게시물 연결
공통 게시물, 확장 정보, 원본 연결 정보는 하나의 트랜잭션으로 저장해 일부 데이터만 등록되는 상황을 방지합니다.
EAV와 대형 JSON 구조는 초기에는 유연해 보이지만 자료형 검증, 검색, 정렬, 인덱스 설계와 데이터 정합성 유지가 어려워집니다. JSON은 검색 대상이 아닌 비정형 부가정보에만 제한적으로 사용합니다.
장기적으로는 board_data를 공통 게시물 표현 계층으로 두고, 전문 데이터는 도메인 테이블과 유형별 확장 테이블에서 관리합니다. 포스팅봇의 원본은 중앙 콘텐츠 플랫폼에서 버전과 상태를 관리하고, 게시판에는 발행 결과를 연결합니다.
운영 안정성을 위해 전체 게시판을 동시에 개편하지 않고, 1차 보드게임과 2차 이벤트 연계 기능부터 신규 구조를 적용한 후 검증된 패턴을 기존 게시판으로 확대합니다.