Back-end
-
[Spring] 어노테이션 @ExceptionHandlerBack-end/Spring 2022. 4. 12. 16:06
안녕하세요 이번 포스팅은 ExceptionHandler 어노테이션에 대해서 알아보겠습니다. HTML 화면 오류 vs API 오류 웹 브라우저에서 HTML 화면을 제공할 때는 오류가 발생하면 BasicErrorController를 사용하는 게 편합니다. 이때는 단순히 5xx, 4xx 관련된 오류 화면을 보여주면 됩니다. BasicErrorController는 이런 메커니즘을 모두 구현해두었습니다. 그런데 API는 각 시스템 마다 응답의 모양도 다르고, 스펙도 모두 다릅니다. 예외 상황에 단순히 오류 화면을 보여주는 것이 아니라, 예외에 따라서 각각 다른 데이터를 출력해야 할 수도 있습니다. 그리고 같은 예외라고 해도 어떤 컨트롤러에서 발생했는가에 따라서 다른 예외 응답을 내려주어야 할 수 있습니다. 한마디..
-
[Spring] 스프링이 제공하는 ExceptionResolverBack-end/Spring 2022. 4. 12. 15:26
안녕하세요 이번 포스팅은 스프링이 제공하는 ExceptionResolver에 대해서 알아보겠습니다. 스프링 부트가 기본으로 제공하는 ExceptionHandler는 다음과 같습니다. HandlerExceptionResolverComposite에 다음 순서로 등록합니다. 1. ExceptionHandlerExceptionResolver - @ExceptionHandler를 처리합니다. API 예외 처리는 대부분 이 기능으로 해결합니다. 2. ResponseStatusExceptionResolver - HTTP 상태 코드를 지정해줍니다. 예) @ResponseStatus(value = HttpStatus.NOT_FOUND) 3. DefaultHandlerExceptionResolver - 스프링 내부 기본 ..
-
[Spring] API 예외 처리Back-end/Spring 2022. 4. 12. 14:59
안녕하세요 이번 포스팅은 API 예외 처리에 대해서 알아보겠습니다!! API 예외 처리 - 시작 HTML 페이지의 경우 지금까지 설명했던 것처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있었습니다. 그런데 API의 경우에는 생각할 내용이 더 많습니다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 합니다. 지금부터 API의 경우 어떻게 예외 처리를 하면 좋은지 알아보겠습니다. WebServerCustomizer import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.spring..
-
[Spring] 예외 처리(Exception)와 오류 페이지Back-end/Spring 2022. 4. 11. 15:10
안녕하세요 이번 포스팅은 예외처리와 오류 페이지에 대해서 알아보겠습니다!! 서블릿 예외 처리 시작 우선 스프링이 아닌 순수 서블릿 컨테이너는 예외를 어떻게 처리하는지 알아보겠습니다. 서블릿은 다음 2가지 방식으로 예외 처리를 지원합니다. 1.Exception(예외) 2.response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행됩니다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료됩니다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행됩니다..
-
[Spring] 스프링 인터셉터(Spring Interceptor)Back-end/Spring 2022. 4. 11. 12:13
안녕하세요 이번 포스팅은 스프링 인터셉터에 대해서 알아보겠습니다. 스프링 인터셉터(Spring Interceptor) 소개 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술입니다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술입니다. 둘 다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다릅니다. 1. 스프링 인터셉터는 디스패쳐 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출됩니다. 2. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 됩니다 스프링 MVC의 시작점이 디스패처 서블릿이라고 생각해보면 이해가 됩니다. 3...
-
[Spring] 서블릿(Servlet)의 필터(Filter)기능 소개Back-end/Spring 2022. 4. 11. 11:26
안녕하세요 이번 포스팅은 서블릿에서 지원하는 필터 기능에 대해서 알아보겠습니다!!! 상황 가정 우선 다음과 같은 상황이있다고 가정해보겠습니다. 관리자는 한 쇼핑몰에 상품을 등록, 수정, 삭제를 하려고 하는데 이런 여러 로직을 수행하기 위해서는 관리자가 로그인이 되어있는지 확인을 해줘야 합니다. 물론 컨트롤러 단에서 session에 있는 정보를 꺼내서 모든 메서드마다 확인을 해줄 수 있지만 이것은 중복된 코드로 코드 가 비효율적이겠죠? 그렇기 때문에 저희는 서블릿 필터를 사용할 수 있습니다. 서블릿 필터 소개 필터는 서블릿이 지원하는 수문장이고 특성은 다음과 같습니다. 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출됩니다. 그래서 모든 고객의 요청 로그를 남기는 요구사항이 있다면 필터를 사용하면 됩니다..
-
[Spring] 메시지, 국제화Back-end/Spring 2022. 3. 28. 16:29
안녕하세요 이번 포스팅은 메시지와 국제화에 대해서 알아보겠습니다. 메시지 어떤 기획자가 HTML 파일에 있는 모든 상품명이라는 단어를 상품으로 변경해달라고 요청했다고 가정을 해봅시다. 그러면 여러 화면에 보이는 하드 코딩되어있는 상품명이라는 단어를 화면들을 다 찾아가면서 모두 변경해야 합니다. 화면수가 적다면 문제가 되지 않지만 수십 개 이상이라면 수십 개의 파일을 모두 고쳐야 한다는 번거로움이 생깁니다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라고 합니다. 국제화 메시지에서 한발 더 나아가서 메시지 파일(messages.properties)을 각 나라별로 관리하면 서비스를 국제화 할 수 있습니다. 예를 들어서 다음 과 같이 2개의 파일을 만들어서 분류합니다. mssages_..
-
[SPRING] PRG(POST/REDIRECT/GET)Back-end/Spring 2022. 3. 21. 16:46
안녕하세요! 이번 포스팅은 코드 없이 PRG의 개념에 대해서 알아보겠습니다 위와 같은 상황이 있다고 가정해봅시다. 클라이언트는 상품 등록 Form에 가서 주문을 하고 버튼을 누르면 컨트롤러에서 요청을 받아서 DB에 insert를 해주고 주문한 상품의 고유번호를 받아서 상품 상세 페이지를 고객에게 보여줍니다. 이 상태에서 새로고침 버튼을 누르게 되면 계속해서 상품이 주문되는 것을 확인할 수 있는데 이것은 심각한 결과를 초래할 수도 있습니다. 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송합니다. 상품 등록 폼에서 데이터를 입력하고 저장을 선택하면 POST로 상품 데이터를 전송하고 이 상태에서 새로 고침을 또 선택하면 마지막에 전송한 POST로 상품 데이터를 서버로 다시 전송하기 때문에..