지난 포스팅에서 HandlerExceptionResolver를 직접 구현하여 API예외를 처리하는 방법에 대해서 알아보았다. HandlerExceptionResolver를 활용하면 컨트롤러 밖으로 던져진 예외를 처리해 WAS에서 에러 페이지를 재요청하는 복잡한 과정을
예외가 발생했는데, 예외를 처리하지 못한다면 예외가 WAS까지 전달이 되고, WAS에서는 다시 에러 페이지 정보를 찾아서 요청을 호출하는 복잡한 과정이 일어나게 된다.그런데 이전의 포스팅에서 알아보았던 ExceptionResolver를 활용하면 이런 과정 없이 Hand
HTML예외 처리를 생각해보자. 로그인 기능의 문제이든, 게시판 업로드 기능의 문제이든 HTML 예외 처리의 경우 4XX, 5XX의 경우만 생각하고, 그에 맞는 예외 페이지만 띄워주면 된다.하지만 API의 경우는?API의 경우 HTML문서를 반환하는 것이 아니라, 각
지난 포스팅까지 해서 HTML을 반환하는 예외 처리 방법에 대해서 알아보았다. 그런데 그 방법처럼 예외로서 HTML을 반환하면 어떻게 될까? 코드로 결과를 확인해보자우선 지난번에 생성했던 에러페이지를 등록하는 클래스를 빈으로 등록해주자코드는 바뀐 것이 없고 @Compo
지난 포스팅에서 서블릿을 활용한 예외 처리 방법에 대해서 알아보았다.그런데 WebServerCustomizer를 생성하거나, 에러 페이지를 추가하고, 컨트롤러를 생성하는 등의 복잡한 과정이 필요했다. 이번에는 스프링부트를 활용하여 이 과정이 어떻게 생략되는지 확인해보자
앞서 예외와 그 흐름에 대해서 알아보았다. 그 흐름은 아래와 같다.위와 같은 흐름으로 예외가 발생하면, WAS에서 에러 페이지를 다시 요청하는데 이 과정에서 필터, 인터셉터, 컨트롤러 등이 다시 호출이 된다.그런데 로그인 체크의 경우를 생각해보면 이미 로그인 체크를 끝
서블릿은 2가지 방식으로 예외를 처리한다.1\. Exception(예외)2\. response.sendError(Http 상태 코드, 오류 메세지)자바의 경우 메인 메서드 실행의 경우 main이라는 이름의 쓰레드가 실행되는데, 예외가 발생하여 이를 잡지 못하면, 예외정
서블릿 필터와 마찬가지로 웹과 관련된 공통 관심 사항을 해결할 수 있는 기술필터가 서블릿에서 제공하는 기술인 것과 달리, 인터셉터는 스프링에서 제공하는 기술이다.로그인 사용자 : HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러비로그
쇼핑몰을 예로 들어보자. 로그인 기능을 구현한다고 한다면, 상품 등록, 수정, 삭제 기능 각각에 로그인 여부를 확인해야 하고, 각 기능에 로그인 기능을 구현하면 중복되는 코드가 늘어날 것이다. 이처럼 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사라고 한다. 웹과
먼저 쿠키에 대한 기본적인 지식은 쿠키를 참조하자쿠키는 사용자의 pc에 저장되는 데이터이기 때문에 탈취를 당하는 등의 보안적인 문제가 있다. 따라서 사용자의 예민한 정보 같은 것들은 세션을 이용해서 서버에 저장해야 한다.세션은 서버에 저장되는 값으로 로그인 시에 쿠키로
지난 포스팅에서 BeaValidation의 한계에 대해서 언급했다.상품의 수량에 대해서 등록 시에는 상품 수량이 1~9999사이어야 하지만, 수정 시에는 수량에 제한이 없을 때 각 검증이 다르게 적용해야 한다. 이 문제를 해결하려면 어떻게 해야할까?첫번째 방법은 Bea
앞선 포스팅에서 검증 기능을 구현해보았다. 그런데 이런 코드를 일일이 구현하는 것도 복잡하고, 이런 검증 로직은 대부분의 사람들이 겪는 사항이다. 때문에 Spring에서는 Bean Validation이라는 기능을 지원한다. Bean Validation이란? 검증 애노테
지난 포스팅에서 BindingResult라는 객체를 활용하여 에러 메세지를 처리하였다. 그런데 문제는 파라미터가 많다는 것이고, 메세지를 바꿔야 할 경우 코드를 다시 하나하나 바꿔야 한다는 것이다.이번 포스팅에서는 MessageSource를 이용하여 에러 메세지를 따로
지난 포스팅에서 간단한 검증을 구현해 봤는데, 몇가지 문제가 있었다.그 중에서 데이터 타입이 맞지 않을 경우 컨트롤러를 호출하기 전에 에러가 발생한다.이러한 검증은 스프링에서 기능을 제공하는데, 바로 BindingResult이다.먼저 코드로 확인해보자bindingRes
이런 데이터 입력 폼이 있다고 하자. 상품명은 아마 string형식으로 받을 것이고, 가격이나 수량은 숫자형 데이터로 받을 것이다. 물론 html도 데이터 종류에 맞춰서 type을 설정해뒀을 것이다. 하지만 만약 데이터 형태가 서버와 약속한 형태가 아니라면? 에러가
웹은 기본적으로 전세계 어느 사람이나 접근할 수 있다. 하지만 웹에 표현되어 있는 언어는 각 나라별로 달라지는데, 웹에서 사용되는 문자열 값들을 변경하려면 일일이 찾아서 고쳐줘야 한다.만약에 웹을 표현하는 문구가 '바그다드'였는데, 이게 마음에 들지 않아 'qkrmek
-지난 포스팅에서 타임리프의 주요 기능들에 대해서 알아봤다. 이번에는 타임리프와 스프링을 통합해서 사용하는 것에서 오는 편리한 기능을 알아보자 1. form 처리 먼저 컨트롤러에서 객체를 넘겨주자 이제 넘어온 객체를 이용하여 폼을 편하게 구성해보자 th:object
프로젝트를 할 때 뷰 템플릿으로 타임리프를 사용했는데, 그때는 간단한 기능만 사용한 정도였다. 이번에는 타임리프의 특징과 주요 기능들을 알아보자.서버 사이드 HTML 렌더링 (SSR)네츄럴 템플릿스프링 통합 지원HTML을 서버에서 동적으로 렌더링하고 완성된 결과를 클라
우리가 컨트롤러에서 사용하던 매개변수를 확인을 해보자우리는 당연하게 컨트롤러에서 어노테이션을 이용해 필요한 매개변수를 받아 사용하였다. 위의 코드에서는 하나의 예시만을 보여주지만, 컨트롤러의 메서드마다 각각 필요로 하는 인자 값들이 다를 수 있다. 또한 http 메세지
POST요청을 처리할 때 스프링에서는 'redirect:'를 활용해 간단하게 리다이렉트 응답을 반환할 수 있다. 먼저 redirect응답을 하는 코드를 예시로 확인해보자위의 코드는 리다이렉트를 통해 basic/items 밑에 item의 id를 쿼리 파라미터로 보내 해당