인프런 커뮤니티 질문&답변

CS님의 프로필 이미지
CS

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

@Enumerated(EnumType.STRING)

해결된 질문

작성

·

343

·

수정됨

0

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

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

답변 1

1

안녕하세요. 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
질문자

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

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

CS님의 프로필 이미지
CS

작성한 질문수

질문하기