Domain Layer의 검증 영역을 지원하는 Framework.
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface
클라이언트의 요청을 validation이 어디서 이뤄져야 하는지 도식화한 구조이다. 3-Tier 구조 상에서 1,2,3tier가 모두 검증을 수행하는 상황이 발생했다. 떄문에 각각의 검증 수행 코드가 중복이라는 부담이 생기고, 해결하기 위해서 Domain Layer에 검증 코드를 지원한다.
@Data
@EqualsAndHashCode(of= {"mem_id", "mem_regno1", "mem_regno2"}) // 동일한 객체인 것을 확인할 땐
@ToString(exclude={"mem_pass", "mem_regno1", "mem_regno2"}) // 외부에 보여지지 않는 것
@NoArgsConstructor // 기본생성자
@AllArgsConstructor
@Builder // 빌더패턴
public class MemberVO implements Serializable{
private String mem_id;
private transient String mem_pass; // 직렬화 대상에서 제외할 때 -> 외부로 보여지면 안될 때 transient
private String mem_name;
private transient String mem_regno1;
private transient String mem_regno2;
private String mem_bir;
private String mem_zip;
private String mem_add1;
private String mem_add2;
private String mem_hometel;
private String mem_comtel;
private String mem_hp;
private String mem_mail;
private String mem_job;
private String mem_like;
private String mem_memorial;
private String mem_memorialday;
private Integer mem_mileage;
private String mem_delete;
// member가 prod를 가지고 있는 관계가 형성된다. (일대다)
// member has many prod 관계
private List<ProdVO> prodList;
JavaUtils.의 NotBlank를 어노테이션으로 붙여서 사용이 가능하다. (DB NotNUll)
빌더 패턴과 팩토리 오브젝트 패턴이 동시에 적용되어있다.
@BeforeClass
public static void setUpValidator() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
ConstraintViolation => 검증을 위반한 property 하나의 정보를 가지고 있다. 이떄 Set은 Errors와 동일한 역할을 제공한다.
<MemberVO> Set<ConstraintViolation<MemberVO>> javax.validation.Validator.validate(MemberVO object, Class<?>... groups)
검증에 통과하지 못했다면, 결과 메세지가 필요하다.
groups : insert, update와 같이 하나의 property에 다른 검증을 해야할 때 사용
시스템과 사람에게 일정 정보를 제공하기 위한 메타 데이터 표현 방식.
주석을 모두 달아놓고 저장하면 소스의 사이즈는 커지지만, 컴파일 하고 나면 주석이 포함되지 않아서 시스템에게 연결을 해주지 않는다.(annotation과 comment의 차이)