전체 글 83

스프링 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

스프링 MVC Validation - BindingResult, Field Error, Object Error

BindingResult스프링이 제공하는 검증 오류를 보관하는 객체, 검증 오류가 발생하면 여기에 보관한다. 예제 코드@PostMapping("/add")public String addItemV1(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) { if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item", "itemName", "상품 이름은 필수입니다.")); } if (item.getPrice() == null || item.getPrice() 1000000)..

Spring/Spring MVC 2024.10.01

스프링 메세지, 국제화

메시지다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 하낟. message.properties라는 메시지 관리용 파일을 만들고item=상품item.id=상품 IDitem.itemName=상품명item.price=가격item.quantity=수량각 HTML들은 다음과 같이 해당 데이터를 key 값으로 불러서 사용하는 것이다.//addForm.html//editForm.html 국제화메시지에서  설명한 메시지 파일을 각 나라별로 별도로 관리하면 서비스를 국제화할 수 있다.message_en.properties, message_ko.properties//message_en.propertiesitem=Itemitem.id=Item IDitem.itemName=Item Nameitem.price..

Spring/Spring MVC 2024.10.01

스프링 MVC HTTP 메시지 컨버터

HTTP 메시지 컨버터@ResponseBody 사용 원리@ResponseBody를 사용HTTP의 Body에 문자 내용을 직접 반환viewResolver 대신에 HttpMessageConverter가 동작기본 문자 처리 : StringHttpMessageConverter기본 객체 처리 : MappingJackson2HttpMessageConverterbyte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음 응답의 경우 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.  스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다.HTTP 요청 : @RequestBody, HttpE..

Spring/Spring MVC 2024.09.30

스프링 MVC 응답

응답 데이터를 만드는 방법은 크게 3가지이다.정적 리소스예) 웹 브라우저에 정적인 HTML, CSS, JS를 제공할 때는, 정적 리소스를 사용한다.뷰 템플릿 사용예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.HTTP 메시지 사용HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.  정적 리소스스프링 부트는 클래스 패스의 다음 디렉토리에 있는 정적 리소스를 제공한다./static, /public, /resources, /META-INF/resources src/main/resources는 리소스를 보관하는 곳이고, 또 클래스 패스의 시작 경로이다.따라서 다음 디렉토리에 리소스를 넣어두면..

Spring/Spring MVC 2024.09.30