- 에러 처리는 `core/app/utils/CustomException`의 `CustomException` 클래스를 사용:
  - 형식: `CustomException(ErrorCode, detail=value, source_function="function_name")`
  - **ErrorCode**: `core/app/utils/CustomException`에 정의된 값 사용.
  - **detail**: 검증/처리 중인 값 자체만 포함 (예: 전화번호 검증 시 전화번호 값만)
    - 단일 값: 해당 값만 포함 (예: `detail=phone_number`)
    - 복합 값: 파이프(|)로 구분 (예: `detail=f"{table}|{column}|{value}"`)
    - 추가 텍스트나 설명 없이 값만 포함
  - **source_function**: 에러 발생 함수명을 문자열로 입력.
  
# 에러 처리 규칙
1. 에러 응답 형식:
   ```json
   {
       "error_code": 3003,        // 숫자 형식
       "error_type": "DUPLICATE_ERROR",
       "status_code": 409,
       "path": "/companies",
       "method": "POST",
       "client_ip": "172.20.0.2",
       "user_agent": "Mozilla/5.0..."
   }
   ```

2. 에러 로그 형식:
   ```json
   {
       "error_code": 3003,
       "error_type": "DUPLICATE_ERROR",
       "status_code": 409,
       "path": "/companies",
       "method": "POST",
       "client_ip": "172.20.0.2",
       "user_agent": "Mozilla/5.0...",
       "detail": "companies|id|test-company",
       "source_function": "DatabaseService.validate_unique_fields",
       "error_chain": [
           {
               "error_code": "ErrorCode.DUPLICATE_ERROR",
               "detail": "companies|id|test-company",
               "source_function": "DatabaseService.validate_unique_fields",
               "original_error": null
           },
           {
               "error_code": "ErrorCode.DUPLICATE_ERROR",
               "detail": "companies|id|test-company",
               "source_function": "OrganizationRepository.create_company",
               "original_error": null
           }
       ],
       "original_error": null
   }
   ```

3. detail 형식:
   - 단일 필드 중복: `{테이블명}|{필드명}|{값}`
   - 복수 필드 중복: `{테이블명}|{필드1}:{값1}|{필드2}:{값2}`
   - 외래키 위반: `{참조테이블명}|{필드명}|{값}`
   - 유효성 검사: `{검증값}`

4. 에러 체인 구성:
   - 에러는 최초 발생 지점부터 시작하여 호출 스택을 따라 전파
   - 각 레이어는 자신의 컨텍스트 정보를 추가하여 에러를 상위로 전달
   - `parent_source_function`을 통해 호출 경로 추적
   - 원본 에러 정보는 `original_error`로 보존

5. 레이어별 에러 처리:
   - Database 레이어:
     - 중복 검사: `DUPLICATE_ERROR`
     - 외래키 위반: `FOREIGN_KEY_VIOLATION`
     - 쿼리 실패: `DB_QUERY_ERROR`
   - Repository 레이어:
     - 원본 에러 보존 및 컨텍스트 추가
   - Service 레이어:
     - 비즈니스 로직 실패: `INTERNAL_ERROR`
     - 트랜잭션 실패: `TRANSACTION_ERROR`
   - API 레이어:
     - 입력값 검증: `VALIDATION_ERROR`
     - 권한 검증: `UNAUTHORIZED`, `FORBIDDEN`

6. 에러 처리 원칙:
   - 클라이언트 응답에서는 `detail`, `source_function`, `error_chain` 제외
   - 로그에는 모든 정보를 포함하여 디버깅 용이성 확보
   - 에러는 발생 지점에서 바로 처리하고 적절한 에러 코드 사용
   - 중첩된 try-except 블록 대신 early return 패턴 사용
   - 모든 예외는 `CustomException`으로 변환하여 일관된 처리

7. 에러 코드 관리:
   - 모든 에러 코드는 `ErrorCode` enum에 정의
   - 도메인별로 구분된 에러 코드 범위 사용
   - 각 에러 코드는 고유한 숫자 값과 HTTP 상태 코드 매핑