Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TIL] @ControllerAdvice와 @ExceptionHandler를 사용한 전역 예외 처리 #14

Open
yunyoung1819 opened this issue Oct 9, 2023 · 0 comments
Assignees
Labels

Comments

@yunyoung1819
Copy link
Owner

yunyoung1819 commented Oct 9, 2023

Date

  • 2023.10.09

Title

Description

@ControllerAdvice

  • @ControllerAdvice란 컨트롤러에 대해 @ExceptionHandler, @InitBinder, @ModelAttribute가 적용된 메서드에 AOP를 적용하기 위해 고안됨

  • 또한 @Component가 포함되어 있기 때문에 빈으로 관리된다.

  • 일반적으로 @Controller, @RestController가 선언된 클래스들에서 발생한 예외를 감지하고 적절한 응답을 만들어낼 때 사용한다.

@ExceptionHandler

  • @ExceptionHandler@Controller, @RestController 애노테이션이 적용된 빈(Bean) 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리를 해주는 기능

  • @ExceptionHandler는 Controller, RestController에서만 적용이 가능하다. (@Service와 같은 빈에서는 적용되지 않음)

@RestControllerAdvice

  • @RestControllerAdvice@ControllerAdvice@responsebody가 추가로 붙어 있어 응답을 JSON으로 내려준다는 특징이 있다.
  • @ControllerAdvice@RestControllerAdvice는 각각 Spring 3.2와 Spring 4.3 부터 제공되고 있다
  • 프로젝트에 하나의 @ControllerAdvice만 관리하는 것을 권장함. 여러 개를 사용하려면 basePackageClasses 및 basePackages와 같은 Selector를 사용해야 하기 때문임. 이렇게 되면 OR 연산을 통해 올바른 Selector를 찾아야 하는데 해당 과정은 런타임 시점에 수행되므로 많아질수록 성능에 영향을 미치고 복잡성이 올라감
  • @ControllerAdvice@RestController를 통해 전역적으로 발생하는 예외를 처리하게 되면 각 메서드에 try-catch 문으로 처리할 필요가 없어지고, 발생하는 에러에 대한 응답을 일관성 있게 원하는 포멧으로 처리할 수 있음

Reference

@yunyoung1819 yunyoung1819 self-assigned this Oct 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant