Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
-
[김영한 스프링] 49. 스프링 타입 컨버터 - 프로젝트 생성 & 세팅Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 10. 5. 02:28
프로젝트 생성 https://start.spring.io 프로젝트 선택 Project : Gradle Project Language : Java Spring Boot : SNAPSHOT이 아닌 버전에서 2.x Project Metadata Group : hello Artifact : typeconverter Name : typeconverter Package name : hello.typeconverter Packaging : Jar Java : 11 Dependencies : Spring Web, Lombok, Thymeleaf 프로젝트 열기 build.gradle 선택 -> 프로젝트 열기 설정 설정 -> Gradle -> Intelij IDEA로 변경 설정 -> 파일 인코딩 -> 프로퍼티 파일에 대한..
-
[김영한 스프링] 48. API 예외 처리 - @ControllerAdviceSpring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 10. 5. 01:53
API 예외 처리 - @ControllerAdvice @ExceptionHandler를 사용해서 예외를 깔끔하게 처리할 수 있게 되었지만, 정상 코드와 예외 처리 코드가 하나의 컨트롤러에 섞여 있다. @ControllerAdvice 또는 @RestControllerAdvice를 사용하면 둘을 분리할 수 있다. ExControllerAdvice main/java/hello/exception/exhandler/advice/ExControllerAdvice 생성 package hello.exception.exhandler.advice; import hello.exception.exception.UserException; import hello.exception.exhandler.ErrorResult; impo..
-
[김영한 스프링] 47. API 예외 처리 - @ExceptionHandlerSpring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 10. 5. 01:40
API 예외 처리 - @ExceptionHandler HTML 화면 오류 vs API 오류 웹 브라우저에 HTML 화면을 제공할 때는 오류가 발생하면 BasicErrorController를 사용하는게 편하다. 이때는 단순히 5xx, 4xx 관련된 오류 화면을 보여주면 된다. BasicErrorController는 이런 메커니즘을 모두 구현해 두었다. 그런데 API는 각 시스템마다 응답의 모양도 다르고, 스펙도 모두 다르다. 예외 상황에 단순히 오류 화면을 보여주는 것이 아니라, 예외에 따라서 각각 다른 데이터를 출력해야 할 수도 있다. 그리고 같은 예외라고 해도 어떤 컨트롤러에서 발생했는가에 따라서 다른 예외 응답을 내려주어야 할 수 있다. 한마디로 매우 세밀한 제어가 필요하다. 앞서 이야기했지만, 예를..
-
[김영한 스프링] 46. API 예외 처리 - 스프링이 제공하는 ExceptionResolverSpring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 27. 03:52
API 예외 처리 - 스프링이 제공하는 ExceptionResolver1 스프링 부트가 기본으로 제공하는 ExceptionResolver는 다음과 같다. HandlerExceptionResolverComposite에 다음 순서로 등록 ExceptionHandlerExceptionResolver ResponseStatusExceptionResolver DefaultHandlerExceptionResolver -> 우선순위가 가장 낮다. ExceptionHandlerExceptionResolver @ExceptionHandler을 처리한다. API 예외 처리는 대부분 이 기능으로 해결한다. 조금 뒤에 자세히 설명한다. ResponseStatusExceptionResolver HTTP 상태 코드를 지정해 준다..
-
[김영한 스프링] 45. API 예외 처리 - HandlerExceptionResolver 시작 & 활용Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 27. 02:36
API 예외 처리 - HandlerExceptionResolver 시작 목표 예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다. 발생하는 예외에 따라서 400, 404 등등 다른 상태코드로 처리하고 싶다. 오류 메시지, 형식 등을 API마다 다르게 처리하고 싶다. 상태코드 변환 예를 들어서 IllegalArgumentException을 처리하지 못해서 컨트롤러 밖으로 넘어가는 일이 발생하면 HTTP 상태코드를 400으로 처리하고 싶다. 어떻게 해야할까? ApiExceptionController - 수정 package hello.exception.api; import lombok.AllArgsConstructor; import lombok.Data; impor..
-
[김영한 스프링] 44. API 예외 처리 - 시작 & 스프링 부트 기본 오류 처리Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 22. 23:55
API 예외 처리 - 시작 목표 API 예외 처리는 어떻게 해야할까? HTML 페이지의 경우 지금까지 설명했던 것처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. WebServerCustomizer 다시 동작 package hello.exception; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.Erro..
-
[김영한 스프링] 43. 예외 처리와 오류 페이지 - 스프링 부트 오류 페이지Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 22. 03:05
스프링 부트 - 오류 페이지1 지금까지 예외 처리 페이지를 만들기 위해서 다음과 같은 복잡한 과정을 거쳤다. WebServerCustomizer를 만들고 예외 종류에 따라서 ErrorPage를 추가하고 예외 처리용 컨트롤러 ErrorPageController를 만듦 스프링 부트는 이런 과정을 모두 기본으로 제공한다. ErrorPage를 자동으로 등록한다. 이때 /error라는 경로로 기본 오류 페이지를 설정한다. new ErrorPage("/error"), 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다. 서블릿 밖으로 예외가 발생하거나, response.sendError(...)가 호출되면 모든 오류는 /error를 호출하게 된다. BasicErrorController라는 스프링 컨트롤러..
-
[김영한 스프링] 42. 예외 처리와 오류 페이지 - 서블릿 예외 처리 오류 페이지 작동 원리 & 필터Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 22. 00:54
서블릿 예외 처리 - 오류 페이지 작동 원리 서블릿은 Exception (예외)가 발생해서 서블릿 밖으로 전달되거나 또는 response.sendError()가 호출되었을 때 설정된 오류 페이지를 찾는다. 예외 발생 흐름 WAS(여기까지 전파) 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러 -> View /error-ex 오류 요청 필터는 DispatchType으로 중복 호출 제거 (dispatchType=REQUEST) 인터셉터는 경로 정보로 중복 호출 제거(excludePathPatterns("/error-page/**")) 1. WAS(/error-ex, dispatchType=REQUEST) -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러 2. WAS(여기까지 전파) 컨트롤러(/error-pa..