diff --git a/book/300_architecture/311_backend_coding_principles.md b/book/300_architecture/311_backend_coding_principles.md index 457cb10..3873ad3 100644 --- a/book/300_architecture/311_backend_coding_principles.md +++ b/book/300_architecture/311_backend_coding_principles.md @@ -1,7 +1,7 @@ # Backend Coding Principles **작성일**: 2025-09-17 -**수정일**: 2026-01-21 (파일 크기 제한 300줄 → 500줄 완화) +**수정일**: 2026-03-27 (DB 접근 규칙에 UUID 검증 원칙 추가) **상위 원칙**: [0_VALUE Coding Principles](../../../../0_VALUE/20_Governance/coding-principles.md) ## 1. 계층 분리 원칙 @@ -153,6 +153,14 @@ utils - 예: `system_endpoint.py`에서 router 인스턴스, `schedule_endpoint.py`에서 scheduler 인스턴스 - **간단한 경우**: `state/database.py`에서 직접 연결 +### UUID 검증 원칙 + +상위 원칙 참조: [coding-principles.md](../../../../0_VALUE/20_Governance/coding-principles.md) 식별자 계약 + +- `user_id` 검증은 Pydantic의 `UUID` 타입으로 처리한다. UUID4 전용 검증(`UUID4`)으로 제한하지 않는다. +- DB `uuid` 컬럼은 버전 무관 표준 UUID를 저장하므로, 앱 계층의 입력 검증과 스키마도 같은 기준을 사용한다. +- 생성 정책과 소비자 검증 정책을 혼동하지 않는다. 특정 서비스가 UUID4를 발급하더라도, 소비자는 유효한 표준 UUID 전체를 수용한다. + ### Supabase 쿼리 컬럼명 충돌 처리 - **예약어/컬럼명 충돌**: `order` 같은 예약어가 컬럼명과 겹칠 경우 쿼리 체이닝에서 직접 `.order()` 사용 금지 - **Python 로직 처리**: 컬럼명 충돌 시 Supabase 쿼리 체이닝 대신 Python 로직으로 정렬 처리 (모든 데이터 조회 후 Python에서 정렬)