임동욱 임동욱 08-19
fix: 게시판 3화면이 서버에서 클라이언트 함수를 부르던 문제
`board-post-columns.tsx`가 `'use client'` 모듈인데 서버 컴포넌트인 page가 거기 함수를 직접
호출했다 — 클라이언트 모듈의 non-component export는 서버에서 참조 프록시라 부르면 던진다
("Attempted to call faqColumns() from the server"). 공지·FAQ·1:1문의 세 화면이 모두 같았다.

컬럼을 클라이언트에서 만들도록 옮겼다. `boardPostColumns(boardType, page, pageSize)` 하나가
세 팩토리를 갈라 주고, `BoardPostList`가 이미 받고 있던 boardType·currentPage·pageSize로 직접
부른다. page는 columns prop을 넘기지 않는다.

옮기지 않고 `'use client'`만 떼는 방법은 안 된다 — 컬럼의 `render`가 함수라 서버에서 만들어
클라이언트로 넘기는 것 자체가 RSC 경계를 못 넘는다. 만드는 쪽을 클라이언트로 옮겨야 한다.

확인: FAQ 목록을 클라이언트에서 렌더해 컬럼 8개(번호·구분·유형·제목·작성자·등록일·사용여부·
관리)가 서고 콘솔 오류가 없다.

Co-Authored-By: Claude Opus 5 
@298786b12a10a692f217114c3c06503ff7c17665
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
@@ -54,7 +54,7 @@
   };
 }
 
-export function noticeColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
+function noticeColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
   return [
     numberColumn(page, pageSize),
     {
@@ -99,7 +99,7 @@
   ];
 }
 
-export function faqColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
+function faqColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
   return [
     numberColumn(page, pageSize),
     {
@@ -136,7 +136,7 @@
   ];
 }
 
-export function inquiryColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
+function inquiryColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
   return [
     numberColumn(page, pageSize),
     {
@@ -184,3 +184,13 @@
     actionsColumn('inquiry'),
   ];
 }
+
+export function boardPostColumns(
+  boardType: BoardType,
+  page: number,
+  pageSize: number
+): FoxListColumn<BoardPost>[] {
+  if (boardType === 'notice') return noticeColumns(page, pageSize);
+  if (boardType === 'faq') return faqColumns(page, pageSize);
+  return inquiryColumns(page, pageSize);
+}
app/(protected)/(basic)/boards/_components/board-post-list.tsx
--- app/(protected)/(basic)/boards/_components/board-post-list.tsx
+++ app/(protected)/(basic)/boards/_components/board-post-list.tsx
@@ -4,10 +4,7 @@
 import { useState, useTransition, type ReactNode } from 'react';
 import { FoxButton } from '@fox/core/components/fox-button';
 import { FoxIconButton } from '@fox/core/components/fox-icon-button';
-import {
-  FoxListContainer,
-  type FoxListColumn,
-} from '@fox/core/components/fox-list-container';
+import { FoxListContainer } from '@fox/core/components/fox-list-container';
 import { FoxSelectText } from '@fox/core/components/fox-select-text';
 import { FoxTab } from '@fox/core/components/fox-tab';
 import { FoxTabItem } from '@fox/core/components/fox-tab-item';
@@ -24,12 +21,12 @@
 } from '@/lib/domain/board-post-query';
 import { BoardPostFormModal } from './board-post-form-modal';
 import styles from './board-post-list.module.scss';
+import { boardPostColumns } from './board-post-columns';
 
 interface BoardPostListProps {
   boardType: BoardType;
   title: string;
   breadcrumb: { label: string; href?: string }[];
-  columns: FoxListColumn<BoardPost>[];
   items: BoardPost[];
   query: BoardPostQuery;
   currentPage: number;
@@ -47,7 +44,6 @@
   boardType,
   title,
   breadcrumb,
-  columns,
   items,
   query,
   currentPage,
@@ -70,7 +66,7 @@
         title={title}
         breadcrumb={breadcrumb}
         caption={title}
-        columns={columns}
+        columns={boardPostColumns(boardType, currentPage, query.pageSize)}
         rows={items}
         rowKey={(row) => row.id}
         totalCount={totalCount}
app/(protected)/(basic)/boards/faqs/page.tsx
--- app/(protected)/(basic)/boards/faqs/page.tsx
+++ app/(protected)/(basic)/boards/faqs/page.tsx
@@ -2,7 +2,6 @@
 import { verifySession } from '@/lib/auth/dal';
 import { fetchBoardPosts } from '@/lib/data/repositories/board-post-repository';
 import { parseBoardPostQuery } from '@/lib/domain/board-post-query';
-import { faqColumns } from '../_components/board-post-columns';
 import { BoardPostList } from '../_components/board-post-list';
 
 export const metadata: Metadata = { title: 'FAQ' };
@@ -30,7 +29,6 @@
         { label: '게시판 관리(고객센터)' },
         { label: 'FAQ' },
       ]}
-      columns={faqColumns(currentPage, query.pageSize)}
       items={items}
       query={query}
       currentPage={currentPage}
app/(protected)/(basic)/boards/inquiries/page.tsx
--- app/(protected)/(basic)/boards/inquiries/page.tsx
+++ app/(protected)/(basic)/boards/inquiries/page.tsx
@@ -2,7 +2,6 @@
 import { verifySession } from '@/lib/auth/dal';
 import { fetchBoardPosts } from '@/lib/data/repositories/board-post-repository';
 import { parseBoardPostQuery } from '@/lib/domain/board-post-query';
-import { inquiryColumns } from '../_components/board-post-columns';
 import { BoardPostList } from '../_components/board-post-list';
 
 export const metadata: Metadata = { title: '1:1문의' };
@@ -30,7 +29,6 @@
         { label: '게시판 관리(고객센터)' },
         { label: '1:1문의' },
       ]}
-      columns={inquiryColumns(currentPage, query.pageSize)}
       items={items}
       query={query}
       currentPage={currentPage}
app/(protected)/(basic)/boards/notices/page.tsx
--- app/(protected)/(basic)/boards/notices/page.tsx
+++ app/(protected)/(basic)/boards/notices/page.tsx
@@ -2,7 +2,6 @@
 import { verifySession } from '@/lib/auth/dal';
 import { fetchBoardPosts } from '@/lib/data/repositories/board-post-repository';
 import { parseBoardPostQuery } from '@/lib/domain/board-post-query';
-import { noticeColumns } from '../_components/board-post-columns';
 import { BoardPostList } from '../_components/board-post-list';
 
 export const metadata: Metadata = { title: '공지사항' };
@@ -30,7 +29,6 @@
         { label: '게시판 관리(고객센터)' },
         { label: '공지사항' },
       ]}
-      columns={noticeColumns(currentPage, query.pageSize)}
       items={items}
       query={query}
       currentPage={currentPage}
Add a comment
List