Spring 22

DispatcherServlet 개념과 동작원리 및 내부 코드

DispatcherServlet 개념DispatcherServlet은 HTTP 프로토콜로 들어오는 모든 요청을 먼저 받아서 적합한 핸들러를 찾아, 컨트롤러 위임을 하는 역할입니다.(쉽게 말하여, 제일 앞에서 요청을 받아, 적합한 박스를 찾아ispatcherServlet 개념DispatcherServlet은 HTTP 프로토콜로 들어오는 모든 요청을 먼저 받아서 적합한 핸들러를 찾아, 컨트롤러 위임을 하는 역할입니다. (쉽게 말하여, 제일 앞에서 요청을 받아, 적합한 컨트롤러로 보내주기) DispatcherServlet을 쓰는 이유DispatcherServlet이 없다면, 모든 서블릿에 대해 URL 매핑을 해주어야 합니다.(web.xml ...) 하지만, DispatcherServlet을 사용하여, 핸들러..

Spring/Spring MVC 2025.08.02

스프링 MVC - 파일 업로드

파일 업로드 소개HTML 폼 전송 방식application/x-www-form-urlencodedmultipart/form-data 서블릿과 파일 업로드package hello.upload.controller;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet..

Spring/Spring MVC 2024.10.04

스프링 MVC - 스프링 타입 컨버터, 포맷터

컨버터 인터페이스package org.springframework.core.convert.converter;public interface Converter { T convert(S source);} 스프링은 확장 가능한 컨버터 인터페이스를 제공한다.개발자는 스프링에 추가적인 타입 변환이 필요하면 이 컨버터 인터페이스를 구현해서 등록하면 된다.이 컨버터 인터페이스는 모든 타입에 적용할 수 있다. 필요하면 X → Y 타입으로 변환하는 컨버터 인터페이스를 만들고, 또 Y → X 타입으로 변환하는 컨버터 인터페이스를 만들어서 등록하면 된다.예를 들어서, 문자로 "true"가 오면Boolean 타입으로 받고 싶으면 String → Boolean 타입으로 변환되도록 컨버터 인터페이스를 만들어서 등록하고, 반대로 적..

Spring/Spring MVC 2024.10.03

스프링 MVC - API 예외 처리

스프링 부트 기본 오류 처리  BasicErrorControlelr 코드@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {}@RequestMappingpublic ResponseEntity> error(HttpServletRequest request) {} /error 동일한 경로를 처리하는 errorHtml(), error() 두 메서드를 확인할 수 있다.   errorHtml() : produces = MediaType.TEXT_HTML_VALUE : 클라이언트 요청의 Accept 헤더 값이 text..

Spring/Spring MVC 2024.10.03

스프링 MVC - 예외 처리

서블릿 예외 처리서블릿은 다음 2가지 방식으로 예외 처리를 지원한다.Exception (예외)response.sendError(HTTP 상태 코드, 오류 메시지)Exception (예외)자바 직접 실행자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고, 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try - catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 그런데 만약에 애플리케이션에서 예외를 잡지 못 하고, 서블릿 밖으로 예..

Spring/Spring MVC 2024.10.02

스프링 MVC - 스프링 인터셉터

스프링 인터셉터 흐름HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출 된다.스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링 MVC의 시작점이 디스패처 서블릿이라고 생각하면 이해가 될 것이다.스프링 인터셉터에도 URL 패턴을 적용할 수 있는데, 서블릿 URL 패턴과는 다르고, 정밀하게 설정할 수 있다. 스프링 인터셉터 제한HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 //로그인 사용자HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 ..

Spring/Spring MVC 2024.10.02

스프링 MVC - 서블릿 필터

서블릿 필터필터 흐름HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러필터를 적용하면 필터가 호출 된 다음에 서블릿이 호출된다. 필터는 특정 URL 패턴에 적용할 수 있다. /*이라고 하면 모든 요청에 필터가 적용된다. 스프링을 사용하는 경우 여기서 말하는 서블릿은 디스패처 서블릿이다. 필터 제한HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 // 로그인 사용자HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출 X) // 비로그인 사용자 필터 체인HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 필터3 -> 서블릿 -> 컨트롤러 필터는 체인으로 구성되는데, 중간에 필터를 추가할 수 있다. 예를 들어, 로그를 남기는 필터를 먼저 적용하고, 다..

Spring/Spring MVC 2024.10.01

스프링 MVC - Bean Validation

Bean ValidationBean Validation은 특정 구현체가 아니라 Bean Validation 2.0이라는 기술 표준이다. 즉, 검증 애노테이션과 여러 인터페이스의 모음이다.BeanValidation을 구현한 기술 중에 일반적으로 사용하는 구현체는 하이버네이트 Validator이다. Bean Validation 의존 관계 추가 build.gradleimplementation 'org.springframework.boot:spring-boot-starter-validation'  Jakarta Bean Validationjakarta.validation-api : Bean Validation 인터페이스hiberate-validator 구현체 예시 코드package hello.itemservic..

Spring/Spring MVC 2024.10.01

스프링 MVC - Validator 분리

Validator 분리 스프링은 검증을 체계적으로 제공하기 위해 다음 인터페이스 제공한다.public interface Validator { boolean supports(Class clazz); void validate(Object target, Errors errors);}supports() {} : 해당 검증기를 지원하는 여부 확인(뒤에서 설명)validate(Object target, Errors errors): 검증 대상 객체와 BindingResult예시 코드package hello.itemservice.web.validation;import hello.itemservice.domain.item.Item;import org.springframework.stereotype.Compon..

Spring/Spring MVC 2024.10.01

스프링 MVC 오류 코드와 메시지 처리

errors 메시지 파일 생성errors.properties라는 별도의 파일로 관리해보자. 스프링 부트 메시지 설정 추가application.propertiesspring.messages.basename=messages,errors errors.properties 추가required.item.itemName=상품 이름은 필수입니다.range.item.price=가격은 {0} ~ {1} 까지 허용합니다.max.item.quantity=수량은 최대 {0} 까지 허용합니다.totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1} 참고 : errors_en.properties 파일을 생성하면 오류 메시지도 국제화 처리를 할 수 있다. 예시 코드@PostMapping("/ad..

Spring/Spring MVC 2024.10.01