Skip to content

Code Convention

JinmuGo edited this page Aug 7, 2026 · 2 revisions

Code Convention

Biome 로 lint와 format을 관리합니다.

명령어

명령어 설명
pnpm lint Biome 전체 검사 (lint + format check)
pnpm lint:fix Biome 검사 + 자동 수정
pnpm format 포맷팅만 적용
pnpm typecheck TypeScript 타입 검사
pnpm run ci lint + typecheck + test 전부 실행 (CI와 동일)

⚠️ 반드시 pnpm run ci로 실행해야 합니다. pnpm ci는 pnpm 내장 명령어(clean install)가 실행되어 검증이 전혀 동작하지 않습니다.

포맷 규칙

biome.json에 정의된 규칙이며, 자동으로 적용됩니다.

항목 규칙
들여쓰기 공백 2칸
줄 바꿈 LF
최대 줄 길이 80자
문자열 작은따옴표 (')
세미콜론 필요할 때만 (asNeeded)
trailing comma 항상 (all)
화살표 함수 괄호 항상 (always)
import 정리 자동 (organizeImports)

강제 린트 규칙

아래 규칙들은 error 레벨로 설정되어 있어 위반 시 커밋이 불가합니다.

규칙 설명
noExplicitAny any 타입 금지 — 반드시 명시적 타입 선언
noVar var 금지 → const / let 사용
useConst 재할당 없는 변수는 const 강제
noDebugger debugger 문 금지
noCommonJs require() 금지 → ESM import 사용
noNamespace TypeScript namespace 금지
noUnusedVariables 미사용 변수 금지
useAwait async 함수에 await 필수
useNamingConvention 네이밍 규칙 강제 (아래 네이밍 규칙 섹션 참고)

네이밍 규칙

Biome의 useNamingConvention 규칙으로 자동 강제됩니다. 위반 시 커밋이 불가합니다.

대상 규칙 예시 강제 여부
클래스 PascalCase UserService, CreateUserDto ✅ Biome
변수 / 함수 camelCase userName, getUserById ✅ Biome
전역 상수 UPPER_SNAKE_CASE 허용 MAX_RETRY_COUNT ✅ Biome
인터페이스 PascalCase UserRepository ✅ Biome
Enum PascalCase (멤버도 PascalCase) UserRole.Admin ✅ Biome
파일명 kebab-case user.service.ts, create-user.dto.ts ⚠️ 수동 (Biome 미지원)
환경 변수 UPPER_SNAKE_CASE DATABASE_URL ⚠️ 수동

참고: HTTPServer처럼 연속 대문자가 포함된 이름은 strictCase 규칙으로 금지됩니다. HttpServer로 작성해 주세요.

TypeScript 규칙

  • any 사용 금지 → 구체적인 타입 또는 인터페이스 선언
  • 타입이 복잡하면 interface 또는 type으로 분리
  • 함수의 반환 타입은 명시적으로 선언 권장
// ❌ Bad
function getUser(id: any): any { ... }

// ✅ Good
interface UserResponse {
  id: number;
  name: string;
  email: string;
}

function getUser(id: number): Promise<UserResponse> { ... }

Clone this wiki locally