프로젝트 전체 문서 작성 규칙 및 템플릿 정의 ## 주요 내용 - 문서 작성 5대 원칙 (명확성, 일관성, 완전성, 접근성, 유지보수성) - 문서 구조 표준 (필수 섹션, 섹션 순서) - 문서 유형별 가이드 (배포, 기능 명세, API, 트러블슈팅) - 작성 규칙 (마크다운 스타일, 명명 규칙, 코드 예시, 표, 다이어그램) - 예시 템플릿 (배포 가이드, API 문서) - 문서 검토 체크리스트 ## 문서 유형별 표준 구조 ### 배포/설치 가이드: 1. 문서 개요 → 2. 목차 → 3. 시스템 개요 → 4. 배포 전 확인사항 → 5. 배포 절차 → 6. 기능 명세 → 7. API 명세 → 8. 프론트엔드 구현 → 9. 테스트 가이드 → 10. 문제 해결 → 11. 변경 이력 ### API 문서: 1. 문서 개요 → 2. 목차 → 3. API 개요 → 4. 인증 방식 → 5. 엔드포인트 목록 → 6. 엔드포인트 상세 → 7. 에러 코드 → 8. 예시 코드 → 9. 변경 이력 ## 적용 대상 - 모든 신규 문서는 이 가이드를 따름 - 기존 문서는 점진적으로 표준화 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
20 KiB
문서 작성 가이드
📋 문서 개요
목적: 프로젝트 문서 작성 표준 및 규칙 정의 대상: 개발자, 시스템 관리자 버전: v1.0.0 최종 수정일: 2026-01-26
📑 목차
문서 작성 원칙
1.1 핵심 원칙
명확성 (Clarity)
- 독자가 한 번에 이해할 수 있도록 작성
- 전문 용어는 최초 사용 시 설명 추가
- 모호한 표현 금지
일관성 (Consistency)
- 프로젝트 전체에서 동일한 용어 사용
- 문서 구조를 표준화하여 예측 가능하게
- 날짜 형식, 버전 표기 등 통일
완전성 (Completeness)
- 배포/설치/사용에 필요한 모든 정보 포함
- "뻔하다"고 생각되는 내용도 명시
- 전제 조건, 환경 요구사항 명확히
접근성 (Accessibility)
- 목차를 통한 빠른 탐색 가능
- 섹션별 명확한 제목
- 코드 예시, 다이어그램 활용
유지보수성 (Maintainability)
- 버전 관리 및 변경 이력 기록
- 작성일, 수정일 명시
- 관련 문서 링크 제공
1.2 독자 고려사항
대상 독자 정의
- 누가 이 문서를 읽는가? (개발자, 관리자, 사용자)
- 독자의 기술 수준은? (초급, 중급, 고급)
- 독자가 달성하고자 하는 목표는?
독자의 관점에서 작성
- "무엇을 할 수 있는가" 중심으로 설명
- 단계별 가이드 제공
- 예상 질문에 대한 답변 포함
문서 구조 표준
2.1 필수 섹션
모든 문서는 다음 섹션을 포함해야 함:
-
문서 헤더
# [문서 제목] ## 📋 문서 개요 **목적**: [문서의 목적을 한 문장으로] **대상**: [독자 대상] **버전**: [버전 번호] **최종 수정일**: [YYYY-MM-DD 형식] -
목차
## 📑 목차 1. [섹션 1](#섹션-1) 2. [섹션 2](#섹션-2) ... -
본문 (문서 유형에 따라 다름)
-
관련 문서 (선택)
## 📚 관련 문서 - [문서 제목 1](./link-to-doc1.md) - [문서 제목 2](./link-to-doc2.md) -
문서 푸터
--- **작성자**: [작성자명] **최종 수정일**: [YYYY-MM-DD] **문서 버전**: [버전 번호]
2.2 섹션 순서 가이드
배포/설치 가이드 문서 구조:
- 문서 개요
- 목차
- 시스템 개요
- 배포 전 확인사항
- 배포 절차
- 기능 명세 (필요 시)
- API 명세 (필요 시)
- 프론트엔드 구현 (필요 시)
- 테스트 가이드
- 문제 해결
- 변경 이력
- 관련 문서
- 문서 푸터
기능 명세 문서 구조:
- 문서 개요
- 목차
- 기능 개요
- 요구사항
- 기술 명세
- 사용자 시나리오
- 인터페이스 명세
- 데이터베이스 스키마
- API 명세
- 에러 처리
- 보안 고려사항
- 성능 요구사항
- 테스트 시나리오
- 변경 이력
- 관련 문서
API 문서 구조:
- 문서 개요
- 목차
- API 개요
- 인증 방식
- 엔드포인트 목록
- 엔드포인트 상세 (각 엔드포인트별)
- 설명
- HTTP 메서드
- URL
- 요청 파라미터
- 요청 본문
- 응답 형식
- 예시 요청/응답
- 에러 코드
- 공통 에러 코드
- 예시 코드
- 변경 이력
문서 유형별 가이드
3.1 배포/설치 가이드
목적: 시스템을 배포하고 설치하는 방법 안내
반드시 포함할 내용:
- 환경 요구사항 (OS, 버전, 의존성)
- 배포 전 확인사항
- 단계별 배포 절차 (명령어 포함)
- 배포 검증 방법
- 롤백 절차
- 문제 해결 가이드
- 배포 체크리스트
작성 예시:
## 배포 절차
### 3.1 데이터베이스 백업 (필수)
```bash
# 배포 전 백업
mysqldump -u root -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
중요: 모든 배포 전에 반드시 백업을 수행하세요.
3.2 마이그레이션 실행
-
마이그레이션 파일 확인
ls -l db/migrations/ -
마이그레이션 실행
npm run db:migrate -
결과 확인
# 예상 출력: Batch 1 run: 2 migrations
### 3.2 기능 명세서
**목적**: 기능의 요구사항, 동작, 인터페이스를 상세히 기술
**반드시 포함할 내용**:
- [ ] 기능 개요 및 목적
- [ ] 사용자 시나리오 (최소 3개)
- [ ] 화면 또는 UI 설명 (스크린샷 포함 권장)
- [ ] 데이터베이스 스키마 (ERD 권장)
- [ ] API 엔드포인트 목록
- [ ] 에러 처리 방식
- [ ] 보안 고려사항
- [ ] 성능 요구사항
**작성 예시**:
```markdown
## 4.1 사용자 로그인 기능
### 목적
사용자가 이메일과 비밀번호로 시스템에 인증하는 기능
### 사용자 시나리오
#### 시나리오 1: 정상 로그인
1. 사용자가 로그인 페이지 접속
2. 이메일 입력: user@example.com
3. 비밀번호 입력: ********
4. "로그인" 버튼 클릭
5. 시스템이 인증 확인
6. 대시보드로 리다이렉트
#### 시나리오 2: 잘못된 비밀번호
1. 사용자가 잘못된 비밀번호 입력
2. "로그인" 버튼 클릭
3. 에러 메시지 표시: "이메일 또는 비밀번호가 올바르지 않습니다"
4. 로그인 실패 카운트 증가 (3회 초과 시 계정 잠금)
### API 명세
#### POST /api/auth/login
**요청 본문**:
```json
{
"email": "user@example.com",
"password": "password123"
}
응답 (성공):
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR...",
"user": {
"id": 1,
"email": "user@example.com",
"name": "홍길동"
}
}
응답 (실패):
{
"success": false,
"message": "이메일 또는 비밀번호가 올바르지 않습니다"
}
### 3.3 API 문서
**목적**: API 엔드포인트 사용 방법 안내
**반드시 포함할 내용**:
- [ ] API 개요 및 Base URL
- [ ] 인증 방식 (JWT, API Key 등)
- [ ] 전체 엔드포인트 목록 (표 형식)
- [ ] 각 엔드포인트 상세 (HTTP 메서드, URL, 파라미터, 요청/응답)
- [ ] 공통 에러 코드 테이블
- [ ] 예시 요청/응답 (curl, JavaScript 등)
- [ ] Rate Limiting 정보 (있는 경우)
**작성 예시**:
```markdown
## API 개요
**Base URL**: `http://api.example.com/v1`
**인증 방식**: Bearer Token (JWT)
모든 요청 헤더에 다음을 포함해야 함:
Authorization: Bearer YOUR_JWT_TOKEN
## 엔드포인트 목록
| 메서드 | 경로 | 설명 | 인증 필요 |
|--------|------|------|-----------|
| POST | /auth/login | 로그인 | No |
| POST | /auth/logout | 로그아웃 | Yes |
| GET | /users/:id | 사용자 조회 | Yes |
| PUT | /users/:id | 사용자 수정 | Yes |
## POST /auth/login
**설명**: 이메일과 비밀번호로 로그인
**요청**:
```bash
curl -X POST http://api.example.com/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "password123"
}'
응답 (200 OK):
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"email": "user@example.com",
"name": "홍길동"
}
}
에러 코드:
400: 잘못된 요청 (이메일 또는 비밀번호 누락)401: 인증 실패 (잘못된 이메일 또는 비밀번호)429: 너무 많은 요청 (Rate Limit 초과)
### 3.4 트러블슈팅/문제 해결 가이드
**목적**: 흔히 발생하는 문제와 해결 방법 제공
**반드시 포함할 내용**:
- [ ] 문제별 섹션 구분
- [ ] 증상 (오류 메시지, 로그 등)
- [ ] 원인 분석
- [ ] 해결 방법 (단계별)
- [ ] 예방 방법
**작성 예시**:
```markdown
## 8.1 데이터베이스 연결 오류
### 증상
Error: connect ECONNREFUSED 127.0.0.1:3306
### 원인
1. MySQL 서버가 실행되지 않음
2. 잘못된 DB 접속 정보 (호스트, 포트, 사용자명, 비밀번호)
3. 방화벽이 포트 차단
### 해결 방법
1. MySQL 서버 상태 확인
```bash
sudo systemctl status mysql
-
서버가 실행되지 않으면 시작
sudo systemctl start mysql -
접속 정보 확인 (.env 파일)
cat .env | grep DB_예상 내용:
DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASSWORD=your_password -
방화벽 확인 (리눅스)
sudo ufw status sudo ufw allow 3306
예방 방법
- 서버 재부팅 시 MySQL 자동 시작 설정
sudo systemctl enable mysql - 접속 정보를 환경 변수로 관리하고 git에 커밋하지 않기
### 3.5 변경 이력 (Changelog)
**목적**: 버전별 변경사항 기록
**작성 규칙**:
- 최신 버전이 위로 (역순)
- 버전 번호는 Semantic Versioning (MAJOR.MINOR.PATCH)
- 변경사항을 카테고리별로 분류
- **기능 추가** (Added)
- **기능 변경** (Changed)
- **기능 삭제** (Deprecated)
- **기능 제거** (Removed)
- **버그 수정** (Fixed)
- **보안** (Security)
**작성 예시**:
```markdown
## 변경 이력
### v1.2.0 (2026-01-26)
**기능 추가**:
- 대시보드 TBM 빠른 작업 배너 추가
- 페이지 접근 권한 기반 표시/숨김 처리
- `checkTbmPageAccess()` 함수 추가 (`modern-dashboard.js`)
**기능 변경**:
- 안전 체크리스트 카테고리 표시 개선 (그룹화)
**버그 수정**:
- TBM 팀원 자동 선택 시 중복 선택 문제 해결
- 날짜 선택 시 Draft 세션 우선 처리 로직 수정
**커밋**: `67e9c08`
### v1.1.0 (2026-01-20)
**기능 추가**:
- 작업 인계 시스템 추가
- TBM 상세보기 모달 추가
**커밋**: `4802069`
### v1.0.0 (2026-01-15)
**초기 배포**:
- TBM 시스템 기본 기능 구현
- 데이터베이스 스키마 생성 (5개 테이블)
- API 엔드포인트 17개
**커밋**: `4d0c4c0`
작성 규칙
4.1 마크다운 스타일
제목 레벨
#: 문서 제목 (1개만)##: 주요 섹션###: 하위 섹션####: 세부 항목- 5단계 이상 중첩 금지
코드 블록
- 언어 지정 필수:
```javascript,```bash,```sql - 주석으로 설명 추가
- 예상 출력 포함
좋은 예시:
```bash
# 데이터베이스 백업
mysqldump -u root -p hyungi > backup.sql
# 예상 출력:
# Enter password:
# [백업 완료]
나쁜 예시:
mysqldump -u root -p hyungi > backup.sql
#### 링크
- 내부 링크: `[섹션 제목](#섹션-제목-소문자-하이픈)`
- 외부 링크: `[링크 텍스트](https://url)`
- 문서 링크: `[문서 제목](./path/to/doc.md)`
#### 강조
- **굵게**: `**중요한 내용**`
- *기울임*: `*강조*`
- `코드`: `` `변수명` ``
- 인용구: `> 주의사항`
#### 리스트
- 순서 있는 리스트: `1. `, `2. `
- 순서 없는 리스트: `- ` 또는 `* `
- 체크리스트: `- [ ] 미완료`, `- [x] 완료`
### 4.2 명명 규칙
#### 파일명
- 대문자와 밑줄 사용: `TBM_DEPLOYMENT_GUIDE.md`
- 카테고리 접두사 사용 (선택): `API_`, `GUIDE_`, `SPEC_`
- 날짜 포함 금지 (git 이력으로 관리)
#### 섹션 제목
- 명확하고 간결하게
- 동사형 사용: "배포하기", "설치하기"
- 번호 포함: "1.1 시스템 개요"
### 4.3 코드 예시 작성 규칙
#### 완전한 예시 제공
```markdown
좋은 예시:
```javascript
// TBM 세션 생성
async function createTbmSession(data) {
try {
const response = await window.apiCall('/tbm/sessions', 'POST', data);
if (response.success) {
console.log('TBM 세션 생성 성공:', response.data.session_id);
return response.data;
}
} catch (error) {
console.error('TBM 세션 생성 실패:', error);
throw error;
}
}
// 사용 예시
const session = await createTbmSession({
session_date: '2026-01-26',
leader_id: 1,
project_id: 5
});
나쁜 예시:
// TBM 세션 생성
async function createTbmSession(data) {
// ... 생략 ...
}
#### 주석 활용
- 코드 블록 상단에 설명 주석 추가
- 중요한 파라미터에 인라인 주석
- 예상 결과 주석으로 표시
### 4.4 표 작성 규칙
#### 간결하고 읽기 쉽게
```markdown
좋은 예시:
| 필드명 | 타입 | 필수 | 설명 |
|--------|------|------|------|
| session_date | DATE | Yes | TBM 날짜 |
| leader_id | INT | Yes | 팀장 ID |
| project_id | INT | No | 프로젝트 ID |
나쁜 예시:
| 필드명 | 데이터 타입 (MySQL) | 필수 여부 | Nullable | Default | 설명 |
|--------|---------------------|-----------|----------|---------|------|
| session_date | DATE | 필수 | NO | NULL | TBM이 진행되는 날짜 (YYYY-MM-DD 형식) |
열 수 제한
- 최대 5열까지 권장
- 더 많은 정보가 필요하면 섹션 분리
4.5 다이어그램 작성 규칙
ASCII 다이어그램 사용
시스템 아키텍처:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Frontend │────▶│ Backend │────▶│ Database │ │ (React) │ │ (Node.js) │ │ (MySQL) │ └─────────────┘ └─────────────┘ └─────────────┘
데이터 흐름:
User → Login Page → API (/auth/login) → JWT Token → Dashboard
Mermaid 다이어그램 (GitHub 지원)
```mermaid
sequenceDiagram
participant U as User
participant F as Frontend
participant B as Backend
participant D as Database
U->>F: 로그인 요청
F->>B: POST /auth/login
B->>D: 사용자 확인
D-->>B: 사용자 정보
B-->>F: JWT 토큰
F-->>U: 대시보드로 리다이렉트
### 4.6 버전 관리 규칙
#### Semantic Versioning 사용
- **MAJOR**: 호환성이 깨지는 변경 (예: API 구조 변경)
- **MINOR**: 기능 추가 (하위 호환)
- **PATCH**: 버그 수정 (하위 호환)
예시:
- `v1.0.0`: 초기 배포
- `v1.1.0`: 새 기능 추가
- `v1.1.1`: 버그 수정
- `v2.0.0`: API 구조 변경 (Breaking Change)
#### 문서 버전과 코드 버전 분리
- 문서 자체 버전: 문서 푸터에 "문서 버전"으로 명시
- 코드/시스템 버전: 변경 이력에 기록
---
## 예시 템플릿
### 5.1 배포 가이드 템플릿
```markdown
# [시스템/기능명] 배포 가이드
## 📋 문서 개요
**목적**: [배포 목적을 한 문장으로]
**대상**: 시스템 관리자, DevOps 엔지니어
**버전**: v1.0.0
**최종 수정일**: YYYY-MM-DD
---
## 📑 목차
1. [시스템 개요](#시스템-개요)
2. [배포 전 확인사항](#배포-전-확인사항)
3. [배포 절차](#배포-절차)
4. [테스트 가이드](#테스트-가이드)
5. [문제 해결](#문제-해결)
6. [롤백 절차](#롤백-절차)
7. [변경 이력](#변경-이력)
---
## 시스템 개요
### 1.1 [시스템/기능명]이란?
[시스템이나 기능에 대한 간단한 설명]
### 1.2 주요 기능
| 기능 | 설명 |
|------|------|
| 기능 1 | 설명 |
| 기능 2 | 설명 |
### 1.3 시스템 아키텍처
[다이어그램]
---
## 배포 전 확인사항
### 2.1 환경 요구사항
- **OS**: [운영체제 및 버전]
- **런타임**: [Node.js, Python 등 버전]
- **데이터베이스**: [MySQL, PostgreSQL 등 버전]
- **기타**: [의존성]
### 2.2 필수 의존성
```json
{
"의존성": "버전"
}
2.3 기존 시스템 확인
# 확인 명령어
배포 절차
3.1 데이터베이스 백업 (필수)
# 백업 명령어
3.2 [단계별 배포]
3.2.1 [하위 단계]
# 명령어
[설명]
3.2.2 확인
# 확인 명령어
예상 결과:
[예상 출력]
3.3 배포 체크리스트
- 백업 완료
- [항목 1]
- [항목 2]
테스트 가이드
4.1 [테스트 유형 1]
[테스트 방법]
4.2 [테스트 유형 2]
[테스트 방법]
문제 해결
5.1 [문제 1]
증상:
[오류 메시지]
원인: [원인 설명]
해결:
# 해결 명령어
롤백 절차
6.1 데이터베이스 롤백
# 롤백 명령어
6.2 코드 롤백
# 롤백 명령어
변경 이력
v1.0.0 (YYYY-MM-DD)
초기 배포:
- [변경사항 1]
- [변경사항 2]
커밋: [커밋 해시]
작성자: [작성자명] 최종 수정일: YYYY-MM-DD 문서 버전: 1.0
### 5.2 API 문서 템플릿
```markdown
# [API 이름] API 문서
## 📋 문서 개요
**목적**: [API 목적]
**대상**: 백엔드 개발자, 프론트엔드 개발자
**버전**: v1.0.0
**최종 수정일**: YYYY-MM-DD
---
## 📑 목차
1. [API 개요](#api-개요)
2. [인증](#인증)
3. [엔드포인트 목록](#엔드포인트-목록)
4. [엔드포인트 상세](#엔드포인트-상세)
5. [에러 코드](#에러-코드)
6. [예시 코드](#예시-코드)
---
## API 개요
**Base URL**: `http://api.example.com/v1`
**프로토콜**: HTTPS
**데이터 형식**: JSON
---
## 인증
### 2.1 인증 방식
[인증 방식 설명 - JWT, API Key 등]
### 2.2 인증 헤더
Authorization: Bearer YOUR_TOKEN
### 2.3 토큰 발급
[토큰 발급 방법]
---
## 엔드포인트 목록
| 메서드 | 경로 | 설명 | 인증 필요 |
|--------|------|------|-----------|
| POST | /auth/login | 로그인 | No |
| GET | /users/:id | 사용자 조회 | Yes |
---
## 엔드포인트 상세
### POST /endpoint-path
**설명**: [엔드포인트 설명]
**요청**:
```bash
curl -X POST http://api.example.com/v1/endpoint-path \
-H "Content-Type: application/json" \
-d '{
"param1": "value1"
}'
요청 파라미터:
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| param1 | string | Yes | 설명 |
응답 (200 OK):
{
"success": true,
"data": {
"field1": "value1"
}
}
에러 응답:
400: 잘못된 요청401: 인증 실패404: 리소스 없음500: 서버 오류
에러 코드
| 코드 | 메시지 | 설명 |
|---|---|---|
| 400 | Bad Request | 잘못된 요청 |
| 401 | Unauthorized | 인증 실패 |
예시 코드
JavaScript (Fetch)
const response = await fetch('http://api.example.com/v1/endpoint', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
param1: 'value1'
})
});
const data = await response.json();
console.log(data);
작성자: [작성자명] 최종 수정일: YYYY-MM-DD 문서 버전: 1.0
---
## 문서 검토 체크리스트
배포 전 다음 항목을 확인:
### 내용 검토
- [ ] 문서 개요 (목적, 대상, 버전, 날짜) 작성됨
- [ ] 목차가 있고 모든 링크가 작동함
- [ ] 모든 필수 섹션이 포함됨
- [ ] 코드 예시가 완전하고 테스트됨
- [ ] 명령어가 정확하고 실행 가능함
- [ ] 예상 출력이 명시됨
- [ ] 문제 해결 섹션이 충분함
- [ ] 변경 이력이 업데이트됨
### 형식 검토
- [ ] 마크다운 문법이 올바름
- [ ] 코드 블록에 언어가 지정됨
- [ ] 링크가 모두 작동함
- [ ] 표 형식이 올바름
- [ ] 이미지/다이어그램이 표시됨
- [ ] 날짜 형식이 일관됨 (YYYY-MM-DD)
- [ ] 버전 번호가 일관됨
### 독자 관점 검토
- [ ] 초보자도 따라할 수 있는가?
- [ ] 모든 전제 조건이 명시되었는가?
- [ ] 모호한 표현이 없는가?
- [ ] 예시가 충분한가?
- [ ] 문제 상황 대응 방법이 있는가?
---
**작성자**: Claude
**최종 수정일**: 2026-01-26
**문서 버전**: 1.0