도메인 상황을 예외명으로 남김
UserAlreadyExistsException처럼 서비스 코드에 비즈니스
실패 이유가 드러나면 호출부의 의도가 선명해진다.
컨트롤러와 서비스는 NotFoundException,
ConflictException, 사용자 정의 예외를 던지고, 필터는 상태
코드와 요청 경로, 시간, 메시지를 일관된 JSON으로 정리한다.
UserAlreadyExistsException처럼 서비스 코드에 비즈니스
실패 이유가 드러나면 호출부의 의도가 선명해진다.
@Catch(HttpException)
필터는 exception.getStatus()와
getResponse()를 읽어 기본 예외와 사용자 정의 예외를
같은 방식으로 처리한다.
statusCode, path, message
응답 형식에 timestamp와 요청 URL을 포함하면 프론트엔드
안내와 서버 로그 추적이 쉬워진다.
useGlobalFilters(new HttpExceptionFilter())는
간단하지만 로깅 서비스 주입이 필요하면
APP_FILTER 프로바이더가 더 알맞다.