2020-12-23

jsbak·2020년 12월 23일
0

벨리데이션 프레임워크
hybernate validator

우리꺼 프레임 워크

POJO??
Front controller, command handler/back-end controller

finder가 front controller의 역할을 가져감

Front controller + command handler 살펴보기

Hibernate validator

검색어 : hibernate validator
3.3.0 방식에?? 가장 광범위하게 쓰인다

implementatin - 인터페이스의 구현체를 준다

벨리데이션이 어디서 이뤄지는지를 볼수 있다.
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface

각 layer별 다 검증을 수행하는데 이러면 중복이 발생하고 불편하다

따라서 검증이라는 코드를 모두가 쓰는 Domain layer 에서 처리하면 중복 제거가능

카피

pom.xml에 기술

검증메시지를 만들때 사용, 카피

마찬가지로 pom.xml에 기술

가급적이면 프레임워크도 맞춰야한다??

@Size
다 다르게 설정할수 있다?

@NotBlank
@Size(min=5, max=12)
//	private transient String mem_pass;

@Pattern
패턴도 설정가능

@NotBlank
	@Pattern(regexp="[0-9]{6}")
	private transient String mem_regno1;
	@NotBlank
	@Pattern(regexp="[0-9]{7}")
	private transient String mem_regno2;

검증룰을 적용할때는 쓸수 있는 녀석인지를 봐야한다.
@Size 사용불가
@Min 사용가능

@Min(0)
@Max(Integer.MAX_VALUE)
private Integer mem_mileage;
// @Min은 싱글 벨류 어노테이션으로 사용했다.
//@Min(value=)

각 어노테이션들이 공통적으로 가지고 있는 녀석들

Test 케이스??

각테스트 케이스 이전에 실행한다.

빌더와 팩토리 오브젝트 패턴 적용되어 있다.

private Validator validator;

@Before
public void setup() {
	ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
	validator = factory.getValidator();
}

하나의 입력 데이터에 대하여 멀티 에러 메시지를 줄 수 있다.

어떤 비즈지스 로직을 쓰냐에 따라서 검증이 달라져야한다. groups? "class<?>... group"

인터페이스에 아무것도 없다?? 마커 어노테이션? 표현

package kr.or.ddit.validate.groups;

public interface DeleteGroup {

}

@NotBlank(groups=InsertGroup.class)
@Pattern(regexp="[0-9]{6}")
private transient String mem_regno1;

@NotBlank(groups=InsertGroup.class)
@Pattern(regexp="[0-9]{7}")
private transient String mem_regno2;

DefaultGroup?
interface에 extends Default를 상속한뒤 적용한 것임

// interface에 extends Default를 상속한뒤 적용한 것임
@NotBlank(groups= {Default.class, DeleteGroup.class})
private String mem_id;
// 그냥 Default만 있으면 생략이 가능하다

그룹에 해당하는 녀석만 체크하는 걸 확인 할 수 있다.

링크로 가서
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_validating_constraints
좌측 사이드 메뉴 - 4. Interpolating constraint error messages
기본 메시지 변경가능, 비추, 사용X

이방식도 사용하지 않음

프로퍼티 형태로 꺼내 쓸수 있다는 것?
빌더 패턴
interpolator 간섭자 중간에 뺏어서 처리?
![](https://images.velog.io/images/hkjs96/post/cab403f8-acff-4e12-b4ae-
9ba3ac41a911/image.png)
다중 메시지 처리

memberVO에서 @NotBlank, @Size 등의 ctnl 클릭 후 QFN 카피

QFN 복사후 .message = 메시지 입력

테스트에 만들어보기
Locator에 message.properties QFN 카피후 정리, properties는 뒤에 베이스 네임 말구는 못찾는다.

이후 우리꺼 CommonValidator에 적용

프로퍼티 메시지 고쳐야함.. 에러남(오타)

커스텀

  1. Creating custom constraints
@Constraint(validatedBy = CheckCaseValidator.class)

필수

Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };

CaseMode value();

value는 필수 위처럼 default{ } 붙은 애들은 옵션

커스텀 어노테이션 정의, 옵션정의, 한쌍으로가는 벨리데이터 존재

어노테이션의 QFN 카피
message

Annotation

정리하기
컴파일하면 주석은 사라짐 -> 시스템에 정보를 제공할 수 없다.
주석은 class파일 (컴파일된 파일)에는 추가되지 않는다.
이를 보완
어노테이션의 영향을 받는 범위도 제한할 수 있다.

사전적의미 - 주석

  • annotation

    • 시스템과 사람에게 일정 정보를 제공하기 위한 메타 데이터 표현 방식
  • marker annotation

    • 표현의 역할 (~하는 것인지, 아무것도 기술하지 않는다.)
  • single value annotation : value 속성으로 설정하는 경우, single value 속성명 생략 가능.

  • multi value annotation : 모든 속성명 기술.

  • custom annotation : @interface 키워드로 정의, annotatin도 class

  • 필수 정책(@Target, @Retention)

어노테이션 트레이싱 + 리플렉션
어려운것.. ㅇㅅㅇ 복습해도 어려워요

profile
끄적끄적 쓰는곳

0개의 댓글