자바 ORM 표준 JPA 프로그래밍(김영한 저) 책의 QnA 파트 괄년 내용을 그대로 가져왔다. 유의해서 JPA 공부에 활용하려구... Q1. ORM 프레임워크를 사용하면 SQL과 Database는 잘 몰라도 되나요? A1. No. ORM 프레임워크가 애플리케이션을 객체지향적으로 개발할 수 있도록 도와주긴 하지만 데이터는 결국 관계형 데이터베이스에 저장된다. 테이블 설계는 여전히 중요하고 SQL도 잘 알아야 한다. 그리고 ORM 프레임워크를 사용할 때 가장 중요한 점은 객체와 테이블을 매핑하는 것이다. 매핑을 올바르게 하려면 객체와 관계형 데이터베이스 양쪽을 모두 이해해야 한다. 따라서 데이터베이스 테이블 설계나 SQL을 잘 몰라서 ORM 프레임워크를 사용한다는 것은 ORM의 본질을 잘못 이해한 것이다...

Bean Validation - HTTP 메시지 컨버터 @Valid, @Validated 는 HttpMessageConverter (@RequestBody)에도 적용할 수 있다. ValidationItemApiController 생성 package hello.itemservice.web.validation; import hello.itemservice.domain.item.ItemSaveForm; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework...

Form 전송 객체 분리 - 개발 ITEM 원복 이제 Item 의 검증은 사용하지 않으므로 검증 코드를 제거해도 된다. @Data public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; } ItemSaveForm - ITEM 저장용 폼 package hello.itemservice.domain.item; import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints...

Form 전송 객체 분리 - 소개 ValidationItemV4Controller Q: 이름은 어떻게 지어야 하나요? 이름은 의미있게 지으면 된다. ItemSave 라고 해도 되고, ItemSaveForm , ItemSaveRequest , ItemSaveDto 등으로 사용해도 된다. 중요한 것은 일관성이다. Q: 등록, 수정용 뷰 템플릿이 비슷한데 합치는게 좋을까요? 한 페이지에 그러니까 뷰 템플릿 파일을 등록과 수정을 합치는게 좋을지 고민이 될 수 있다. 각각 장단점이 있으므로 고민하는게 좋지만, 어설프게 합치면 수 많은 분기문(등록일 때, 수정일 때) 때문에 나중에 유지보수에서 고통을 맛본다. 이런 어설픈 분기문들이 보이기 시작하면 분리해야 할 신호이다.

Bean Validation - groups 동일한 모델 객체를 등록할 때와 수정할 때 각각 다르게 검증하는 방법을 알아보자. 방법 2가지 BeanValidation의 groups 기능을 사용한다. Item을 직접 사용하지 않고, ItemSaveForm, ItemUpdateForm 같은 폼 전송을 위한 별도의 모델 객체를 만들어서 사용한다. BeanValidation groups 기능 사용 이런 문제를 해결하기 위해 Bean Validation은 groups라는 기능을 제공한다. 예를 들어서 등록시에 검증할 기능과 수정시에 검증할 기능을 각각 그룹으로 나누어 적용할 수 있다. 코드로 확인해보자. groups 적용 저장용 groups 생성 package hello.itemservice.domain.item..

Bean Validation - 한계 수정시 검증 요구사항 "데이터를 등록할 때와 수정할 때는 요구사항이 다를 수 있다." 수정 요구사항 적용 수정 시에는 Item 에서 id 값이 필수이고, quantity 도 무제한으로 적용할 수 있다. Item.java @Data public class Item { @NotNull //수정 요구사항 추가 111 private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull //@Max(9999) //수정 요구사항 추가 222 private Integer quantity; public Item() { } p..