본문 바로가기

Spring

(183)
[Spring MVC] Type Converter 이번 장에서는 스프링의 타입 컨버터에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 개요 개발하다보면 문자 -> 숫자, 숫자 -> 문자 변환과 같은 타입을 변환시켜야 하는 경우가 많이 발생한다. 특히 우리는 무의식중에 당연하게 사용하고 있지만 HTTP 요청 파라미터의 경우 전부 문자열로 서버에 전송된다. 하지만 우리가 원하는 타입이 숫자라면 스프링이 중간에서 변환해주기 때문에 우리는 타입 변환없이 사용이 가능하다. 단순 파라미터 뿐만 아니라 @ModelAttribute, @PathVariable, @RequestBody, @Value, XML 파싱등 많은 부분에서 스프링이 자동으로 타입을 변경시켜주고 있다. Converter 인터페이스 스프링에서 기본적으로 지원하는 타입 변환이 아니라 개발..
[Spring MVC] API 예외처리 - 2 이전 장(링크) 에서는 서블릿을 통한 API 예외 처리 방법과 스프링 부트의 기본 API 예외 처리 방법에 대해서 알아보았다. 이번 장에서는 스프링이 제공하는 ExceptionResolver를 사용하여 API 예외 처리를 하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 개요 이전 장에서 HandlerExceptionResolver를 직접 구현하여 예외 처리를 하면서 예외 처리가 생각보다 간단하지 않다는 것을 알게 되었다. 이번 장에서는 스프링에서 기본적으로 제공하는 ExceptionResolver를 사용하여 보다 간편하게 API를 예외 처리하는 방법에 대해서 알아볼 것이다. 스프링에서 기본적으로 제공되어 HandlerExceptionResolverComposite에 등록되는 Ex..
[Spring MVC] API 예외처리 - 1 우리는 지금까지 서블릿을 통한 예외처리(링크) 와 스프링 부트를 통한 예외처리(링크) 에 대해서 알아보았다. 이번 장에서는 화면을 위한 예외처리가 아닌 API 요청에 대한 예외를 처리하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 개요 화면을 위한 HTML 파일 요청에 대한 예외 처리는 오류 페이지만 만들면 대부분의 문제를 처리할 수 있다. 하지만 API 요청에 대한 예외 처리를 하는 경우 오류 응답 스펙을 결정하고 JSON 형식으로 데이터를 내려주어야 한다. 서블릿을 사용하여 API 요청에 대한 예외 처리를 하는 방법에 대해서 알아본다. 서블릿을 사용한 API 예외 처리 WebServerFactoryCustomizer 구현체 Exception이 WAS까지 전달되거나 respon..
[Spring MVC] 스프링 부트 - 오류 페이지 이전 장(링크) 에서는 서블릿을 통해서 예외 처리를 하는 방법에 대해서 알아보았다. 이번 장에서는 스프링 부트의 기능을 사용하여 예외 처리를 하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 오류 페이지 서블릿을 통한 예외 처리를 위해서는 아래와 같이 복잡한 과정을 거쳐야 했다. WAS의 재요청이 발생하는 경우 예외의 종류에 따른 컨트롤러를 매핑하기 위한 WebServerCustomizer생성 WebServerCustomizer에서 예외의 종류에 따른 ErrorPage 객체 추가 및 컨트롤러와 매핑 예외 처리를 위한 컨트롤러인 ExceptionHandleController 생성 하지만 스프링 부트를 사용하는 경우 이런 과정이 전부 생략된다. ErrorPage 객체를 자동으로 등록하..
[Spring MVC] 서블릿 예외 처리 이번 장에서는 서블릿을 통해서 예외 처리를 하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 개요 스프링을 사용하지 않은 순수 서블릿 컨테이너는 아래와 같은 2가지 방식으로 예외 처리를 지원한다. Exception(예외) response.sendError(HTTP status code, Error Message) Exception 자바 자바의 메인 메서드를 직접 실행하는 경우에 main이라는 이름을 가진 스레드가 실행된다. 실행 도중에 예외를 처리하지 않아서 처음에 실행된 main 스레드까지 예외가 전달되면 발생한 예외에 대한 정보를 출력하고 스레드는 종료된다. 웹 애플리케이션 웹 애플리케이션은 사용자의 요청별로 스레드풀에 있는 스레드가 할당되고 서블릿 컨테이너 안에서 실행된다. ..
[Spring MVC] 로그인 처리 - 스프링 인터셉터 이전 장(링크) 에서는 스프링 필터를 사용하여 로그를 출력하고 인증된 사용자인지 검증하는 방법에 대해서 알아보았다. 이번 장에서는 스프링의 인터셉터를 사용하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 소개 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 호율적으로 처리할 수 있는 기능이다. 서블릿 필터는 자바의 서블릿이 제공하는 기술이지만, 스프링 인터셉터는 스프링 MVC에서 제공하는 기능이기 때문에 스프링에 더 특화되어 있으며 제공하는 기능도 많다. 둘의 기능은 비슷하지만 처리되는 순서와 범위가 다르다는 특징이 있다. 필터의 흐림 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 디스패처 서블릿을 지나서 컨트롤러가 호출되..
[Spring MVC] 로그인 처리 - 서블릿 필터 이번 장에서는 서블릿 필터를 사용하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 소개 이번 장에서는 서블릿의 필터 기능을 사용하는 방법에 대해서 알아본다. 비슷한 기능으로는 스프링의 인터셉터 기능이 있다. 우리는 이전에 쿠키와 세션을 사용하여 로그인 기능을 구현하였다. 해당 기능을 사용하여 로그인을 하는 경우 사용자가 로그인을 하지 않아도 URL 주소만 알고 있으면 원하는 페이지에 접근할 수 있다는 치명적인 단점이 있다. 모든 컨트롤러에서 로그인 여부를 확인하는 로직을 작성하면 되지만 모든 컨트롤러에서 주로직이 아닌 로그인 유무를 확인하는 부로직을 다루어야 한다는 치명적인 단점이 있다. 또한, 추후 로그인 관련 로직이 변경되면 모든 컨트롤러의 코드가 변경되어야 한다. 이는 확장에..
[Spring MVC] 로그인 처리 - 쿠키 & 세션 이번 장에서는 스프링의 쿠키와 세션을 사용하여 로그인을 구현하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 화면을 구현하는 방법은 다루지 않으므로 깃허브의 소스코드를 참고한다. 패키지 구조 프로젝트를 생성하고 패키지 구조를 잡는 것은 생각보다 중요한 작업이다. 핵심 비즈니스 로직이 수정되었다고 해서 프론트엔드 코드가 변경되어서는 안되고 프론트엔드 코드가 변경되었다고 해서 핵심 비즈니스 로직이 있는 부분의 코드가 수정되어서는 안된다. 핵심 비즈니스 로직을 담고 있는 부분을 도메인(domain)이라고 하며 프론트엔드 코드와 격리하여 패키지 구조를 잡아야 한다. root domain item member login web item member login 이렇게 패키지 구조를 잡게 되면..