본문 바로가기

스프링/Spring

(13)
스프링으로 파일 업로드 구현하기 - MultipartFile 인터페이스 스프링은 MultipartFile이라는 인터페이스로 멀티파트 파일을 매우 편리하게 지원합니다. SpringUploadController @Slf4j @Controller @RequestMapping("/spring") public class SpringUploadController { @Value("${file.dir}") private String fileDir; @GetMapping("/upload") public String newFile() { return "upload-form"; } @PostMapping("/upload") public String saveFile(@RequestParam String itemName, @RequestParam MultipartFile file, HttpSer..
서블릿의 파일 업로드 - 서블릿이 제공하는 Part 파일 업로드 소개 HTML Form을 통한 파일 업로드를 이해하려면 먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 합니다. HTML 폼 전송 방식 application/x-www-form-urlencoded multipart/form-data application/x-www-form-urlencoded 방식 웹 브라우저가 생성한 요청 HTTP 메시지 POST /save HTTP/1.1 Host: Iocalhost:8080 Content-Type: application/x-www-form-urlencoded name=as&age=20 application/x-www-form-urlencoded 방식은 HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법입니다. Form 태그에 별도의 enct..
스프링이 제공하는 기본 포맷터 - @NumberFormat, @DateTimeFormat 스프링은 자바에서 기본으로 제공하는 타입들에 대해 수많은 포맷터를 기본으로 제공합니다. IDE에서 Formatter 인터페이스의 구현 클래스를 찾아보면 수 많은 날짜나 시간 관련 포맷터가 제공되는 것을 확인할 수 있습니다. 그런데 포맷터는 기본 형식이 지정되어 있기 때문에, 객체의 각 필드마다 다른 형식으로 포맷을 지정하기는 어렵습니다. 스프링은 이런 문제를 해결하기 위해 애노테이션 기반으로 원하는 형식을 지정해서 사용할 수 있는 매우 유용한 포맷터 두 가지를 기본으로 제공합니다. @NumberFormat : 숫자 관련 형식 지정 포맷터 사용, NumberFormatAnnotationFormatterFactory @DateTimeFormat : 날짜 관련 형식 지정 포맷터 사용, Jsr310DateTim..
스프링 포맷터(Formatter), 포맷터를 지원하는 ConversionService 스프링 포맷터란(Formatter)?? 웹 애플리케이션에서 객체를 문자로, 문자를 객체로 변환하는 예 화면에 숫자를 출력해야 하는데, Integer => String 출력 시점에 숫자 1000 문자 "1,000" 이렇게 1000 단위에 쉼표를 넣어서 출력하거나, 또는 "1,000"라는 문자를 1000이라는 숫자로 변경해야 합니다. 날짜 객체를 문자인 "2021-01-01 10:50:11" 와 같이 출력하거나 또는 그 반대의 상황 Locale 여기에 추가로 날짜 숫자의 표현 방법은 Locale 현지화 정보가 사용될 수 있습니다. 이렇게 객체를 특정한 포멧에 맞추어 문자로 출력하거나 또는 그 반대의 역할을 하는 것에 특화된 기능이 바로 포맷터(Formatter)입니다. 포맷터는 컨버터의 특별한 버전으로 이해..
컨버전 서비스 사용하기 - ConversionService (타임리프, 폼) 컨버전 서비스란? 타입 컨버터를 하나하나 직접 찾아서 타입 변환에 사용하는 것은 매우 불편합니다. 개별 컨버터를 모아 두고 그것들을 묶어서 편리하게 사용할 수 있는 기능을 제공하는데, 이것이 바로 컨버전 서비스( ConversionService )입니다. ConversionService 인터페이스 컨버전 서비스 인터페이스는 단순히 컨버팅이 가능한가? 확인하는 기능과, 컨버팅 기능을 제공합니다. package org.springframework.core.convert; import org.springframework.lang.Nullable; public interface ConversionService { boolean canConvert(@Nullable Class sourceType, Class ta..
스프링 타입 컨버터 - Converter 스프링 타입 컨버터란? 스프링을 사용해 애플리케이션을 개발할 때 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것처럼 타입을 변환할 때 사용하는 도구입니다. 스프링 MVC가 제공하는 @RequestParam을 사용해 타입을 변환해보겠습니다. @GetMapping("/hello-v2") public String helloV2(@RequestParam Integer data) { System.out.println("data = " + data); return "ok"; } 요청 http://localhost:8080/hello-v2?data=10 HTTP 쿼리 스트링으로 전달하는 data=10 부분에서 10은 숫자 10이 아니라 문자 10입니다. 스프링이 제공하는 @RequestParam을 ..
@SessionAttribute 어노테이션을 사용해서 세션 조회하기 @SessionAttribute 스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute을 지원합니다. 이미 로그인된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 참고로 이 기능은 세션을 생성하지 않습니다. @SessionAttribute(name = "loginMember", required = false) Member loginMember @GetMapping("/") public String homeLogin(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { // 세션에 회원 데이터가 없으면 home if (loginMember == nu..
[SpringBoot] 서블릿의 HttpSession을 사용해 세션 구현하기 HttpSession 소개 서블릿을 통해 HttpSession을 생성하면 다음과 같은 쿠키를 생성합니다. 쿠키 이름이 JSESSIONID이고, 값은 추정 불가능한 랜덤 값입니다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05 HttpSession 사용 먼저 세션의 키로 사용될 문자열을 정의합니다. public class SessionConst { public static final String LOGIN_MEMBER = "loginMember"; } @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpSer..