-
Notifications
You must be signed in to change notification settings - Fork 0
Code Convention
JinmuGo edited this page Aug 7, 2026
·
2 revisions
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
|
|
| 환경 변수 | UPPER_SNAKE_CASE |
DATABASE_URL |
참고:
HTTPServer처럼 연속 대문자가 포함된 이름은strictCase규칙으로 금지됩니다.HttpServer로 작성해 주세요.
-
any사용 금지 → 구체적인 타입 또는 인터페이스 선언 - 타입이 복잡하면
interface또는type으로 분리 - 함수의 반환 타입은 명시적으로 선언 권장
// ❌ Bad
function getUser(id: any): any { ... }
// ✅ Good
interface UserResponse {
id: number;
name: string;
email: string;
}
function getUser(id: number): Promise<UserResponse> { ... }