본문 바로가기

Spring/MVC

(41)
[Spring MVC] 파일 업로드 이번 장에서는 서블릿과 스프링의 파일 업로드 기능에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 파일 업로드 HTML Form 전송 방식은 아래와 같은 두 가지 방식이 있다. application/x-www-form-urlencoded multipart/form-data application/x-www-form-urlencoded application/x-www-form-urlencoded은 가장 기본적으로 HTML 폼 데이터를 서버로 전송하기 위해 사용되는 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 브라우저는 요청 HTTP 메시지의 헤더에 컨텐츠 타입(Content-Type: application/x-www-form-urlencoded)을 추가한다. HTML 폼에 입..
[Spring MVC] Formatter 이전 장(링크) 에서는 데이터의 타입을 변경시켜주는 타입 컨버터에 대해서 알아보았다. 이번 장에서는 컨버터의 특별한 버전인 포맷터(Formatter)에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. Formatter 이전 장에서 알아본 Converter의 경우 입출력 타입에 제한이 없이 사용되는 범용적인 기능이었다. 경우에 따라서 입출력값이 모든 형식을 지원해야 하는 것이 아니라 일정 타입으로 한정되는 경우가 많다. 예를 들어 숫자를 문자로 출력하는 경우 1000 -> "1,000"과 같이 일반 숫자를 돈을 표시하는 형식으로 변경될 수 있다. 문자를 날짜로 변경하는 경우도 "2022-06-03 14:00:00"과 같은 문자열을 날짜로 포맷으로 변경되어야 한다. 예를 들어 살펴본 돈과 시간의..
[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 -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 디스패처 서블릿을 지나서 컨트롤러가 호출되..