모든 API 에러는 ErrorResponse 포맷을 따르며, 이를 통해 클라이언트와 서버 간 일관된 오류 해석을 보장한다.
1-1. Response Body
| 필드명 | 타입 | 설명 | 비고 |
|---|---|---|---|
| status | int | HTTP 상태 코드 | 400, 401, 403, 404, 500 등 |
| code | String | 에러 코드 | ex. U001 (유저 없음), C002 (입력값 오류) |
| message | String | 에러 메시지 | 사용자에게 노출할 에러 메시지 |
| errors | Array | 필드별 상세 오류 | 유효성 검증 실패 시에만 포함 (Optional) |
1-2. Response Header
| 헤더 | 설명 |
|---|---|
| X-Trace-Id | 요청 단위 추적 ID |
<aside> 📖
Trace ID는 보안 및 추적 목적상 Response Body가 아닌 Header에 포함한다.
</aside>
예외는 발생 위치에 따라 아래 계층에서 처리된다.
2-1. Security Filter Layer
CustomAuthenticationEntryPoint, CustomAccessDeniedHandler401(Unauthorized)403(Forbidden)