본문 바로가기
Spring

@Validated, @Valid와 @Column으로 나뉘는 유효성 검증

by 이숴 2023. 3. 22.
반응형

계기

엔티티의 검증은 하지않으면 잘못된 데이터를 받을 수 있기 때문에 필수적이라고 생각합니다.

따라서 여러가지 레포지토리를 보고 엔티티의 필드 검증을 하는 방법을 공부하고 탐색해 보았는데요.

 

모든 레포지토리가 그러한 것은 아니지만 일반적으로 entitiy클래스에서는 @Column 검증을, dto 클래스에서 @Validated, @Valid같은 어노테이션을 사용해서 작성하는 것 같았습니다.

 

여기에서 제가 알 수 있던 것은..

"entity의 필드 검증을 직접하지 않아도 된다." 입니다.

 

어짜피 모든 엔티티에는 검증과정이 들어가고 그때마다 테스트 로직을 동작한다면 정상 작동한다고 가정했을 때, 불필요한 테스트 과정이 추가될 뿐입니다. 물론 테스트는 꼼꼼해야하지만 테스트과정을 동반하지 않아도 오류가 발생하지 않는 로직이라고 하면 테스트를 작성할 필요는 없다고 생각합니다.

 

그렇다면 entity는 @Column으로 작성하되 @Validated, @Valid는 언제 사용하면 좋을까요?

 

@Validated, @Valid vs @Column

@Validated, @Valid, @Column 사용 예시

예를들어 Validated, Valid, Column 모두 @NotNull이나 nullable옵션으로도 null값의 검증이 가능합니다. 하지만 둘 다 persist(영속화)되는 시점이 다른데요.

 

nullable의 경우, 쿼리는 생성되지만 생성되는 시점에서 예외가 발생합니다.

@NotNull의 경우 예외는 동일하게 발생하나, 쿼리가 생성되지 않습니다.

 

쿼리가 생성되며 예외를 발생시키는지, 쿼리가 생성되기 전에 예외를 발생시키던지의 차이입니다. 

 

결론

컨트롤러에서 데이터를 받아오게되면 보통 dto로 데이터를 입력받고,엔티티로 저장을 따로 하게되는데요. 따라서 dto에서 퀴리 생성전에 한번 검증을 진행하고 엔티티에서는 도메인 로직과 연관이 있는 것만 검증을 해도 괜찮을 것같다는 생각입니다.

 

entity -> nullable

dto -> @Validated, @Valid

 

반응형

댓글