# PRD - 다중게시판 시스템

> 작성일: 2026-06-02  
> 프로젝트: cvtechn  
> DB: board

---

## 1. 개요

다중게시판 시스템으로, 게시판 종류(일반/갤러리)와 동작 방식을 환경설정 테이블로 관리.  
관리자 메뉴(/admin)에서 게시판 설정 관리, 프론트엔드에서 글쓰기/읽기/댓글 사용.

---

## 2. 게시판 종류

| 종류 | 설명 |
|------|------|
| 일반게시판 | 제목+내용 목록형, 에디터 사용 |
| 갤러리게시판 | 썸네일 이미지 그리드형 목록 |

---

## 3. DB 테이블 설계

### 3-1. 게시판 환경설정 테이블 `ai_board_config`

| 컬럼 | 타입 | 설명 |
|------|------|------|
| brd_id | varchar(30) PK | 게시판 ID (예: notice, gallery) |
| brd_name | varchar(100) | 게시판 이름 (예: 공지사항) |
| brd_type | tinyint | 1=일반, 2=갤러리 |
| use_comment | tinyint | 댓글 사용 여부 (1=사용, 0=미사용) |
| use_write | tinyint | 작성 권한 (1=로그인, 2=누구나) |
| file_cnt | tinyint | 최대 첨부파일 수 (0=첨부불가, 1~5) |
| file_size | int | 파일 1개당 최대 크기(KB) |
| list_cnt | tinyint | 목록 페이지당 게시글 수 (기본 15) |
| sort_order | tinyint | 메뉴 순서 |
| use_yn | tinyint | 활성화 여부 (1=사용, 0=미사용) |

### 3-2. 게시글 테이블 `ai_board`

| 컬럼 | 타입 | 설명 |
|------|------|------|
| idx | int AUTO_INCREMENT PK | 고유번호 |
| brd_id | varchar(30) | 게시판 ID (FK) |
| is_notice | tinyint | 공지글 여부 (1=공지, 0=일반) |
| subject | varchar(300) | 제목 |
| content | longtext | 내용 (에디터) |
| writer | varchar(100) | 작성자 이름 |
| writer_email | varchar(200) | 작성자 이메일 |
| hit | int | 조회수 |
| reg_dt | datetime | 작성일시 |
| mod_dt | datetime | 수정일시 |
| del_yn | tinyint | 삭제여부 (1=삭제, 0=정상) |

### 3-3. 첨부파일 테이블 `ai_board_file`

| 컬럼 | 타입 | 설명 |
|------|------|------|
| idx | int AUTO_INCREMENT PK | 고유번호 |
| board_idx | int | 게시글 idx (FK) |
| ori_name | varchar(300) | 원본 파일명 |
| save_name | varchar(300) | 저장 파일명 (랜덤) |
| file_size | int | 파일 크기(byte) |
| file_ext | varchar(20) | 확장자 |
| img_yn | tinyint | 이미지 여부 (갤러리 썸네일용) |
| reg_dt | datetime | 업로드일시 |

### 3-4. 댓글 테이블 `ai_board_comment`

| 컬럼 | 타입 | 설명 |
|------|------|------|
| idx | int AUTO_INCREMENT PK | 고유번호 |
| board_idx | int | 게시글 idx (FK) |
| content | text | 댓글 내용 |
| writer | varchar(100) | 작성자 이름 |
| writer_email | varchar(200) | 작성자 이메일 |
| reg_dt | datetime | 작성일시 |
| del_yn | tinyint | 삭제여부 |

---

## 4. 기능 명세

### 4-1. 에디터
- **Summernote** (Bootstrap 기반, CDN 사용, PHP 5.6 호환)
- 에디터 내 이미지 삽입 시 base64 저장 (별도 업로드 불필요)
- 첨부파일은 에디터 하단 별도 파일 업로드 영역

### 4-2. 첨부파일
- 환경설정의 `file_cnt` 값만큼 파일 첨부 입력창 생성
- `file_cnt = 0` → 첨부파일 영역 미표시
- 저장 경로: `/upload/board/{brd_id}/`
- 허용 확장자: jpg, jpeg, png, gif, pdf, zip, xlsx, docx

### 4-3. 공지글
- 관리자(lev=99)만 공지 체크 가능
- 공지글은 목록 최상단 고정 (날짜 무관)
- `[공지]` 뱃지 표시

### 4-4. 댓글
- 환경설정에서 게시판별 댓글 ON/OFF
- **로그인한 회원만** 댓글 작성 가능
- 댓글 삭제: 본인 + 관리자만 가능
- 대댓글 없음 (1단계만)

### 4-5. 권한 정리

| 기능 | 비회원 | 일반회원 | 관리자 |
|------|--------|----------|--------|
| 목록/읽기 | O | O | O |
| 글쓰기 | 설정에 따라 | O | O |
| 수정/삭제 | X | 본인만 | 전체 |
| 공지 설정 | X | X | O |
| 댓글 작성 | X | O | O |
| 댓글 삭제 | X | 본인만 | 전체 |

---

## 5. 파일/폴더 구조

```
cvtechn/
├── board/                      ← 프론트엔드 게시판
│   ├── list.php                ← 게시글 목록
│   ├── view.php                ← 게시글 상세
│   ├── write.php               ← 글쓰기/수정 폼
│   └── proc.php                ← 처리 (insert/update/delete/comment)
├── upload/
│   └── board/
│       └── {brd_id}/           ← 게시판별 파일 저장
└── admin/
    └── board/
        ├── config_list.php     ← 게시판 환경설정 목록
        ├── config_form.php     ← 환경설정 등록/수정
        └── config_proc.php     ← 환경설정 처리
```

---

## 6. GNB 추가 메뉴 (관리자)

```
admin/include/top.php 에 추가
├── 게시판
│   ├── 게시판 환경설정
│   └── (각 게시판별 글 목록 - 추후)
```

---

## 7. 구현 순서

- [ ] Step 1. DB 테이블 생성 SQL 작성
- [ ] Step 2. 관리자 - 게시판 환경설정 CRUD
- [ ] Step 3. admin GNB에 게시판 메뉴 추가
- [ ] Step 4. 프론트엔드 - 목록(list.php)
- [ ] Step 5. 프론트엔드 - 상세(view.php) + 댓글
- [ ] Step 6. 프론트엔드 - 글쓰기(write.php) + Summernote + 파일첨부
- [ ] Step 7. 갤러리 게시판 썸네일 목록

---

## 8. 미결정 사항 (컨펌 필요)

| 항목 | 기본값(가정) | 변경 원하면 알려주세요 |
|------|-------------|----------------------|
| 에디터 | Summernote | Quill, Toast UI, TinyMCE |
| 댓글 구조 | 1단계 (대댓글 없음) | 2단계 대댓글 필요하면 변경 |
| 파일 저장 경로 | /upload/board/ | 다른 경로 원하면 변경 |
| 비회원 글쓰기 | 게시판별 설정 | |
| 갤러리 썸네일 크기 | 300x200px | |

---
