Spring/Annotations
@Enumerated ?
Geisha
2025. 1. 8. 18:50
Inflearn 강의 도중 @Enumerated 라는 어노테이션을 마주했고
이는 처음보는 어노테이션이었기에 짚고 넘어가고 싶었습니다.
마주한 코드는 다음과 같습니다.

@Enumerated
@Enumerated는 JPA(Java Persistence API)에서 사용되는 어노테이션으로,
Enum 타입을 데이터베이스에 매핑할 때 사용됩니다.
Enumerated 어노테이션은 (EnumType.String) 구문을 통해서
Enum 타입을 데이터베이스 컬럼에 Enum 값을 숫자(Ordinal)로 저장할지, 문자열(String)로 저장할지를 결정하고,
JPA 엔티티 클래스에서 Enum 필드를 데이터베이스와 매핑할 때 필요하게 됩니다.
@Enumerated의 주요 옵션
@Enumerated는 EnumType이라는 설정값을 통해 작동하며, 두 가지 옵션을 제공합니다:
1. EnumType.ORDINAL
- Enum의 순서를 기반으로 숫자를 저장합니다.
- 순서는 0부터 시작하며, Enum의 정의 순서대로 매겨집니다.
public enum OrderStatus {
PENDING, COMPLETED, CANCELLED;
}
- PENDING → 0
- COMPLETED → 1
- CANCELLED → 2
아래는 Entity 클래스에 설정하는 방법입니다.
@Entity
public class Order {
@Enumerated(EnumType.ORDINAL)
private OrderStatus status;
}
이러면 데이터베이스에

이러한 값이 저장되게 되지만
Enum의 순서를 변경하거나 새로운 값이 중간에 추가되면 기존 데이터와 불일치 문제가 발생할 수 있게 됩니다.
따라서 데이터 무결성을 보장하기 어렵기 때문에 잘 사용되지 않는다고 합니다.
다음은 2번째 타입입니다.
2. EnumType.STRING
- Enum의 이름(String)을 저장합니다.
- Enum의 순서에 의존하지 않아 안전합니다.
아래의 방식으로 설정되게 됩니다.
@Entity
public class Order {
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
그 결과는 데이터베이스에

위와같이 저장되게 되고 이는 Enum의 값의 순서와 상관없이 안전하게 저장되기 때문에
읽기 및 유지보수가 더 직관적이게 됩니다.