# Coding Conventions > AI 에이전트는 코드를 작성하기 전 이 컨벤션을 확인합니다. ## 네이밍 | 대상 | 규칙 | 예시 | |------|------|------| | 변수/함수 | camelCase | `getUserData()` | | 클래스 | PascalCase | `UserService` | | 상수 | UPPER_SNAKE_CASE | `MAX_RETRY_COUNT` | | 파일명 | kebab-case | `user-service.js` | | CSS 클래스 | kebab-case | `.nav-header` | ## 코드 스타일 - 들여쓰기: (2 spaces / 4 spaces / tab) - 세미콜론: (사용 / 미사용) - 따옴표: (single / double) - 줄바꿈: LF (Unix style) ## 커밋 메시지 ``` (): type: feat|fix|refactor|test|docs|chore|ci|infra scope: (선택) ``` **예시:** - `feat(server): add WebSocket reconnection logic` - `fix(frontend): resolve button overlap on mobile` - `docs: update API documentation` ## 주석 - 한국어/영어 혼용 가능 - TODO 주석: `// TODO: 설명` 형식 - 복잡한 로직에는 반드시 WHY(왜) 주석 추가 ## 아키텍처 결정 사항 (NEVER 변경) > [!CAUTION] > 아래 결정은 사용자가 2026-03-14에 명시적으로 확정한 것입니다. > 어떤 상황에서도 재논의하거나 대안을 제안하지 마세요. - **Gemini CLI subprocess 방식 유지**: `gemini_caller.py`는 Gemini CLI를 `asyncio.create_subprocess_exec`로 호출하는 현재 방식을 영구 유지합니다. - ❌ Gemini SDK (`google-generativeai`) 전환 금지 - ❌ Gemini REST API 직접 호출 금지 - ❌ 위 방향성에 대한 제안/언급 금지 ## 테스트 - 테스트 파일 위치: (예: `__tests__/` 또는 `*.test.js`) - 테스트 네이밍: `should [expected behavior] when [condition]`