상세 컨텐츠

본문 제목

[server] spring jpa에서 'ordinal' 왜 사용 안할까? (@Enumerated(EnumType.STRING) /@Enumerated(EnumType. ORDINAL) )

server

by 셉인 2024. 4. 14. 16:25

본문

728x90

[server] spring jpa에서 'ordinal' 왜 사용 안할까? (@Enumerated(EnumType.STRING) /@Enumerated(EnumType. ORDINAL) )

 

@Enumerated(EnumType. ORDINAL) 방식은 enum 값의 순서(정수 인덱스)를 데이터베이스에 저장한다.

 

예) enum이 MONDAY, TUESDAY, WEDNESDAY 순서로 정의

MONDAY는 0, TUESDAY는 1, WEDNESDAY는 2로 저장

 

그런데 jpa에서 @Enumerated(EnumType. ORDINAL)인 ordinal 방법을 사용하지 않고  String 으로 타입을 설정하는 @Enumerated(EnumType.STRING)을 주로 사용한다. 이 때 해당 타입으로 쓰고 싶다면 jpa에서 enum을 사용하게 되면 다음과 같이 어노테이션 @Enumerated(EnumType.STRING)를 붙여주어야 한다. 아무것도 설정하지 않게 되면 (초기 설정) @Enumerated(EnumType.ORDINAL)로 설정된다.

 

그러면 왜 @Enumerated(EnumType. ORDINAL)을 비선호하는 걸까?

  1. 유지보수의 어려움: EnumType.ORDINAL을 사용하면 데이터베이스에 저장된 값이 enum의 선언 순서에 의존하게 된다. 이는 나중에 enum에 새로운 값이 추가되거나 순서가 변경될 경우, 기존의 데이터가 무의미하거나 잘못 해석될 위험이 있다. 예를 들어, MONDAY, TUESDAY, WEDNESDAY에서 MONDAY, SUNDAY, TUESDAY, WEDNESDAY로 변경하면, 원래 TUESDAY를 나타내던 1이 SUNDAY를 가리키게 된다.
  2. 가독성 저하: 데이터베이스에서 직접 값을 확인할 때, 숫자만 보고는 어떤 enum 값인지 쉽게 알아볼 수 없다. 이는 디버깅이나 데이터 분석을 할 때 불편을 초래한다.
  3. 데이터의 오용 가능성: 숫자는 외부에서 쉽게 변경될 수 있고, 실수로 잘못된 값이 저장될 가능성이 더 높다. 예를 들어, 0, 1, 2 외의 숫자가 저장되면 이는 유효하지 않은 enum 값으로 해석될 수 있따.

이러한 이유로 많은 개발자와 프로젝트에서는 EnumType.STRING을 선호한다. EnumType.STRING은 데이터의 명확성과 유지보수성을 향상시키며, 애플리케이션의 robustness(견고성)을 높일 수 있다. 데이터베이스 공간과 성능이 중요한 초점이 아닌 한, EnumType.STRING의 사용이 더 바람직하다.

728x90

관련글 더보기

댓글 영역