• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

@Enumerated(EnumType.STRING)

23.12.19 14:25 작성 23.12.19 14:37 수정 조회수 231

0

@Enumerated(EnumType.STRING)
private OrderStatus status; // 주문 상태 [ORDER, CANCEL]

db에 Enum 타입을 다룰 때 ordinal이 아닌 문자로 다뤄야 한다는 걸 들은 적이 있는데
강의에서도 몇글자 줄이려다가 장애가 발생한다고 말씀하십니다. 그러면 ordinal로 저장하는 이점을 포기하고도 반드시 문자로 저장하는 것인가요? 데이터가 많아지면 불리하지 않은가요

답변 1

답변을 작성해보세요.

1

OMG님의 프로필

OMG

2023.12.19

안녕하세요. CS님, 공식 서포터즈 OMG입니다.

JPA 기본편강의에서도 설명해주시지만, ORDINAL일 시의 발생할 수 있는 문제점(Enum의 순서가 바뀔 경우 데이터 꼬일 수 있음) 이 크리티컬하여 STRING으로 하셔야 합니다 😀

 

예시)

[ORDER:1, CANCEL:2] -> 주문 상태가 STOP이 추가되었을 때,

[ORDER:1, CANCEL:2, STOP:3] 의 순서로 Enum을 정의하면 문제가 없겠지만

[STOP:1, ORDER:2, CANCEL:3]의 순서가 정의되어 문제가 발생할 수 있습니다.

 

감사합니다.

CS님의 프로필

CS

질문자

2023.12.19

문자로 검색하는 것에 대한 약간의 손해는 그냥 감수해야 되는 부분일까요?

OMG님의 프로필

OMG

2023.12.19

Enum에 대한 정의는 코드값(숫자)가 아닌 문자로 해야하며, 그에 따른 손해는 감수해야 된다고 생각합니다.