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

[ 공통 ] > API 예외 처리 #7

Open
IMWoo94 opened this issue Jan 29, 2024 · 1 comment
Open

[ 공통 ] > API 예외 처리 #7

IMWoo94 opened this issue Jan 29, 2024 · 1 comment
Assignees

Comments

@IMWoo94
Copy link
Owner

IMWoo94 commented Jan 29, 2024

#4

배달 플랫폼 공통 기능 구현

  • 이전 [ 공통 ] > API 공통 정의 #6 를 통해서 API 에 대한 값을 전달할 때 공통 Spec 을 정의 했다.
  • 정상적인 케이스를 구성했지만, 예외가 발생하는 경우에는 어떻게 정의해야 할까?
    • 정상적인 케이스 처럼 예외 케이스에 대한 ErrorCode 를 정의해둔다.
    • 여기서 문제가 되는 부분은 각각의 예외마다 code 를 다르게 정의해야 하는데 매번 Try-catch 를 통해서 이때는 이 코드 저때는 저 코드 각각 주입해야 하는건가?
    • 이럴때 API 응답 시 예외를 예외마다 한 곳에서 처리할 수 있도록 ExceptionHandler 가 있다.
    • 더 나아가서 ControllerAdvice 를 통해서 각각의 Controller 마다 정의하는 것이 아닌 한 곳에서 관리 할 수 있도록 해준다.

API ErroCode 정의

  • 자주 사용되는 Error 코드를 Enum 클래스로 정의하여 생성
  • 서비스 별로 Error 코드를 별도로 구성하여서 필요에 따라 선택적으로 사용 가능하도록 정의 [ 공통, 사용자 ]
    • 공통 예외 1000번대 이하
    • 사용자 예외 1000번대...

예외 처리

@ExceptionHandler

  • 애플리케이션을 사용하면서 예외가 발생하는 경우를 각각의 요청마다 작성하는 것이 아닌 한 곳에서 예외 마다 정의를 하려 한다.
  • 이를 위해서 ExceptionHadler 어노테이션을 적용하여 해당 Controller 에서 발생 될 수 있는 예외를 선언하여 ExceptionHandler 가 선언된 메소드를 통해서 처리 할 수 있다.
  • 여기서 문제가 되는 부분은 Controller 내에 작성하면 해당 Controller 에서만 유효하다.
    다른 Controller 에 적용하기 위해서는 다시 작성을 해야 한다.

@ControllerAdvice

  • 이를 해결하기 위해서 ControllerAdvice 어노테이션을 이용해 애플리케이션 Controller 에서 발생하는 Exception 을 ControllerAdvice 가 선언된 클래스에서 처리 하도록 선언 할 수 있다.
@IMWoo94 IMWoo94 added the common label Jan 29, 2024
@IMWoo94 IMWoo94 self-assigned this Jan 29, 2024
@IMWoo94 IMWoo94 added the 완료 label Jan 29, 2024
@IMWoo94
Copy link
Owner Author

IMWoo94 commented Jan 29, 2024

완료

@IMWoo94 IMWoo94 changed the title [ 공통 ] API 예외 처리 [ 공통 ] > API 예외 처리 Jan 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant