기술 문서 작성
들어가며
당신이 쓴 문서를 누가 읽고 있나요? 많은 개발자가 "코드만 작동하면 되고, 문서는 나중에"라고 생각합니다. 결과적으로: 신규 입사자가 프로젝트를 이해하지 못하고, API 연동은 모두 구두로 진행되며, 반년 후에는 자신도 왜 그렇게 설계했는지 잊어버립니다.
이 장에서는 기술 문서 작성의 핵심 방법을 습득하여, 문서가 실제로 읽히고, 이해되고, 활용되도록 만듭니다.
이 글에서 무엇을 배울 수 있을까요?
| 장 | 내용 | 핵심 개념 |
|---|---|---|
| 1장 | 문서의 유형과 구조 | 다양한 문서의 작성법 |
| 2장 | 작성 원칙 | 명확, 정확, 간결 |
| 3장 | 실전 비교 | 좋은 문서 vs 나쁜 문서 |
| 4장 | 문서 유지보수 | 문서를 최신 상태로 유지 |
이 장을 마치면 구조가 명확하고, 내용이 정확하며, 유지보수가 쉬운 기술 문서를 작성할 수 있게 됩니다.
0. 전경도: 왜 기술 문서가 중요한가요?
코드는 컴퓨터에게 "어떻게"를 알려주고, 문서는 인간에게 "왜"를 알려줍니다. 문서가 없는 프로젝트는 설명서가 없는 가전제품과 같습니다 — 사용할 수는 있지만, 사용법은 모두 추측해야 합니다.
좋은 문서의 가치
- 소통 비용 절감: 신규 입사자가 스스로 학습 가능, 반복적인 질문 감소
- 의사결정 맥락 보존: "왜"를 기록, "무엇"만이 아닌
- 프로젝트 신뢰도 향상: 좋은 문서는 오픈소스 프로젝트의 얼굴
- 협업 가속화: API 문서로 프론트엔드와 백엔드 병렬 개발 가능
1. 문서의 유형과 구조
아래의 인터랙티브 컴포넌트를 통해 다양한 유형의 문서 표준 구조를 이해해 보세요:
1.1 일반적인 문서 유형
| 문서 유형 | 대상 독자 | 핵심 내용 |
|---|---|---|
| README | 모든 사람 | 프로젝트 소개, 사용법, 기여 방법 |
| API 문서 | 인터페이스 호출자 | 엔드포인트, 매개변수, 응답, 에러 코드 |
| 아키텍처 문서 | 개발 팀 | 시스템 설계, 기술 선택, 데이터 흐름 |
| 변경 이력 | 사용자/개발자 | 버전 변화, 추가/수정/파괴적 변경 |
| 기여 가이드 | 기여자 | 개발 환경, 코드 규칙, PR 프로세스 |
1.2 README의 황금 구조
좋은 README는 다음을 포함해야 합니다:
- 프로젝트 이름 + 한 줄 설명: 3초 안에 이것이 무엇인지 알 수 있게
- 빠른 시작: 최소 단계로 실행하는 방법
- 기능 특징: 핵심 강점
- 설치 방법: 상세한 환경 요구사항과 설치 단계
- 사용 예시: 복사해서 붙여넣을 수 있는 코드
- 기여 가이드: 참여 방법
- 라이선스: 법적 정보
2. 작성 원칙
2.1 명확성 우선
<!-- 나쁨: 모호함 -->
이 함수는 데이터를 처리합니다.
<!-- 좋음: 구체적이고 명확 -->
원시 주문 데이터를 청구서 형식으로 변환하며, 세금 계산과 통화 변환이 포함됩니다.2.2 독자 중심
문서를 작성하기 전에 먼저 질문하세요: 누가 이 문서를 읽을 것인가? 그들에게 어떤 정보가 필요한가?
- 초보자 대상: 용어를 설명하고, 완전한 예시 제공
- 경험 있는 개발자 대상: 핵심으로 바로 들어가고, API 참조 제공
- 비기술자 대상: 비유를 사용하고, 전문 용어 피하기
2.3 코드 예시가 최고의 문서
<!-- 나쁨: 텍스트 설명만 -->
createUser 함수를 호출하고 사용자 이름과 이메일 매개변수를 전달하세요.
<!-- 좋음: 실행 가능한 예시 제공 -->
const user = await createUser({
name: '홍길동',
email: 'hong@example.com'
})
// 반환: { id: 'u_123', name: '홍길동', createdAt: '2025-01-15' }3. 실전 비교
아래의 인터랙티브 컴포넌트를 통해 좋은 기술 작성과 나쁜 기술 작성을 비교해 보세요:
// Process data
function process(d) {
// ...
}/**
* Convert raw order data into invoice format.
* @param {Order} order - Raw order object
* @returns {Invoice} Formatted invoice
* @throws {ValidationError} When order data is incomplete
*/
function toInvoice(order) {
// ...
}3.1 커밋 메시지 규칙
# 나쁨
fix bug
update code
# 좋음 (Conventional Commits)
fix: 로그인 페이지가 Safari에서 하얀 화면으로 표시되는 문제 수정
feat: PDF 형식 보고서 일괄 내보내기 지원
docs: API 인증 장절의 예시 코드 업데이트3.2 주석의 예술
// 나쁨: "무엇인지" 설명 (코드가 이미 말해줌)
// 배열 순회
for (const item of items) { ... }
// 좋음: "왜" 설명
// 역순으로 순회 — 요소 삭제 시 정방향이면 다음 요소를 건너뛰기 때문
for (let i = items.length - 1; i >= 0; i--) { ... }4. 문서 유지보수
4.1 문서도 코드처럼
문서와 코드를 같은 저장소에 두고, 같은 워크플로우로 관리하세요:
- 문서 변경은 코드와 함께 PR로 제출
- CI에서 문서 형식과 링크 유효성 검사
- 버전 출시 시 문서 동기 업데이트
4.2 문서 부패 방지
| 문제 | 해결책 |
|---|---|
| 문서가 구식임 | 코드 변경 시 문서 업데이트 강제 (PR 검사) |
| 관리자가 없음 | 문서 담당자 지정 |
| 내용 중복 | 단일 정보 출처, 다른 곳은 링크로 참조 |
5. AI 활용: 대형 언어 모델로 문서 품질 향상
대형 언어 모델은 기술 작성 분야에서 거의 "타고난 재능"입니다 — 문서 생성, 표현 개선, 콘텐츠 번역 모두 강점입니다.
5.1 API 문서 생성
프롬프트:
다음 Express 라우트 코드를 바탕으로 완전한 API 문서를 생성해 주세요: - 엔드포인트 경로와 메서드 - 요청 매개변수 (경로 매개변수, 쿼리 매개변수, 요청 본문) 및 유형 - 성공 및 오류 응답 예시 - curl을 사용한 호출 예시 [라우트 코드를 붙여넣으세요]
5.2 기술 작성 개선
프롬프트:
다음 기술 문서의 표현을 개선해 주세요: 1. 언어를 간결하고 명확하게, 불필요한 표현 제거 2. 수동태를 능동태로 변경 3. 전문 용어의 정확성 유지 4. 필요한 코드 예시 추가 원래 의미를 유지하면서 표현 품질만 개선해 주세요. [문서 내용을 붙여넣으세요]
5.3 README 생성
프롬프트:
다음 프로젝트 정보를 바탕으로 고품질의 README.md를 생성해 주세요: - 프로젝트 이름: [이름] - 한 줄 설명: [설명] - 기술 스택: [나열] - 핵심 기능: [나열] 다음을 포함해 주세요: 프로젝트 소개, 빠른 시작, 기능 특징, 설치 단계 (코드 포함), 사용 예시, 기여 가이드, 라이선스.
AI 사용 제안
AI가 생성한 문서는 기술적 세부사항이 정확한지 확인해야 합니다 — 존재하지 않는 API 매개변수나 잘못된 반환값을 만들어낼 수 있습니다. 항상 실제 코드와 대조하여 검증하세요.
6. 요약
- 유형 매칭: 다양한 문서는 각각 다른 구조와 작성법이 있음
- 명확성 우선: 구체적, 정확, 독자 중심
- 예시 중심: 좋은 코드 예시는 천 마디 말보다 나음
- 지속적 유지보수: 문서도 코드처럼, 프로젝트와 함께 발전
핵심 성찰
문서 작성은 시간 낭비가 아니라 미래의 시간을 절약하는 것입니다. 오늘 30분 동안 작성한 문서가 10명에게 각각 1시간씩을 절약해 줄 수 있습니다. 좋은 문서는 팀에 대한 최고의 투자입니다.
추가 읽기
- 작성 가이드: Google의 기술 작성 강좌(Technical Writing)는 무료이면서 실용적입니다.
- 문서 도구: VitePress, Docusaurus, GitBook 등의 현대적인 문서 프레임워크.
- API 문서: OpenAPI/Swagger 규격은 API 문서의 업계 표준입니다.
- 실천 제안: 자신의 프로젝트에 좋은 README를 작성하는 것부터 시작해 보세요.