<aside> 💡 데이터 유효성 검사는 Application의 여러 계층 (Controller, Service, Repository)에서 발생하는 일반적인 작업입니다. 잘못된 값을 입력받아 데이터를 처리하게 되면 심각한 오류를 발생시킬 수 있기 때문에 매우 중요하게 생각하는 부분입니다. 하지만 종종 동일한 유효성 검증 로직이 각 계층에 구현되어 불필요한 코드가 늘어나고 오류가 발생하기 쉽습니다.
</aside>
이미지 출처 : https://docs.jboss.org/hibernate/validator/6.1/reference/en-US/html_single/
<aside> 💡 Java에서는 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공하고 있습니다. 아래 명세서를 살펴보면 2009년 부터 표준 규격을 정의하여 지금까지 계속 발전하였습니다. Bean Validation 프레임워크는 사실상의 객체 검증을 위한 Java 진영의 표준이 되었습니다.
</aside>
JSR (Java Specification Requests) : 자바규격 요청서 입니다. JCP (Java Community Process) :자바기술의 기술 스펙 표준을 제정하는 단체입니다.
버전 | JSR | Release | Implementations |
---|---|---|---|
Bean Validation 1.0 | JSR 303 | 2009년에 릴리즈. Java EE 6 | Hibernate Validator 4.3.1.Final |
Bean Validation 1.1 | JSR 349 | 2013년에 릴리즈. Java EE 7 | Hibernate Validator 4.3.1.Final |
Bean Validation 2.0 | JSR 380 | 2017년에 릴리즈. Java EE 8 | Hibernate Validator 6.0.1.Final |
<aside>
💡 Bean Validation은 Java EE 및 Java SE에서 JavaBean 유효성 검사를 위한 Java API 사양입니다.
Bean Validation은 명세일 뿐 동작하는 코드가 아닙니다. Application에 적용하기 위해서는 Bean Validation 규격을 구현한 구현체가 필요합니다. Hibernate Validator
는 인증된 레퍼런스 구현체 입니다.
</aside>
The Bean Validation reference implementation. - Hibernate Validator
<aside> 💡 Bean Vaildation은 위에서 말한 문제들을 해결하기 위해 다양한 제약(Contraint)을 도메인 모델(Domain Model)에 어노테이션(Annotation)로 정의할 수 있게합니다. 제약을 유효성 검사가 필요한 객체에 직접 정의하는 방법으로 기존 유효성 검사 로직의 문제를 해결합니다. 또한 이러한 검사는 선언적으로 표현되며 수동으로 수행할 필요가 없으므로 작성, 읽기 및 유지 관리할 코드가 줄어들게 됩니다.
</aside>
"Constrain once, vaildate everywhere "
이미지 출처 : https://docs.jboss.org/hibernate/validator/6.1/reference/en-US/html_single/