👩💻 API 예외 처리
📌API 예외 처리 - 시작
✏️ API 예외 처리 목표
: API 예외 처리 방법에 대해 알아보자.
HTML 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다.
그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다.
✏️ ApiExceptionController - API 예외 컨트롤러
: API예외를 처리하는 컨트롤러 코드를 작성해보자.

단순히 회원을 조회하는 기능을 하나 만들었다.
예외 테스트를 위해 URL에 전달된 `id` 의 값이 `ex` 이면 예외가 발생하도록 코드를 심어두었다.
""Postman"으로 테스트"
테스트 하기 전에, HTTP Header에 Accept가 "application/json"인 것을 꼭 확인하자.



API를 요청했는데, 정상의 경우 API로 JSON 형식으로 데이터가 정상 반환된다.
그런데 오류가 발생하면 우리가 미리 만들어둔 오류 페이지 HTML이 반환된다. 이것은 기대하는 바가 아니다.
클라이언트는 정상 요청이든, 오류 요청이든 JSON이 반환되기를 기대한다.
웹 브라우저가 아닌 이상 HTML을 직접 받아서 할 수 있는 것은 별로 없다.
문제를 해결하려면 오류 페이지 컨트롤러도 JSON 응답을 할 수 있도록 수정해야 한다.
✏️ ErrorPageController - API 응답 추가
: API 응답을 보내는 Controller를 추가하자.

`produces = MediaType.APPLICATION_JSON_VALUE` 의 뜻은
클라이언트가 요청하는 HTTP Header의 'Accept` 의 값이 `application/json` 일 때 해당 메서드가 호출된다는 것이다.
결국 클라어인트가 받고 싶은 미디어 타입이 json이면 이 컨트롤러의 메서드가 호출된다.
"Postman" 으로 테스트


✏️ Html 페이지 vs API 오류
: 복잡한 API 오류는 어떻게 처리해야하는지 지금부터 하나씩 알아보자.
스프링 부트가 제공하는 `BasicErrorController` 는 HTML 페이지를 제공하는 경우에는 매우 편리하다.
4xx, 5xx 등등 모두 잘 처리해준다. 그런데 API 오류 처리는 다른 차원의 이야기이다. API 마다, 각각의 컨트롤러나 예외마다 서로 다른
응답 결과를 출력해야 할 수도 있다.
예를 들어서 회원과 관련된 API에서 예외가 발생할 때 응답과, 상품과 관련된 API에서 발생하는 예외에 따라 그 결과가 달라질 수 있다.
결과적으로 매우 세밀하고 복잡하다.
따라서 이 방법 은 HTML 화면을 처리할 때 사용하고, API 오류 처리는 뒤에서 설명할`@ExceptionHandler` 를 사용하자.
'Spring' 카테고리의 다른 글
| [Spring] Jsoup를 사용한 html 파싱 (0) | 2024.06.17 |
|---|---|
| [Spring]강의 들으며 헷갈리는 Spring 개념 정리 (0) | 2024.03.04 |
| 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 [예외 처리와 오류 페이지] (0) | 2024.02.23 |
| 스프링 MVC 2편 - 백앤드 웹 개발 핵심 기술 [Servlet Filter && Interceptor] (0) | 2024.02.21 |
| 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 [Cookie & Session] (0) | 2024.02.20 |