Inflearn brand logo image

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

yamsroun님의 프로필 이미지
yamsroun

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

강의 소개

ApiControllerAdvice에서 2개 이상의 Exception 타입 핸들링

작성

·

43

0

안녕하세요.

ApiControllerAdvice에서 하나의 Handler 메서드에서 아래 2개 Exeception 타입을 처리하시도록 변경하셨는데요.

- DuplicateEmailException
- DuplicateProfileException

 

이렇게 할 경우, 아래와 같이 두 Exception의 공통 타입인 RuntimeException 객체로 파라미터를 받아야 하는거 아닐까요?

@ExceptionHandler({DuplicateEmailException.class, DuplicateProfileException.class})
public ProblemDetail duplicateExceptionHandler(RuntimeException e) {
    return getProblemDetail(HttpStatus.CONFLICT, e);
}

 

감사합니다.

답변 2

1

토비님의 프로필 이미지
토비
지식공유자

앗. 그렇네요. 말씀하신 내용이 맞습니다.
API 예외응답 테스트까지 안 만들었더니 나중에 추가한 DuplicateProfileException 핸들링하는 부분을 놓쳤습니다.

이번 강의에선 ApiControllerAdvice를 본격적으로 만들지는 않았습니다. 예외처리와 응답 코드 등에 관해서 한번 정리하고 체계적으로 핸들러를 재구성할 계획이 있습니다. 어쨌든 제가 놓친 부분을 찾아주셔서 감사합니다.

파트2 초반에 이 문제를 어떻게 다룰지 이야기 해보겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. yamsroun님, 질문 주셔서 감사합니다.

ApiControllerAdvice에서 두 개 이상의 예외를 하나의 핸들러 메서드에서 처리할 때, 두 예외가 공통적으로 상속받는 상위 클래스인 RuntimeException으로 처리할 수 있습니다. 하지만 예외 핸들러 메서드에서는 보통 특정 예외의 세부 처리나 로깅 등을 위해 각 예외 클래스 타입을 명시적으로 지정하여 다루는 것이 더 일반적입니다.

질문하신 내용처럼 두 개의 예외를 공통 타입으로 처리할 수도 있습니다:

@ExceptionHandler({DuplicateEmailException.class, DuplicateProfileException.class})
public ProblemDetail duplicateExceptionHandler(RuntimeException e) {
    return getProblemDetail(HttpStatus.CONFLICT, e);
}

이렇게 처리하면 코드의 간결성 측면에서는 유리하지만, 각 예외에 대해 다르게 처리할 가능성을 아예 배제하게 된다는 점에서는 다소 유연성이 떨어질 수 있습니다.

관련된 질문으로 도움이 될 만한 유사한 질문을 참고하시면, 예외 처리 시 공통된 구조를 유지하는 방법과 각 예외별 특성을 반영하는 방법에 대한 지식을 더 확장하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

yamsroun님의 프로필 이미지
yamsroun

작성한 질문수

질문하기