@Size, @Length, @Column(length) 차이점

Doyeon·2023년 2월 14일
0
post-thumbnail

@Valid 를 이용해서 입력받을 필드 값의 유효성 검사를 구현하다가 @Size 어노테이션을 알게 되었다.

@Entity 가 붙은 클래스에서는 @Column(length=10) 처럼 length 속성을 정해주기도 하는데, @Size 와는 어떤 차이가 있는지 궁금해져 찾아보았다.

Overview

@Size, @Length, @Column 은 모두 필드의 크기를 알려주는 어노테이션이다.

@Size, @Length 는 필드의 크기를 검증하기 위해 사용되어 쓰임이 비슷하다.

@Column 은 위의 두 어노테이션과는 조금 다른데, 유효성 검사가 아니라, 테이블 속 컬럼의 크기를 정하는 DDL을 컨트롤하기 위해 사용된다.

이제 하나씩 자세히 알아가보자!


@Size

  • Java Bean Validation 어노테이션으로, 필드 크기가 min 과 max 사이여야 값을 저장할 수 있도록 유효성을 검사해준다.
  • JPA나 Hibernate로부터 독립적인 bean을 만들어준다.
    public class User {
    
        @Size(min = 4, max = 10)
        private String username;  // 4 ~ 10 범위 밖의 크기 값이 들어오면 Exception 발생
    
    }

@Length

  • Hibernate 어노테이션으로, min 과 max 를 이용하여 필드 값 크기에 대한 유효성 검사를 한다.
    public class User {
    
    		@Size(min = 2, max = 12)
    		private String name;
    
    } 

@Column(length=value)

  • JPA에서 제공하는 어노테이션이다.
  • JPA 가 @Entity 가 붙은 클래스를 DB 테이블로 만들 때, @Column 의 length 속성을 사용해서 컬럼 문자열의 길이를 정한다.
  • String 형태의 필드를 MySQL에서 테이블의 컬럼으로 만든다고 하면, 컬럼의 type 은 varchar 가 된다. @Column(length=10) 이라면, varchar(10) 타입의 컬럼이 생성되는 것이다.
  • length 보다 긴 문자열을 넣으려고 하면 SQL error 가 발생한다.
  • 유효성 검사를 해주는 것이 아니라, 물리적인 데이텁이스 테이블 컬럼의 길이 속성만 지정한다.
  • 참고로, @Column(length=value)는 String 필드 경우에만 적용되며, length 값을 지정해주지 않는다면 자동으로 varchar(255) 크기의 컬럼으로 생성된다.
    @Entity
    public class User {
    
    		@Column(length = 20)
    		private String password;
    
    }
profile
🔥

0개의 댓글