# Phase 1 코딩 규칙

## 1. 기본 원칙

- 함수는 가능하면 작은 단위로 분리합니다.
- adapter / parser / db / feature builder 책임을 섞지 않습니다.
- side effect는 application layer에 모읍니다.
- 표준 라이브러리와 검증된 범용 라이브러리를 우선 사용합니다.
- 예외를 삼키지 않습니다.

## 2. 타입과 검증

- Python type hint를 필수로 사용합니다.
- 외부 입력은 Pydantic 또는 동등한 검증 계층을 거칩니다.
- 내부 DTO와 DB model을 혼용하지 않습니다.

## 3. idempotency 규칙

- 동일 입력을 두 번 처리해도 결과가 달라지지 않아야 합니다.
- source key + checksum + unique constraint를 적극 사용합니다.
- raw 수집과 structured 적재는 분리합니다.

## 4. 예외 처리

반드시 아래 중 하나로 분류합니다.
- retryable
- non-retryable
- validation
- dependency

예외 객체에는 source/entity/context가 있어야 합니다.

## 5. retry / timeout

- 외부 HTTP 호출은 timeout 필수
- 무한 retry 금지
- 지수 백오프 + 상한 적용
- validation 실패는 retry 금지

## 6. 파일 저장 규칙

- 파일명은 deterministic 해야 합니다.
- 원문 overwrite 금지
- sidecar metadata JSON 함께 저장
- 상대경로 대신 data root 기준 canonical path 사용

## 7. DB write 규칙

- 가능하면 upsert 사용
- bulk insert 전 unique key 명확화
- transaction scope를 짧게 유지
- parser core에서 DB 세션 직접 접근 금지

## 8. 로깅 규칙

- INFO: 정상 단계
- WARNING: 데이터 이상, fallback 사용
- ERROR: 처리 실패
- DEBUG: 로컬 개발 전용

민감정보 로그 출력 금지:
- API key
- secret
- full auth header

## 9. 테스트 규칙

- fixture 없는 adapter 구현 금지
- parser는 최소 10개 이상의 샘플 문서 fixture 확보 권장
- 회귀 버그는 반드시 fixture 추가 후 수정

## 10. 문서화 규칙

- 모든 adapter에 README 또는 docstring 필요
- config key는 설명과 기본값 포함
- migration은 목적 설명 포함

## 11. 코드 리뷰 기준

- 책임 분리가 되어 있는가
- 재실행 안전한가
- 실패 시 상태가 명확한가
- 테스트가 충분한가
- 로그로 추적 가능한가
