[SPRING] API 예외처리

김승수·2024년 6월 26일
0

SPRING

목록 보기
22/27

⏰ 2024. 06. 26 수

✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.

💡 목차

  1. API 예외처리란?
  2. 웹 애플리케이션의 에러
  3. 예외처리 방법
  4. Global 예외 처리

API 예외처리

API 예외처리란?

  • 예외 처리를 따로 배우는 이유
  1. 웹 애플리케이션의 예외에 대하여 다시 인지할 필요가 있다. 만약 웹 애플리케이션에서의 에러를 클라이언트와 서버 모두 알지 못한다면, 서비스하는 환경에서 발생하는 에러에 대응할 수 없기 때문이다.

  2. 에러를 처리하는 것 역시 관심사를 분리해서 더 효율적으로 처리하는 방법에 대해 알아야 하기 때문이다.

웹 애플리케이션의 에러

HTTP 에러 메세지 전달 방법 이해

  • HTTP 메세지 예시

  • 응답(Response) 메세지의 시작 줄(start-line)은 상태 줄이다.

  • 상태 줄은 프로토콜 버전, 요청의 성공 여부를 나타내는 상태코드, 상태코드에 대한 상태메세지로 구성된다.

  • 프로토콜 버전은 보통 HTTP/1.1이고 가끔 HTTP2도 있다.

  • 상태코드OK를 나태내는 200, BAD REQUEST를 나타내는 400 등 요청을 처리한 결과 또는 오류에 대한 HttpStatus이다.

  • 상태메세지는 HTTP 메세지를 이해하기 위해 필요한 상태 코드에 따라 정보를 제공하기 위한 메세지이다.

예외처리 방법

  • 예외처리를 하는 방법으로는 ResponseEntity 사용하는 방법과 @ExceptionHandler를 사용해 처리하는 방법이 있다.

1. ResponseEntity 사용

  • ResponseEntity 객체는 HTTP Response Object를 담기 위한 Wrapper 객체이다.

  • 생성자를 통해 StatusCode, Header, Body를 담아 생성할 수 있다.

  • 응답할 때 어떤 상태코드와 어떤 내용을 담은 객체를 Body에 담아 응답할지 선택할 수 있다.

  • try-catch 문을 통해 두가지 ResponseEntity로 나눠 응답할 수 있다

2. @ExceptionHandler 사용

  • ResponseEntity를 통해 모든 Controller에서 해당 작업을 해야하는 일은 너무 번거롭기 때문에 AOP 기능으로 @ExceptionHandler 사용함으로써 모듈화할 수 있다.

  • @ExceptionHandler는 Controller에서 발생한 예외를 처리하기 위해 사용한다.

  • @ExceptionHandler이 설정된 메서드는 Controller에서 예외가 발생했을 때 호출되고, 예외를 처리하는 로직을 담당한다.

  • AOP를 이용한 예외처리 방식이기에 반복적인 Try-Catch문을 사용할 필요 없이 예외처리할 수 있다.

Global 예외처리

  • 예외처리 로직은 공통적이고 제대로 짜여진 로직은 해당 예외에 대해 대응할 수 있다.

  • 그렇기 때문에 Contoller에서 발생하는 예외이든, Service에서 발생하는 예외이든, 어떤 계층에서 발생하는 예외든 Client가 해석 가능한 모습으로 정제하여 응답해주는 방법이 Global 예외처리이다.

Global 예외 처리

@ControllerAdvice

  • @ControllerAdvice은 Spring에서 예외처리를 위한 클래스 레벨 애너테이션이다.

  • @ControllerAdvice이 설정된 클래스에서 @ExceptionHandler 설정한 메서드를 정의하여 예외를 처리하는 로직을 구현할 수 있다.

@ControllerAdvice 애너테이션을 사용하는 이유

  • 예외처리를 중앙 집중화하기 좋다.

  • 하나의 예외에 대해 대응되는 로직을 반복하지 않아도 되기 때문에 코드의 중복을 방지하고 유지보수성을 높인다.

  • 예외처리 로직을 모듈화하여 관리하고 쉽고, 공통된 예외처리 로직을 공유하거나 참고할 수 있기 때문에 개발 생상선이 향상된다.

@RestControllerAdvice

  • @RestControllerAdvice 애너테이션은 @ContollerAdvice + @ResponseBody를 합친 기능을 한다.
profile
개발하는 미어캣

0개의 댓글