2021.08.17~18 기록장
ToDo
- 알고리즘 문제
- 토비의 스프링
Done
- 토비의 스프링
Weekly goal
- 책 읽기
- 토비 스프링 코딩
- 7월 회고 쓰기
토비의 스프링
560p.
바인딩 기술은 앞에서 봤듯이 여러 가지가 있다.
각각 언제 사용하는 것이 좋을까?
converter는 프로퍼티 에디터처럼 매번 만들지 않고 빈으로 만들어 사용한다는 장점이 있다.
서비스 계층의 빈을 활용할 때 컨버터를 사용하면 좋다.
특정 타입에 항상 동일하게 적용된다면 converter로 충분하다.
하지만 지역에 따라 바뀌어야 하고 여러 조건이 동적으로 변한다면 ConditionalGenericConverter가 적당하다.
단 구현이 까다롭다는 단점이 있다.
바인딩 방법을 도메인에 넣는다면 애노테이션을 이용할 수 있다.
Formatter를 이용하자.
566p.
여태 설명한 바인딩 기술들은 결국에 어댑터 안에 생성되는 WebDataBinder에 의해 사용될 뿐이다.
만약에 컨트롤러에서 @Vaild를 사용하고 있다면 어댑터에서는 바인딩의 마지막 절차로 검증을 진행한다.
스프링은 이런 검증을 위해 Validator라는 인터페이스를 제공해준다.
우리는 이를 구현해서 WebDataBinder에 등록해서 사용할 수 있다. 검증 주체를 정하는 것도 구현 내용에 들어가 있다.
검증을 어디서 진행할 것인가는 많은 의견이 갈린다.
컨트롤러에서 진행할 것인가, 서비스 계층에서 진행할 것인가.
Validator를 구현했다면 컨트롤러에서 DI 받아서 진행할 수도 있고, 서비스 계층에서 DI 받아서 진행할 수도 있다.
또 위에서 말했듯이 @Vaild를 사용해서 바인딩 시에 어댑터에서 검증을 진행할 수 있다.
개인적으로는 바인딩 시에 진행하는 것이 좋다고 본다. 그러면 빼먹지 않고 검증을 진행할 수 있기 때문이다.
또는 JSR-303의 빈 검증 방식을 스프링에서도 사용할 수 있다.
본인은 이 방법을 자주 사용한다.
쉽게 어노테이션으로 사용이 가능하다.
Validator처럼 JSR기능을 사용할 수 있게 LocalValidatorFactoryBean을 제공해주는데 이를 어댑터처럼 사용할 수 있다.
그럼 LocalValidatorFactoryBean를 WebDataBinder에 넣어서 @Valid를 사용해도 좋고 DI 받아서 사용해도 좋다.
구현은 사용할 어노테이션을 만들고 검증 내용을 정의한 ConstrainValidator를 구현하면 된다.
https://gisungcu.tistory.com/162
custom validation
이번 팀 프로젝트를 하면서 null검사를 진행하게 되었다. 근데 Enum type은 @Blank 등의 어노테이션이 동작하지 않았다. enum 에는 적용할 수 없다는 것이다. 그럼 어떻게 해야 할까? 바로 custom validation
gisungcu.tistory.com
토비님의 책에 보면 어댑터에 bean validation을 해주는 부분이 있다.
LocalValidatorFactoryBean을 빈으로 등록하고
Java Validation API (JSR-303)
developer.ucsd.edu
근데 spring boot에서는 자동으로 LocalValidatorFactoryBean을 등록해주기에 따로 빈으로 등록할 필요가 없다.
Spring Boot Bean Validation 제대로 알고 쓰자
지난번에 작성한 Java Bean Validation 제대로 알고 쓰자에 이어서 Spring Boot 환경에서 Validation을 어떻게 사용할 수 있는지 확인해보겠습니다. Spring에서도 Hibernate Validator를 사용합니다. Java Bean Validation
kapentaz.github.io