일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- QueryDSL
- JDBC
- http
- Spring Boot
- java
- 스프링 핵심 원리
- 그리디
- spring
- Servlet
- SpringBoot
- 자바
- Android
- pointcut
- 알고리즘
- 김영한
- JPQL
- 인프런
- Proxy
- 스프링 핵심 기능
- Thymeleaf
- kotlin
- transaction
- db
- Exception
- 백준
- AOP
- jpa
- springdatajpa
- Greedy
- 스프링
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
동일한 Model Object를 등록할 경우, 수정할 경우 validation을 다르게 적용해보자. 1. Validation 분리하는 방법 BeanValidation의 groups 사용 ItemSaveForm, ItemUpdateForm 같은 폼 전송을 위한 별도의 객체 사용(DTO?) 2. Bean Validation Groups BeanValidation Groups기능을 활용하면 검증 기능을 Group으로 나누어 적용이 가능. 3. Bean Validation Groups기능 적용 3.1 저장용 group 생성 interface 생성 public interface SaveCheck { } 3.2 수정용 group 생성 interface 생성 public interface UpdateCheck { }..
1. 상품 정보 수정 시 요구사항 데이터를 등록할 때와 수정할 때는 요구사항이 다를 수 있다. 등록시 기존 요구사항 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명: 필수, 공백X 가격: 1000원 이상, 1백만원 이하 수량: 최대 9999 특정 필드의 범위를 넘어서는 검증 가격 * 수량의 합은 10,000원 이상 수정시 요구사항 등록시에는 quantity 수량을 최대 9999까지 등록할 수 있지만 수정시에는 수량을 무제한으로 변경할 수 있다. 등록시에는 id 에 값이 없어도 되지만, 수정시에는 id 값이 필수이다. 만약 요구사항 만족을 위해 id에 @NutNull을 적용해보자. 수정시에는 문제가 없지만 등록 시에는 문제가 생긴다. 현재 logic은 등록시 id를 입력하지 않는..
Field Error말고 Object Error는 어떻게 처리함??? 1. @ScriptAssert() @Data @ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000") public class Item { Message 지정도 가능하다. @Data @ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000", message = "10000원 넘게 입력해") public class Item { Message Code ScriptAssert.item ScriptAssert 하지만 @ScriptAssert는 제약이 많고 복잡함..
Bean Validation이 기본으로 제공하는 Error Message가 맘에 안든다. 바꾸고 싶다. 1. Error code Bean Validation 을 적용하고, bindingResult에 등록된 Error Code를 보자. 상품명을 공백으로 넣었다. 그러면 @NutBlank로 검증이 된다. NotBlank.item.itemName NotBlank.itemName NotBlank.java.lang.String NotBlank Annotion 이름이 Error code로 사용된다. 2. Message 등록 #Bean Validation 추가 NotBlank={0} 공백X Range={0}, {2} ~ {1} 허용 Max={0}, 최대 {1} {0} 은 필드명 {1} , {2} ...은 각 애노테이..
1. Spring적용을 해보자. 기존에 등록한 ItemValidator를 제거! 어? 그래도 검증기 돌아간다.? 2. Spring MVC는 어떻게 Bean Validation 사용? Spring Boot가 spring-boot-starter-validation 라이브러리를 넣으면 자동으로 Bean Validator를 인지하고 스프링에 통합함. Spring Boot는 자동으로 글로벌 Validator를 등록한다. LocalValidatorFactoryBean 을 글로벌 Validator로 등록 이 Validator는 @NotNull 같은 @Annotation을 보고 검증을 수행 글로벌 Validator가 적용되어 있기 때문에, Validator를 사용하기 위해서는 원하는 target 앞에 @Valid , ..
1. Bean Validation 의존관계 추가 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validation' 추가되는 라이브러리 jakarta.validation-api : Bean Validation 인터페이스 hibernate-validator : 구현체 2. Bean Validation 사용 import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validatio..
검증 기능을 지금처럼 매번 코드로 작성하는 것은 귀찮음... 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적 로직임. ??? : 그러면 @Annotation으로 처리해보자. public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; //... } 1. Bean Validation 먼저 Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR..
스프링이 Validator 인터페이스를 별도로 제공하는 이유는 체계적으로 검증 기능을 도입하기 위해서임. 그런데 앞에서는 검증기를 직접 불러서 사용했음. 그런데 Validator 인터페이스를 사용해서 검증기를 만들면 스프링의 추가적인 도움을 받을 수 있음. 1. WebDataBinder를 통해 사용 WebDataBinder 는 스프링의 파라미터 바인딩의 역할을 해주고, 검증 기능도 내부에 포함한다. 2. WebDataBinder 적용 2.1 Controller @InitBinder 적용, init() 해당 메서드에 WebDataBinder를 넘겨주고, WebDataBinder에 validator를 넣어준다. 이렇게 되면 Controller가 호출될 때마다 WebDataBinder를 생성한다. 이렇게 We..