dkmqflx's Blog

효과적인 코드 문서화: TSDoc과 Todo Tree 활용 가이드

ETC
2024.01.21

코드 문서화의 중요성

“주석이 필요 없는 코드가 좋은 코드다”라는 말은 자주 인용되는 프로그래밍 격언 중 하나입니다. 하지만 실무 경험을 통해 깨달은 것은, 이는 “불필요한 주석을 작성하지 말라”는 의미로 해석되어야 한다는 점입니다.

효과적인 코드 문서화는 다음과 같은 이점을 제공합니다:

  1. 유지보수성 향상: 복잡한 비즈니스 로직의 의도를 명확히 전달
  2. 온보딩 시간 단축: 새로운 팀원이 코드베이스를 빠르게 이해
  3. 버그 예방: 코드의 제약사항과 주의사항을 명시
  4. API 사용성 개선: 함수와 타입의 사용 방법을 명확히 문서화

도구 소개

이 글에서는 효과적인 코드 문서화를 위한 두 가지 핵심 도구를 소개합니다:

TSDoc이란?

TSDoc은 Microsoft에서 개발한 TypeScript 코드 문서화를 위한 공식 표준입니다. JSDoc의 확장 버전으로, TypeScript의 타입 시스템과 완벽하게 통합되어 작동합니다. 주요 특징은 다음과 같습니다:

  • 타입 인식: TypeScript의 타입 정보를 자동으로 인식하고 문서화
  • IDE 통합: Visual Studio Code 등 주요 IDE에서 자동 완성 및 문서 미리보기 지원
  • 표준화된 태그: @param, @returns, @example 등 표준화된 문서화 태그 제공
  • 마크다운 지원: 문서 내에서 마크다운 문법 사용 가능

Todo Tree란?

Todo Tree는 Visual Studio Code의 확장 프로그램으로, 코드베이스 전체의 주석 기반 작업 항목을 체계적으로 관리할 수 있게 해주는 도구입니다. 주요 기능은 다음과 같습니다:

  • 작업 항목 추적: TODO, FIXME 등의 주석 태그를 자동으로 추적
  • 시각적 구성: 사이드바에서 모든 작업 항목을 트리 구조로 표시
  • 커스텀 태그: 프로젝트에 맞는 사용자 정의 태그 설정 가능
  • 필터링: 파일 유형, 태그 유형별 필터링 지원
  • 색상 코딩: 태그별 다른 색상과 아이콘 지정 가능

이러한 도구들을 활용하면 주석 작성과 관리를 더욱 체계적이고 효율적으로 할 수 있습니다.

TSDoc

TSDoc의 기본 원칙

TSDoc은 Microsoft가 제안한 TypeScript 문서화 표준으로, JSDoc의 확장버전입니다. 주요 특징은 다음과 같습니다:

  1. TypeScript의 타입 시스템과 완벽한 통합
  2. IDE 지원을 통한 실시간 문서 확인
  3. 마크다운 문법 지원
  4. 자동 문서 생성 도구와의 호환성

실전 TSDoc 활용 예시

1. 함수 문서화

/**
 * 두 숫자의 가중 평균을 계산합니다.
 * 
 * @description
 * 가중치가 지정되지 않은 경우 산술 평균을 계산합니다.
 * 음수 가중치는 0으로 처리됩니다.
 * 
 * @param x - 첫 번째 숫자
 * @param y - 두 번째 숫자
 * @param weight - x에 대한 가중치 (0~1)
 * @returns 계산된 가중 평균
 * 
 * @example
 * ```typescript
 * // 산술 평균
 * getWeightedAverage(2, 3) // 2.5
 * 
 * // 가중 평균
 * getWeightedAverage(2, 3, 0.7) // 2.3
 * ```
 */
function getWeightedAverage(x: number, y: number, weight: number = 0.5): number {
  const normalizedWeight = Math.max(0, Math.min(1, weight));
  return x * normalizedWeight + y * (1 - normalizedWeight);
}

2. 인터페이스/타입 문서화

/**
 * ## 상품 정보
 * 
 * @description
 * 커머스 시스템에서 사용되는 상품의 기본 정보를 정의합니다.
 * 모든 금액은 원화(KRW) 기준입니다.
 * 
 * @example
 * ```typescript
 * const product: Product = {
 *   id: 1,
 *   name: "샘플 상품",
 *   price: 15000,
 *   status: "ACTIVE"
 * };
 * ```
 */
export interface Product {
  /** 상품 고유 식별자 */
  id: number;
  
  /** 
   * 상품명 
   * @remarks 최대 100자
   */
  name: string;
  
  /** 
   * 판매가격
   * @minimum 100
   * @maximum 10000000
   */
  price: number;
  
  /** 
   * 상품 상태
   * @default "DRAFT"
   */
  status: "DRAFT" | "ACTIVE" | "SOLD_OUT" | "DISCONTINUED";
}

TSDoc 모범 사례

  1. 일관성 있는 형식 유지

    • 팀 내 문서화 스타일 가이드 수립
    • Prettier/ESLint 규칙에 문서화 규칙 포함
  2. 문서화 수준 결정

    • 공개 API: 상세한 문서화
    • 내부 구현: 복잡한 로직에 한해 선별적 문서화
  3. 자동화된 문서화 검증

    • ESLint의 eslint-plugin-tsdoc 활용
    • CI/CD 파이프라인에 문서화 검증 단계 포함

Todo Tree: 체계적인 작업 관리

효과적인 TODO 주석 시스템

Todo Tree는 단순한 TODO 마커 이상의 기능을 제공합니다. 다음과 같은 체계적인 태그 시스템을 구축할 수 있습니다:

"todo-tree.general.tags": [
  "TODO",    // 구현 필요
  "FIXME",   // 버그 수정 필요
  "HACK",    // 임시 해결책
  "NOTE",    // 중요 정보
  "PERF",    // 성능 개선 필요
  "SECURITY" // 보안 검토 필요
],
"todo-tree.highlights.customHighlight": {
  "TODO": {
    "background": "#54BC52",
    "foreground": "#ffffff",
    "icon": "check",
    "iconColour": "#54BC52",
    "gutterIcon": true
  },
  "FIXME": {
    "background": "#F44336",
    "foreground": "#ffffff",
    "icon": "bug",
    "iconColour": "#F44336"
  },
  "SECURITY": {
    "background": "#FF9800",
    "foreground": "#000000",
    "icon": "shield",
    "iconColour": "#FF9800"
  }
}

실전 활용 예시

/** 
 * @security SECURITY: API 키 암호화 필요
 */
const API_KEY = process.env.API_KEY;

/**
 * TODO: 페이지네이션 구현
 * PERF: 쿼리 최적화 필요
 */
async function fetchUsers() {
  // ...
}

/**
 * HACK: IE11 호환성을 위한 임시 처리
 * FIXME: 폴리필 적용 후 제거 필요
 */
function legacyCompatibilityFix() {
  // ...
}

결론

효과적인 코드 문서화는 단순히 주석을 작성하는 것 이상의 의미를 가집니다. TSDoc과 Todo Tree와 같은 도구를 활용한 체계적인 문서화는 다음과 같은 이점을 제공합니다:

  1. 코드의 의도와 제약사항을 명확히 전달
  2. 팀 협업과 코드 리뷰 효율성 향상
  3. 기술 부채 추적 및 관리 용이성
  4. API 사용성과 개발자 경험 개선

주석은 코드를 대체하는 것이 아닌, 보완하는 역할을 해야 합니다. 자체 문서화되는(self-documenting) 코드를 작성하되, 필요한 곳에 적절한 문서화를 추가하는 균형 잡힌 접근이 중요합니다.

© 2022 dkmqflx, Powered By Gatsby