본문 바로가기
728x90
반응형

스프링/스프링 웹 개발 활용66

[Spring] API 예외 처리 - @ExceptionHandler 와 @ControllerAdvice @ExceptionHandler HTML 화면오류 vs API 오류 웹 브라우저에 HTML 화면을 제공할 때는 오류가 발생하면 BasicErrorController 를 사용하는게 편하다. 이때는 단순히 5xx, 4xx 관련된 오류 화면을 보여주면 된다. BasicErrorController 는 이런 메커니즘을 모두 구현해두었다. 그런데 API는 각 시스템 마다 응답의 모양도 다르고, 스펙도 모두 다르다. 예외 상황에 단순히 오류 화면을 보여주는 것이 아니라, 예외에 따라서 각각 다른 데이터를 출력해야 할 수도 있다. 그리고 같은 예외라고 해도 어떤 컨트롤러에서 발생했는가에 따라서 다른 예외 응답을 내려주어야 할 수 있다. 한마디로 매우 세밀한 제어가 필요하다. 예를 들어서 상품 API와 주문 API는 오.. 2023. 12. 4.
[Spring] API 예외 처리 - 스프링이 제공하는 ExceptionResolver API 예외 처리 - 스프링이 제공하는 ExceptionResolver 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 다음과 같다. HandlerExceptionResolverComposite 에 다음 순서로 등록 1. ExceptionHandlerExceptionResolver 2. ResponseStatusExceptionResolver 3. DefaultHandlerExceptionResolver → 우선 순위가 가장 낮다. ExceptionHandlerExceptionResolver @ExceptionHandler 을 처리한다. API 예외 처리는 대부분 이 기능으로 해결한다. ResponseStatusExceptionResolver HTTP 상태 코드를 지정해준다. 예) @.. 2023. 12. 3.
[Spring] API 예외처리 - HandlerExceptionResolver API 예외 처리 - 시작 목표 API 예외 처리는 어떻게 해야할까? HTML 페이지의 경우 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. API도 오류 페이지처럼 처음으로 돌아가서 서블릿 오류 페이지 방식을 사용해보도록 하 WebServerCustomizer 다시동작 package hello.exception; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.spr.. 2023. 12. 1.
[Spring] 서블릿 예외 처리(필터&인터셉터), 이를 보완한 스프링 부트 오류 페이지 서블릿 예외 처리 - 필터 목표 예외 처리에 따른 필터와 인터셉터 그리고 서블릿이 제공하는 DispatchType 이해하기 예외 발생과 오류 페이지 요청 흐름 1. WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외발생) 2. WAS `/error-page/500` 다시 요청 → 필터 → 서블릿 → 인터셉터 → 컨트롤러(/error-page/500) → View 오류가 발생하면 오류 페이지를 출력하기 위해 WAS 내부에서 다시 한번 호출이 발생한다. 이때 필터, 서블릿, 인터셉터도 모두 다시 호출된다. 그런데 로그인 인증 체크 같은 경우를 생각해보면, 이미 한번 필터나, 인터셉터에서 로그인 체크를 완료했다. 따라서 서버 내부에서 오류 페이지를 호출한다고 해서 해당 필터나 인터셉트가 .. 2023. 11. 28.
[Spring] 예외 처리와 오류 페이지 - 서블릿 예외 처리 및 오류 페이지 작동 원리 https://start.spring.io/ 위에 첨부한 프로젝트를 다운받고, build.gradle로 열기 build.gradle 은 아래와 같다.plugins { id 'java' id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } depend.. 2023. 11. 28.
[Spring] 로그인 처리 시 ArgumentResolver 활용하기 ArgumentResolver는 아래의 포스팅에 설명이 되어있다. https://drcode-devblog.tistory.com/498 [Spring] 요청 매핑 핸들러 어뎁터 구조 그렇다면 HTTP 메시지 컨버터는 스프링 MVC 어디쯤에서 사용되는 것일까? SpringMVC 구조 핵심은 애노테이션 기반의 컨트롤러, 그러니까 @RequestMapping 을 처리하는 핸들러 어댑터인 RequestMappingHandlerAdap drcode-devblog.tistory.com ArgumentResolver 를 이용해서 로그인 회원을 좀 더 편리하게 찾아볼 수 있다. HomeController - 추가 @GetMapping("/") public String homeLoginV3ArgumentResolver(.. 2023. 11. 21.
728x90
반응형