Description
작업 배경
현재 GlobalExceptionHandler는 DTO Bean Validation 실패(MethodArgumentNotValidException)와 잘못된 JSON 형식(HttpMessageNotReadableException)을 모두 HTTP 상태 이름인 BAD_REQUEST 코드로 응답합니다.
{
"code": "BAD_REQUEST",
"message": "컬렉션 이름은 비어 있거나, 공백일 수 없습니다."
}
HTTP 상태는 둘 다 400으로 적절하지만, 응답의 서비스 에러 코드까지 같아 클라이언트와 API 문서에서 요청 필드 검증 실패와 JSON 파싱 실패를 구분할 수 없습니다. 컬렉션 API 문서화(#560) 과정에서 이 문제가 확인되어, 특정 도메인에 속하지 않는 요청 처리 오류를 공통 에러 코드로 정의합니다.
목표 상태
- DTO Bean Validation 실패가 공통 서비스 에러 코드로 응답됩니다.
- 잘못된 JSON 형식이 DTO 검증 실패와 다른 공통 서비스 에러 코드로 응답됩니다.
- HTTP 상태와 사용자에게 전달하는 구체적인 검증 메시지는 기존 계약을 유지합니다.
- 컬렉션 등 도메인 비즈니스 규칙 오류는 기존 도메인 코드를 계속 사용합니다.
에러 코드 초안
| 코드 |
HTTP 상태 |
용도 |
COMMON-001 |
400 Bad Request |
DTO Bean Validation 실패 |
COMMON-002 |
400 Bad Request |
요청 본문 JSON 파싱 실패 |
COMMON-001의 message는 실패한 검증 애너테이션의 구체적인 메시지를 사용합니다.
- 필드마다 별도의 공통 에러 코드를 만들지 않습니다.
- 작품 수·중복 작품과 같은 비즈니스 규칙은
COLLECTION-002 등 기존 도메인 코드를 유지합니다.
작업 범위
- 공통 요청 오류를 표현하는
ICustomError 구현 enum 추가
MethodArgumentNotValidException 응답 코드를 COMMON-001로 변경
HttpMessageNotReadableException 응답 코드를 COMMON-002로 변경
- 동적 Bean Validation 메시지와 공통 코드 조합 방식 정리
- 관련 예외 처리 테스트 추가
- 기존 REST Docs 테스트와 OpenAPI 오류 예시 갱신
- 공통 에러 코드 명명·사용 기준 문서화
제외 범위
- 도메인 비즈니스 오류 코드 변경
- DTO 필드별 개별 에러 코드 신설
ErrorResult 응답 구조 변경 또는 필드별 오류 배열 추가
- 데이터베이스 무결성 오류와 파일 업로드 오류 코드 정비
- HTTP 400을 422로 변경
완료 조건
- DTO 검증 실패 응답의
code가 COMMON-001입니다.
- 잘못된 JSON 요청 응답의
code가 COMMON-002입니다.
- DTO 검증 실패 시 기존의 구체적인 검증 메시지가 유지됩니다.
- 도메인 예외의 기존 에러 코드와 HTTP 상태가 변경되지 않습니다.
- 관련 예외 처리 테스트와 API 문서 테스트가 통과합니다.
- 생성된 OpenAPI 명세에서 두 공통 오류가 서로 다른 named example로 확인됩니다.
To-Do
Reference
Description
작업 배경
현재
GlobalExceptionHandler는 DTO Bean Validation 실패(MethodArgumentNotValidException)와 잘못된 JSON 형식(HttpMessageNotReadableException)을 모두 HTTP 상태 이름인BAD_REQUEST코드로 응답합니다.{ "code": "BAD_REQUEST", "message": "컬렉션 이름은 비어 있거나, 공백일 수 없습니다." }HTTP 상태는 둘 다 400으로 적절하지만, 응답의 서비스 에러 코드까지 같아 클라이언트와 API 문서에서 요청 필드 검증 실패와 JSON 파싱 실패를 구분할 수 없습니다. 컬렉션 API 문서화(#560) 과정에서 이 문제가 확인되어, 특정 도메인에 속하지 않는 요청 처리 오류를 공통 에러 코드로 정의합니다.
목표 상태
에러 코드 초안
COMMON-001COMMON-002COMMON-001의message는 실패한 검증 애너테이션의 구체적인 메시지를 사용합니다.COLLECTION-002등 기존 도메인 코드를 유지합니다.작업 범위
ICustomError구현 enum 추가MethodArgumentNotValidException응답 코드를COMMON-001로 변경HttpMessageNotReadableException응답 코드를COMMON-002로 변경제외 범위
ErrorResult응답 구조 변경 또는 필드별 오류 배열 추가완료 조건
code가COMMON-001입니다.code가COMMON-002입니다.To-Do
Reference