고코딩
@Size, @Length, @Column 차이점 본문
@Size, @Length, @Column 차이점
팀 프로젝트를 하면서 내가 JPA쪽 부분을 담당하게 되었다. Entity를 작성하던중 필드의 속성을 지정해줘야 했는데 필드의 사이즈를 무엇으로 주어야하나 고민을 했다. 구글링을 해보니 @Size, @Length, @Column
3개중 하나로 필드의 사이즈를 지정해주었느데 도대체 무슨 차이인지 궁금했다.
이곳저곳을 찾아보던중 잘 설명해 놓은곳이 있어서, 이 사이트의 설명을 번역해서 올린다.
https://www.baeldung.com/jpa-size-length-column-differences
1. Overview
JSR-330의 @Size, Hibernate의 @Length , 그리고 JPA의 @Column에 대해서 살펴보겠습니다.
언뜻 보기엔 비슷해 보이지만 서로 다른 기능을 하고있습니다. 알아봅시다.
2. Origins
간단히 말해서 이 annotation은 필드의 크기를 전달하기 위한 것입니다.
@Size
와@Length
는 비슷합니다. 둘다 필드의 크기에 검증하기위해 사용합니다. @Size
는 Java-standard annotation이고 @Length
는 specific to Hibernate입니다.
하지만 @Column
은 DDL을 컨트롤 하기위해 사용되는 JPA annotation입니다.
3. @Size
검증을 위해서, @Size 검증 어노테이션을 사용합니다. @Size가 붙은 middleName속성을 사용하여 min, max 특성 사이의 값을 확인합니다.
public class User {
// ...
@Size(min = 3, max = 15)
private String middleName;
// ...
}
가장 중요한 점은, @Size가 JPA와 Hinernate로부터 독립적인 bean을 만들어줍니다. 결과적으로 @Size는 @Length보다 더 가볍습니다.
4. @Length
그리고 말했듯이, @Length는 Hiberbate의 @Size어노테이션입니다. LastName 속성에 @Length를 사용해서 범위를 지정해 봅시다.
@Entity
public class User {
// ...
@Length(min = 3, max = 15)
private String lastName;
// ...
}
5. @Column(length=value)
하지만 @Column 은 많이 다릅니다.
@Column은 실제 데이터베이스 열의 특정 특성을 나타내기 위해 사용됩니다. @Column의 length속성을 사용해서 열의 문자열의 길이를 특정해봅시다.
@Entity
public class User {
@Column(length = 3)
private String firstName;
// ...
}
열은 VARCHAR(3) 타입으로 생성되고 3보다 긴 문자열을 넣으려고 하면 SQL error가 나타납니다.
@Column은 유효성 검사를 제공하지 않으므로 테이블 열 속성 지정에만 사용됩니다.
물론, @Column 과 @Size를 같이 사용해 bean 검증을 통해 테이터베이스 열 특성을 지정할 수 있습니다.
@Entity
public class User {
// ...
@Column(length = 5)
@Size(min = 3, max = 5)
private String city;
// ...
}
6. Conclusion
이 글에서 우리는 @Size과 @Length 그리고 @Column length 속성의 차이점에 대해서 배웠습니다.
역시 영어 문서는 영어 문서 그대로 읽는게 제일 좋은것 같다. 번역하려니 영 의미 전달이 힘들다.
'Spring 공부' 카테고리의 다른 글
TDD와 BDD에서 사용되는 given/when/then 행동과 실습 (0) | 2022.01.24 |
---|---|
JUnit4 ->5 Issues, 변화점 (0) | 2021.07.16 |
SpringBoot JPA순환참조 문제 및 해결 (0) | 2021.06.03 |
스프링클라우드와 MSA의 이해 (0) | 2021.05.28 |
실시간 웹 통신 방식 정리 (2) | 2021.05.24 |