임동욱 임동욱 09-03
feat: 게시판 구분을 화면에서 감춘다
백엔드에 담을 자리가 없다 — 등록·수정 요청 VO에 필드가 없고 응답의 bbsCd는 구분이
아니라 유형이다. 그래서 골라도 저장되지 않고 조회하면 늘 비어 있었으며, 검색에 쓰면
값이 항상 null이라 목록이 통째로 비었다.

등록 팝업의 칸·목록의 열·검색 대상·필터를 모두 `IS_BOARD_CATEGORY_ENABLED` 하나에
걸어 뒀다. 백엔드에 필드가 생기면 그 한 줄만 true로 바꾸면 된다.

Co-Authored-By: Claude Opus 5 
@03d55353af5e19378a1c0bdcf7be4172f8084591
app/(protected)/(basic)/boards/_components/board-post-columns.tsx
--- app/(protected)/(basic)/boards/_components/board-post-columns.tsx
+++ app/(protected)/(basic)/boards/_components/board-post-columns.tsx
@@ -9,6 +9,7 @@
 import {
   EMPTY_FIELD_PLACEHOLDER,
   formatAnswerStatusLabel,
+  IS_BOARD_CATEGORY_ENABLED,
   formatBoardCategoryLabel,
   formatFaqTypeLabel,
   formatContentExcerpt,
@@ -30,7 +31,7 @@
   };
 }
 
-// 이슈: 구분 값은 백엔드에 아직 없다(협의 중). 자리는 시안대로 두고 값이 생기면 배지로 돌아간다.
+// 백엔드에 구분 자리가 생기면 `IS_BOARD_CATEGORY_ENABLED`가 이 열을 다시 켠다.
 function categoryColumn(): FoxListColumn<BoardPost> {
   return {
     key: 'category',
@@ -80,7 +81,7 @@
 function noticeColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
   return [
     numberColumn(page, pageSize),
-    categoryColumn(),
+    ...(IS_BOARD_CATEGORY_ENABLED ? [categoryColumn()] : []),
     { key: 'title', header: '제목', width: 320, emphasis: true },
     {
       key: 'attachment',
@@ -125,7 +126,7 @@
 
   return [
     numberColumn(page, pageSize),
-    categoryColumn(),
+    ...(IS_BOARD_CATEGORY_ENABLED ? [categoryColumn()] : []),
     {
       key: 'type',
       header: '유형',
app/(protected)/(basic)/boards/_components/board-post-form-modal.tsx
--- app/(protected)/(basic)/boards/_components/board-post-form-modal.tsx
+++ app/(protected)/(basic)/boards/_components/board-post-form-modal.tsx
@@ -15,6 +15,7 @@
 import type { CommonCode } from '@/lib/domain/common-code';
 import {
   BOARD_CATEGORY_OPTIONS,
+  IS_BOARD_CATEGORY_ENABLED,
   INQUIRY_TYPE_OPTIONS,
   type BoardPost,
   type BoardType,
@@ -116,21 +117,23 @@
         <input type="hidden" name="boardType" value={boardType} />
         {!isCreate && post && <input type="hidden" name="id" value={post.id} />}
 
-        <div className={styles.field}>
-          <FoxSelect
-            size="md"
-            label="구분"
-            options={BOARD_CATEGORY_OPTIONS.map((option) => ({
-              value: option.value,
-              label: option.label,
-            }))}
-            value={categoryCode}
-            onValueChange={setCategoryCode}
-            error={Boolean(errors.categoryCode)}
-            hint={errors.categoryCode}
-          />
-          <input type="hidden" name="categoryCode" value={categoryCode} />
-        </div>
+        {IS_BOARD_CATEGORY_ENABLED && (
+          <div className={styles.field}>
+            <FoxSelect
+              size="md"
+              label="구분"
+              options={BOARD_CATEGORY_OPTIONS.map((option) => ({
+                value: option.value,
+                label: option.label,
+              }))}
+              value={categoryCode}
+              onValueChange={setCategoryCode}
+              error={Boolean(errors.categoryCode)}
+              hint={errors.categoryCode}
+            />
+            <input type="hidden" name="categoryCode" value={categoryCode} />
+          </div>
+        )}
 
         {typeOptions && typeOptions.length > 0 && (
           <div className={styles.field}>
lib/domain/board-post-query.ts
--- lib/domain/board-post-query.ts
+++ lib/domain/board-post-query.ts
@@ -12,6 +12,7 @@
 
 import {
   BOARD_CATEGORY_OPTIONS,
+  IS_BOARD_CATEGORY_ENABLED,
   INQUIRY_TYPE_OPTIONS,
   type BoardType,
 } from '@/lib/domain/board-post';
@@ -36,7 +37,9 @@
  */
 export const BOARD_SEARCH_FIELDS: Record<BoardType, readonly BoardSearchFieldOption[]> = {
   notice: [
-    { value: 'category', label: '구분' },
+    ...(IS_BOARD_CATEGORY_ENABLED
+      ? ([{ value: 'category', label: '구분' }] as BoardSearchFieldOption[])
+      : []),
     { value: 'title', label: '제목' },
   ],
   // 1:1문의는 제목 없이 내용만 쓴다 — 제목 검색은 대상이 없다.
@@ -57,9 +60,9 @@
   BoardType,
   { category: boolean; type: boolean; visibility: boolean; answered: boolean }
 > = {
-  notice: { category: true, type: false, visibility: true, answered: false },
-  inquiry: { category: true, type: true, visibility: false, answered: true },
-  faq: { category: true, type: true, visibility: false, answered: false },
+  notice: { category: IS_BOARD_CATEGORY_ENABLED, type: false, visibility: true, answered: false },
+  inquiry: { category: IS_BOARD_CATEGORY_ENABLED, type: true, visibility: false, answered: true },
+  faq: { category: IS_BOARD_CATEGORY_ENABLED, type: true, visibility: false, answered: false },
 };
 
 /**
lib/domain/board-post.ts
--- lib/domain/board-post.ts
+++ lib/domain/board-post.ts
@@ -89,6 +89,16 @@
  * 시안의 공지사항 구분은 "공통 / 메뉴명1, 메뉴명2…"이고 FAQ는 "공통 / FOX PAY"다. 확정되지 않은
  * "메뉴명N"은 임의로 지어내지 않고 두 화면이 공통으로 쓰는 값만 둔다.
  */
+/**
+ * 「구분」을 화면에 낼지. **지금은 백엔드에 담을 자리가 없다** — 등록·수정 요청 VO에 필드가
+ * 없고, 응답의 코드 필드(`bbsCd`)는 구분이 아니라 「유형」이다. 그래서 골라도 저장되지 않고
+ * 조회하면 항상 비어 있으며, 검색에 쓰면 목록이 통째로 빈다.
+ *
+ * 백엔드에 필드가 생기면 **이 한 줄만 `true`로 바꾸면** 등록 팝업의 칸·목록의 열·검색 대상이
+ * 함께 돌아온다.
+ */
+export const IS_BOARD_CATEGORY_ENABLED = false;
+
 export const BOARD_CATEGORY_OPTIONS: readonly CodeOption[] = [
   { value: 'COMMON', label: '공통' },
   { value: 'FOXPAY', label: 'FOX PAY' },
Add a comment
List