코딩 컨벤션과 스타일 가이드. 코드 작성, 리뷰, 수정 시 반드시 참조. 네이밍, 포맷팅, import 순서, 주석 규칙 등.
PascalCase (예: UserService, OrderRepository)snake_case (예: get_user_by_id, calculate_total)snake_case (예: user_name, order_count)UPPER_SNAKE_CASE (예: MAX_RETRY_COUNT, DEFAULT_TIMEOUT)_prefix (예: _internal_method, _cache)snake_case.py (예: user_service.py)PascalCasecamelCaseUPPER_SNAKE_CASEPascalCase.tsx, 그 외 camelCase.ts# BAD
d = 30 # 뭔지 모름
lst = [] # 뭔 리스트인지 모름
def proc(x): # 뭘 처리하는지 모름
# GOOD
timeout_seconds = 30
pending_orders = []
def validate_email(email: str) -> bool:
# BAD
def get_user(user_id):
...
# GOOD
async def get_user(self, user_id: str) -> User | None:
"""사용자 ID로 사용자를 조회한다.
Args:
user_id: 조회할 사용자의 고유 ID
Returns:
User 객체. 존재하지 않으면 None.
"""
...
# 1. 표준 라이브러리
import os
import sys
from datetime import datetime
from pathlib import Path
# 2. 서드파티 라이브러리
import anthropic
from pydantic import BaseModel
# 3. 프로젝트 내부
from src.domain.user import User
from src.repository.user_repository import UserRepository
"""사용자 인증 서비스.
OAuth2 및 이메일/패스워드 인증을 처리한다.
JWT 토큰 발행 및 검증도 이 모듈에서 담당한다.
"""
# BAD: what (코드 자체가 이미 말하고 있음)
# 사용자를 조회한다
user = await repo.find_by_id(user_id)
# GOOD: why (코드만으로는 알 수 없는 이유)
# 캐시 무효화 전에 DB에서 최신 상태를 먼저 확인해야
# race condition을 방지할 수 있다
user = await repo.find_by_id(user_id, use_cache=False)
# BAD
raise ValueError("Invalid input")
# GOOD
raise UserNotFoundError(
f"User with id '{user_id}' not found in database. "
f"Searched in table: {self._table_name}"
)