본문 바로가기

Backend/Spring

JPA enum으로 컬럼 관리

DB에 특정 데이터만 들어가야 하는 경우가 있어요.

  • 성별: 남자/여자
  • 삭제플래그: YES/NO
  • 상태값: 준비/진행/완료

등등 비즈니스에 따라 여러가지 경우가 있는데요.

데이터를 관리하기 용이하도록 enum을 활용해볼게요.

 

예시는 쉽게 남자/여자 데이터로 해볼게요.

우선 enum 클래스를 하나 만들어주세요.

description 필드는 굳이 안넣어도 됩니다.

Gender.java (enum)

@Getter
@AllArgsConstructor
public enum Gender {
  MALE("남자"),
  FEMALE("여자");

  private String description;
}

User.java (Entity)

@Entity
@Getter
@Setter
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long userId;

  @Enumerated(EnumType.STRING)
  @Column(length = 6)
  private Gender gender;
}

 

이게 끝이에요.

이렇게 되면 User 엔티티에 데이터를 save할 때 반드시 MALE이나 FEMALE만 넘어오게 되있어요.

별도의 처리를 해주지 않는다면 null이 들어올 수도 있지만 그래도 애플리케이션을 통하여 이외의 데이터는 들어올 수 없습니다.

 

이대로 하이버네이트로 ddl 생성하면 @Enumerated(EnumType.STRING) 요 속성으로 인하여

실제 DB에는 varchar 타입의 gender 컬럼이 생성이 됩니다.

그래서 저같은 경우는 enums 패키지를 아예 별도로 생성해서 관리하는 편입니다.

 

 

코드를 넣는 것에 비해 MALE, FEMALE이 너무 길어서 리소스가 낭비라고 생각되시면 아래와 같이 줄여서 넣으시면 되요.

예전에 패드백 주신 분이 계셔서..

 

@Getter
@AllArgsConstructor
public enum Gender {
  M("남자"),
  F("여자");

  private String description;
}

 

또 큰 장점은 서비스 로직 단에서 이렇게 말끔하게 체크할 수 있습니다.

 

if (user.getGender() == Gender.FEMALE) {

}

 

사용할지 말지는 본인의 자유!

정답은 아닙니다.