2024-02-19-TIL
2024-02-19-TIL
Today I Learned
Exception Handling in Spring Boot
- https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
- https://www.baeldung.com/exception-handling-for-rest-with-spring
- https://medium.com/@aedemirsen/spring-boot-global-exception-handler-842d7143cf2a
Spring 블로그 글은 예외 처리를 컨트롤러 메서드 안에서 하지 말고, 횡단 관심사(cross-cutting concern)로 따로 빼라고 권한다. 선택지는 세 단계로 나뉜다.
- 예외별 : 직접 만든 예외 클래스에
@ResponseStatus를 붙이면, 그 예외가 처리되지 않고 컨트롤러 밖으로 나갈 때 지정한 HTTP 상태 코드로 응답한다. 붙이지 않은 예외는 기본적으로 500이 된다. - 컨트롤러별 : 컨트롤러 안에
@ExceptionHandler메서드를 두면 그 컨트롤러에서 던진 예외만 처리한다. - 전역 :
@ControllerAdvice(REST라면@ResponseBody가 합쳐진@RestControllerAdvice) 클래스에@ExceptionHandler를 두면 모든 컨트롤러에 적용된다.
1
2
3
4
5
6
7
8
@RestControllerAdvice
class GlobalExceptionHandler {
@ExceptionHandler(OrderNotFoundException.class)
ResponseEntity<String> handleNotFound(OrderNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
}
전역과 지역 핸들러가 겹치면 순서가 있다. Spring 문서에 따르면 @ControllerAdvice의 전역 @ExceptionHandler는 컨트롤러 안의 지역 핸들러보다 나중에 적용된다. 그래서 공통 처리는 전역에 두고, 특정 컨트롤러만 다르게 응답해야 할 때 지역 핸들러로 덮어쓰면 된다. 적용 범위는 애노테이션 속성으로 특정 패키지나 컨트롤러 타입으로 좁힐 수 있다.
Spring Boot를 쓰면 처리되지 않은 예외도 /error로 매핑되는 기본 오류 응답이 있다. HTML 요청에는 error 뷰가 없을 때 Whitelabel Error Page가, JSON을 원하는 요청에는 timestamp, status, error, path 같은 필드를 담은 JSON이 나간다. 이 기본 형식에 기대지 않고 응답 형식을 통일하려면 결국 전역 핸들러를 직접 두게 된다.
AI 키워드: 100만 토큰 컨텍스트
Google이 2월 15일 Gemini 1.5를 발표했다. 1.5 Pro의 기본 컨텍스트 창은 128,000 토큰이지만, 일부 개발자와 기업 고객에게는 최대 100만 토큰까지 시험 제공한다고 했다. 컨텍스트 창은 모델이 한 번에 읽고 참고할 수 있는 입력의 길이다. 긴 문서나 코드베이스를 잘라 넣지 않고 통째로 넣을 수 있는 크기가 됐다는 말이구나.
이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.
댓글
아직 댓글이 없습니다