강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Peter Choi님의 프로필 이미지
Peter Choi

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

@ExceptionHandler

ExceptionResolver 적용 우선순위 (스프링 내부 + 사용자 커스텀 구현체)

작성

·

435

·

수정됨

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
강의를 통해 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 가 있는 것을 배웠는데요,

그러면 수업 내용중 WebConfig 를 통해 등록한 아래 resolver 들까지 포함하면, 우선순위 높은 순으로 나열할 때 아래 순서가 되는 게 맞나요?
1) ExceptionHandlerExceptionResolver
2) ResponseStatusExceptionResolver
3) DefaultHandlerExceptionResolver
4) MyHandlerExceptionResolver
5) UserHandlerExceptionResolver

@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    resolvers.add(new MyHandlerExceptionResolver());
    resolvers.add(new UserHandlerExceptionResolver());

}

 

 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Peter Choi님

생각하신 내용이 맞습니다.

감사합니다.

기본적으로 스프링은 자세한 것에 우선순위가 높은데, 사용자가 정의한 exceptionresolver가 기본 exceptionresolver들보다 우선순위가 낮은 이유는 무엇인가요?

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 980513k님

사용자 정의 resolver가 기본 resolver보다 우선순위가 높다면, 스프링의 기본 예외 처리 메커니즘을 의도치 않게 덮어쓸 수 있습니다. 예를 들어 @ExceptionHandler와 같은 편리한 기능이 동작하지 않게 될 위험이 있습니다.

추가로 extendHandlerExceptionResolvers 메서드 이름에서도 알 수 있듯이, 이 메서드는 기존 resolver를 "확장"하기 위한 것입니다.

확장은 일반적으로 기존 기능을 유지하면서 추가 기능을 제공하는 개념입니다.

만약 사용자 정의 resolver를 최우선으로 적용하고 싶다면, configureHandlerExceptionResolvers 메서드를 오버라이드하여 resolver 목록을 완전히 새로 구성할 수 있습니다. 하지만 이 방식은 스프링의 기본 예외 처리 메커니즘을 모두 제거하므로 주의해서 사용해야 합니다.

감사합니다.

Peter Choi님의 프로필 이미지
Peter Choi

작성한 질문수

질문하기