Skip to content

Board Asset ​

Board Asset은 도큐먼트라이브러리(ARISAM)에 구현된 게시판의 기본 동작을 재사용 가능한 소스로 추출한 모듈이다. 이 디렉터리는 런타임 서비스나 중앙 데이터베이스가 아니라, 각 포털이 복사·적용한 뒤 자체 데이터 모델과 배포 정책에 맞게 소유하는 출발점이다.

제공 게시판 유형 ​

유형기본 목적추가 동작
일반형(GENERAL)일반 업무 기록댓글·첨부파일
공지형(NOTICE)공지사항 전달상단 고정·읽기 중심
Q&A형(QNA)질문과 답변답변 상태·비밀글 기반 확장
자료실형(ARCHIVE)파일 중심 자료 관리첨부 버전 이력
갤러리형(GALLERY)이미지·콘텐츠 전시썸네일 중심 레이아웃

getBoardVariant 또는 listBoardVariants로 유형을 선택할 수 있다. 유형은 화면을 완전히 별도 구현하는 복제본이 아니라, 공통 게시판 컴포넌트에 기본 라벨·페이지 크기·기능 플래그를 주입하는 프로파일이다. 포털은 프로파일을 그대로 사용하거나 필요한 기능만 확장한다.

제공 범위 ​

영역기본 제공포털이 주입하거나 결정하는 부분
목록검색, 상태 표시, 페이지 이동, 빈 상태, 첨부 개수조회 API, 정렬·필터 확장, 목록 컬럼
상세본문, 작성자·일시, 수정·삭제, 첨부 다운로드상세 표현, 댓글·이력·승인 흐름
작성·수정제목·본문 입력, 저장 상태, 오류 처리저장 API, 리치 텍스트 편집기, 필드 확장
첨부파일다중 선택, 개수·용량 검증, 기존 파일 표시, 제거·다운로드 슬롯업로드 API, 저장소, MIME·보존·접근 정책
권한읽기·작성·수정·삭제·업로드·다운로드·댓글 계약DirectoryService의 portalId 기반 권한 조회와 포털별 정책

적용 원칙 ​

포털은 src/index.ts의 컴포넌트와 타입을 가져온 뒤 BoardDataSource와 BoardPermissionResolver를 구현한다. 모듈은 포털의 DB, 인증 세션, 저장소, API URL을 직접 참조하지 않는다. 따라서 적용이 완료되면 포털이 소스와 런타임을 독립적으로 소유한다.

tsx
import { BoardDetail, BoardEditor, BoardList } from "@/assets/board/src";

const permissions = {
  resolve: (board, post) =>
    directoryService.resolveBoardPermission({
      portalId: "document-library",
      boardId: board.id,
      postId: post?.id,
    }),
};

<BoardList
  board={board}
  dataSource={documentLibraryBoardDataSource}
  permissions={permissions}
  onCreate={() => setMode("create")}
  onSelect={post => setSelectedPost(post)}
/>;

ARISAM 적용 시 주의점 ​

현재 ARISAM의 client/src/features/attachments/api/document-library-api.ts는 게시글 조회·생성·첨부 업로드·버전 업로드·다운로드 URL 발급을 한 API 어댑터로 묶고 있다. ASSET 모듈을 적용할 때 이 파일은 BoardDataSource 구현체로 유지하고, UI 컴포넌트에서 ARISAM 전용 API 경로를 직접 호출하지 않는다.

현재 ARISAM의 shared/upload-policy.ts와 서버 첨부파일 정책은 포털 보안 책임으로 남긴다. ASSET은 파일 개수·크기 검증의 기본값만 제공하므로 MIME 허용 목록, 파일명 정규화, 악성 파일 검사, 저장소 키 생성, 다운로드 권한과 보존 기간은 포털 서버에서 반드시 검증해야 한다.

DirectoryService 연동은 portalId 단위로 독립 적용한다. 권한 객체는 최소한 다음 기능을 포함해야 하며, 신규 포털은 중앙 계약 호환성 목록에 추가한 뒤 적용한다.

ts
resolve({
  portalId,
  boardId,
  postId,
  action:
    "read" | "create" | "edit" | "delete" | "upload" | "download" | "comment",
});

버전 및 인계 ​

ASSET 적용은 자동 런타임 의존성이 아니라 소스 인계다. 포털은 필요한 파일을 복사하거나 내부 패키지 경로로 가져온 뒤 자체 커밋으로 고정한다. ASSET 변경은 포털에 자동 반영되지 않으며, 포털 운영자가 변경 내용을 검토하고 선택적으로 이식한다.