Spring/Spring MVC
-
Spring MVC - HTTP API 메시지(JSON)의 Bean ValidationSpring/Spring MVC 2022. 2. 7. 16:58
HTTP API 메시지(JSON)의 Bean Validation @ModelAttribute : HTTP 요청 파라미터(URL 쿼리 파라미터, POST Form)를 타룰 때 사용 @RequestBody : HTTP Body의 데이터를 객체로 변환할 때 사용(JSON) Bean Validation는 HttpMessageConverter를 사용하는 @RequestBody에도 적용할 수 있다. API Bean Validation 데이터 바인딩 시 타입 검증 오류가 발생하면 JSON을 객체로 생성하는 것 자체를 실패한다. (객체 생성에 실패하면 컨트롤러 자체가 호출되지 않고 예외가 발생) 타입 검증을 통과하면 JSON을 객체로 생성하여 Bean Validation을 수행한다. @Slf4j @RestControl..
-
Spring MVC - Bean Validation을 위한 Form 전송 객체 분리 (DTO)Spring/Spring MVC 2022. 2. 7. 15:43
Bean Validation을 위한 Form 전송 객체 분리 Form 전송 객체 분리 이유 일반적으로 데이터를 등록할 때와 수정할 때의 요구사항은 다르기 때문에 등록 폼과 수정 폼의 객체 필드에는 검증 애노테이션을 다르게 적용해야 한다. 각 필드에 검증 애노테이션을 다르게 적용하는 방법은 다음과 같이 2가지 방법이 있다. BeanValidation의 gruops 기능을 사용 Item을 직접 사용하지 않고, ItemSaveForm, ItemUpdateForm 같은 폼 전송을 위한 별도의 객체를 만들어서 검증에 사용 하지만 groups 기능은 실무에서 잘 사용하지 않는다. 그 이유는 groups 기능 추가로 인한 복잡도 증가와 등록 폼과 수정 폼에서 전달하는 데이터가 Item 도메인 객체와 딱 맞지 않기 때..
-
Spring MVC - Bean Validation(애노테이션을 이용한 검증)Spring/Spring MVC 2022. 2. 7. 01:48
Spring MVC - Bean Validation(애노테이션을 이용한 검증) Bean Validation은 특정 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준인 검증 애노테이션과 여러 인터페이스의 모음이다. Bean Validation을 구현한 기술 중에 일반적으로 사용하는 구현체는 하이버네이트 Validator이다. 더보기 공식 사이트 http://hibernate.org/validator/ The Bean Validation reference implementation. - Hibernate Validator Express validation rules in a standardized way using annotation-based constraints and ..
-
Spring MVC - Validator 분리와 구현Spring/Spring MVC 2022. 2. 6. 17:22
Validator 분리와 구현 검증을 컨트롤러에 구현하면 컨트롤러가 처리하는 로직을 찾기도 어려울 뿐만 아니라 컨트롤러에 너무 많은 부담을 준다. 때문에 검증 처리 부분은 따로 분기해서 사용하는 것이 좋은데 스프링에서 검증 처리를 분기해주는 Validator 인터페이스를 제공한다. Validator를 상속받는 클래스 구현과 사용 방법 Validator 인터페이스를 상속받는 클래스 구현하여 빈 등록을 해준다. 컨트롤러에 작성한 검증 처리를 해당 클래스로 분기할 수 있다. 분기한 검증 처리(검증기)를 사용하기 위해선 해당 컨트롤러에 주입을 받고 @InitBinder를 통해 검증기에 WebDataBinder를 추가해줘야 한다. 검증이 필요한 검증 객체에 @Validated를 적용해주면 된다. 검증 처리를 위한..
-
Spring MVC - 검증(Validation)에 errors MessageSource 사용Spring/Spring MVC 2022. 2. 6. 16:25
검증(Validation)에 errors MessageSource 사용 검증에 위반할 때 오류 코드에 대한 defaultMessage를 매번 적어서 사용하는 것보단 메시지 파일을 만들어 체계적으로 다루는 방법이 효율적이다. errors.properties 메시지 파일을 만들어 어떻게 이용하는지 점진적으로 하나씩 알아보자. MessageSource 설정 추가 MessageSource가 자동으로 errors.properties 파일을 읽어오기 위한 설정을 추가해야 한다. application.properties spring.messages.basename=messages,errors ▶ MessageSource는 기본으로 messages.properties만 읽어온다. 따라서 errors.propertie..
-
Spring MVC - 스프링에서 제공하는 검증(Validation) 방법 (FieldError, ObjectError)Spring/Spring MVC 2022. 2. 5. 23:21
스프링에서 제공하는 검증(Validation) 방법 BindingResult 스프링에서 제공하는 검증 방법의 핵심 검증 오류를 보관하는 객체, 검증 오류가 발생 시 BindingResult에 보관 Model에 자동으로 저장해준다. 바인딩시 데이터 타입 오류가 발생해도 컨트롤러를 호출해 준다. - BindingResult 미사용 → 400 오류 페이지로 이동된다. - BindingResult 사용 → 오류 정보(FieldError)를 BindingResult에 담아서 컨트롤러 호출 BindingResult에 검증 오류를 적용하는 3가지 방법 1. @ModelAttribute의 객체에 타입 오류 등으로 바인딩이 실패하는 경우 스프링이 FieldError를 생성하여 BindingResult에 넣어준다. 2. ..
-
Spring MVC - 검증(Validation) 직접 구현하기Spring/Spring MVC 2022. 2. 5. 21:25
검증(Validation) 검증 방법은 2가지가 있다. 클라이언트 검증과 서버 검증이 있는데 둘의 장단점이 존재한다. 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. - ex) Postman으로 클라이언트 검증없이 요청이 가능 서버만에서만 검증하면, 즉각적인 고객 사용성이 부족해진다. - 사용자가 입력 폼을 작성할 때 실시간으로 검증 오류를 나타낼수 없다. 둘을 적절히 섞어서 사용하는게 좋다. 다만 최종적으로 서버 검증은 필수 API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨줘야 한다. 검증을 사용할 때 주의할 점이 있는데 웹 애플리케이션은 폼 입력시 숫자를 문자로 작성하거나해서 검증 오류가 발생하면 오류 화면(4xx 상태 코드)으로 바로 이동한다. 이렇게..
-
Spring MVC - 타임리프로 MessageSource에 등록된 메시지 사용하기Spring/Spring MVC 2022. 2. 5. 13:31
타임리프에서 메시지 사용하기 타임리프의 메시지 표현식 #{ ... } 를 사용하면 스프링의 메시지를 편리하게 조회할 수 있다. 아래 두 properties 파일을 만들어 간단하게 사용방법을 알아보자. messages.properties hello=안녕 메시지 hello.name=안녕 메시지 {0} label.item.itemName=상품명 messages_en.properties hello=hello message hello.name=hello message {0} label.item.itemName=Item Name 타임리프를 이용한 메시지(message) 조회 메시지 표현식 #{ ... } 를 사용하여 메시지 조회 서버를 가동시켜 웹브라우저에서 HTML의 소스 코드를 보면 다음과 같다. 안녕 메시지 ..