SPRING/Spring MVC 38

[SpringMVC] API 예외처리하기(3) - @ExceptionHandler, @ControllerAdvice

[SpringMVC] API 예외처리하기(2) - HandlerExceptionResolver 컨트롤러에서 에러가 발생하면 복잡해진다. 클라이언트 요청 -> WAS -> 컨트롤러 (에러발생) -> WAS -> 컨트롤러 -> 클라이언트 응답 [SpringMVC] API 예외처리하기(1) - BasicErrorController 위 그림은 Spring에서 lordofkangs.tistory.com 지난 포스팅에서 API 호출에서 발생하는 에러를 처리하기 위해, ExceptionResolver를 직접 만들어 구현해보았다. Controller에서 에러가 발생하면 디스패처 서블릿으로 전파된다. 디스패처 서블릿은 에러가 WAS로 전파되지 않도록 에러를 핸들링 할 수 있는 ExceptionResolver를 탐색한다...

SPRING/Spring MVC 2023.09.13

[SpringMVC] API 예외처리하기(2) - HandlerExceptionResolver

컨트롤러에서 에러가 발생하면 복잡해진다. 클라이언트 요청 -> WAS -> 컨트롤러 (에러발생) -> WAS -> 컨트롤러 -> 클라이언트 응답 [SpringMVC] API 예외처리하기(1) - BasicErrorController 위 그림은 Spring에서 에러가 발생했을 때 처리되는 과정이다. 에러가 발생했을 때 try-catch문으로 Exception을 잡지 않으면 에러는 WAS까지 전달된다. WAS는 에러의 종류를 확인하고 그에 따른 요청을 lordofkangs.tistory.com 그래서 지난 포스팅에서는 위 과정을 자동화 해주는 스프링부트의 BasicErrorController에 대해서 알아보았다. 그러나 API 요청은 다양하고 그에 따라 다양한 에러 응답이 필요하다. BasicErrorCon..

SPRING/Spring MVC 2023.09.12

[SpringMVC] API 예외처리하기(1) - BasicErrorController

위 그림은 Spring에서 에러가 발생했을 때 처리되는 과정이다. 에러가 발생했을 때 try-catch문으로 Exception을 잡지 않으면 에러는 WAS까지 전달된다. WAS는 에러의 종류를 확인하고 그에 따른 요청을 서블릿에게 재요청한다. 서블릿은 요청과 매핑되는 컨트롤러를 호출하여 오류에 대한 응답을 클라이언트에게 전송한다. 이때 클라이언트가 HTML 응답을 원한다면 에러페이지를 렌더링하여 응답하면 된다. 그런데 클라이언트가 application/json과 같이, HTML이 아닌 다른 방식으로 에러를 응답하기를 바란다면 어떻게 해야 할까? 우선 오류가 발생했을 때, 오류 종류에 따른 WAS 설정을 해보자. WebServerFactoryCustomizer 구현체 @Component public cla..

SPRING/Spring MVC 2023.09.11

[SpringMVC] SpringBoot에서 오류 페이지 띄우기

지난 포스팅에서 오류 페이지가 띄어지는 원리에 대해서 다루어 보았다. HTTP 요청이 들어오면 WAS에서 컨트롤러까지 갔다가, 에러가 발생하면 컨트롤러에서 WAS까지 에러가 전파된 후, WAS는 에러코드에 대응되는 에러페이지 요청을 다시 컨트롤러로 보낸다. 그러면 컨트롤러는 요청에 대응하는 에러페이지를 경로를 뷰템플릿에 반환하여 렌더링하고 클라이언트에게 응답한다. 이 과정을 위해 2가지를 구현해야 했다. 1) 에러페이지 객체 등록 @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) {..

SPRING/Spring MVC 2023.09.01

[SpringMVC] 예외처리 ( 필터, 인터셉터 )

[SpringMVC] 오류페이지 띄우기 ( SpringBoot ) HTTP 요청이 들어오면 위 그림과 같은 순서로 처리가 된다. 만약 여기서 예외가 발생하면 어떻게 될까? try-catch문으로 예외를 처리하면 상관없지만 서블릿 밖으로 예외가 전파되면 예외는 WAS까지 lordofkangs.tistory.com 지난 포스팅에서 오류페이지가 띄워지는 원리를 살펴보았다. 에러 발생 시, try-catch문으로 예외처리가 되지 않으면 에러는 전파되어 WAS까지 전달된다. WAS는 에러코드에 맞는 적절한 에러페이지를 응답해야 한다. 지난 포스팅에서 에러페이지를 띄우기 위한 URL 요청을 다시 서블릿에게 보내도록 설정했다. 그럼 위 그림처럼 다시 WAS->필터->서블릿->인터셉터->컨트롤러로 이동한다. 필터와 인..

SPRING/Spring MVC 2023.09.01

[SpringMVC] 오류페이지 띄우기

HTTP 요청이 들어오면 위 그림과 같은 순서로 처리가 된다. 만약 여기서 예외가 발생하면 어떻게 될까? try-catch문으로 예외를 처리하면 상관없지만 서블릿 밖으로 예외가 전파되면 예외는 WAS까지 올라간다. WAS는 오류페이지를 클라이언트에 응답하는 방식으로 예외를 처리한다. Controller @GetMapping("/error-ex") public void errorEx(){ throw new RuntimeException("예외 발생"); } /error-ex 경로로 요청이 들어오면 RuntimeException을 던져보겠다. application.properties server.error.whitelabel.enabled=false SpringBoot환경의 경우, SpringBoot가 제공..

SPRING/Spring MVC 2023.09.01

[SpringMVC] ArgumentResolver 활용하기

[SpringMVC] HTTP 메시지 컨버터 동작원리 JSON 데이터를 JAVA 환경에서 사용하는 방법이다. HTTP Body 영역의 데이터를 InputStream 객체로 이진데이터를 가지고 온 후, 인코딩하고 문자열로 변환하면 JAVA 환경에서 사용가능한 데이터 타입이 된 lordofkangs.tistory.com 지난 포스팅에서 ArgumentResolver의 개념을 다루어보았다. Controller는 비즈니스 로직을 처리하는 클래스로, 필요한 데이터를 파라미터로 요구한다. Controller(Handler)를 실행하는 주체는 HandlerAdapter인데, HandlerAdapter는 파라미터에 맞는 데이터를 넘겨야 한다. 그러므로 다양한 파라미터에 대응할 수 있는 모듈이 필요한데, 그것이 Argu..

SPRING/Spring MVC 2023.08.31

[SpringMVC] 스프링 인터셉터(Interceptor)란?

[SpringMVC] 서블릿 필터(Filter)란? [SpringMVC] 서블릿 세션(Servlet Session) 이용하기 [SpringMVC] Session( 세션 )이란? [SpringMVC] Cookie ( 쿠키 ) 클라이언트가 웹페이지에 접근하려고 한다. 웹페이지는 회원만 접근 가능하므로 서버는 클라이언 lordofkangs.tistory.com 지난 포스팅에서 공통 관심사 로직을 처리를 위한 필터(Filter)에 대해서 다루어 보았다. 스프링도 필터와 같은 기능을 하는 모듈을 제공하는데, 그것이 인터셉터(Interceptor)이다. 인터셉터(Interceptor) HTTP 요청이 들어오면 위 그림과 같은 순서로 처리된다. 인터셉터는 서블릿과 컨트롤러 사이에 위치하여 공통관심사를 처리한다. 관심..

SPRING/Spring MVC 2023.08.31

[SpringMVC] 서블릿 필터(Filter)란?

[SpringMVC] 서블릿 세션(Servlet Session) 이용하기 [SpringMVC] Session( 세션 )이란? [SpringMVC] Cookie ( 쿠키 ) 클라이언트가 웹페이지에 접근하려고 한다. 웹페이지는 회원만 접근 가능하므로 서버는 클라이언트 요청에 로그인 페이지로 응답한다. 클라 lordofkangs.tistory.com 지난 포스팅에서 세션을 다루며 로그인에 대해서 알아보았다. 클라이언트가 서버에 ID/Password를 전송하면, 서버는 회원여부를 검사하고, 회원이 맞으면 세션을 생성하고 클라언트에게 세션ID가 담긴 쿠키를 전달한다. 쿠키는 인증수단으로 ID/Password를 대신한다. 그러므로 서버는 쿠키를 검증하는 로직이 있어야 한다. 쿠키에 담긴 세션ID가 유효한 세션인지 ..

SPRING/Spring MVC 2023.08.31

[SpringMVC] 서블릿 세션(Servlet Session) 이용하기

[SpringMVC] Session( 세션 )이란? [SpringMVC] Cookie ( 쿠키 ) 클라이언트가 웹페이지에 접근하려고 한다. 웹페이지는 회원만 접근 가능하므로 서버는 클라이언트 요청에 로그인 페이지로 응답한다. 클라이언트는 ID와 비밀번호를 입 lordofkangs.tistory.com 지난 포스팅에서 세션에 대해서 알아보았다. JAVA는 서블릿 패키지에서 세션을 사용할 수 있도록 제공하고 있다. LoginController @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, HttpServletRequest request){ // DB에서 회원정보 조회 [ 비즈니스 로직 ] Member logi..

SPRING/Spring MVC 2023.08.30