Enumerated

SeungJoo
|2024. 3. 28. 23:05
728x90

Enumerated

열거형인 Enum 타입의 필드를 매핑할 때 사용되는 어노테이션이며, 열거형 상수를 DB에  어떻게 저장할지를 지정하는데 사용됩니다.

@Enumerate(EnumType.STRING)

열거형 상수의 이름을 문자열로 데이터베이스에 저장하빈다. 즉 열거형 상수의 이름 그대로를 데이터베이스에 저장하게되빈다. 이방식은 데이터베이스에 저장된 값이 일기 쉽고 가독성이 높으며, 열거형 상수의 순서가 변경되어도 데이터베이스에 미치는 영향이 없어 유연성이 높습니다. 그러나 문자열로 저장되기 때문에 데이터베이스 크기가 늘어날 수 있고, 오타 의 인식 문제가 발생할 수 있습니다.

 

@Enumerate (EnumType.ORDINAL)

열거형 상수의 순서를 정수로 데이터베이스에 저장합니다. 따라서 데이터베이스에는 상수의 순서가 저장되게 됩니다. 이 방식은 데이터베이스에 저장되는 값이 더 경제적이고, 저장 공간을 절약할 수 있습니다. 그러나 상수의 순서가 변경되면 데이터베이스에 저장된 값도 변경되므로 유지보수 측면에서 취약점이 될 수 있습니다. 또한 새로운 상수를 중간에 추가하면 기존 상수들의 인덱스가 변경되어 문제가 발생할 수 있습니다.

 

주 의 사 항

EnumType.ORDINAL을 사용하는 것이 권장되지 않는 주된 이유는, 열거형 상수의 순서가 변경되거나 중간에 새로운 상수가 추가될 경우 데이터베이스에 저장된 값이 더 이상 정확한 열거형 값을 반영하지 못하기 때문입니다.

public enum Status {
    NEW, IN_PROGRESS, COMPLETED
}

 

열거형을 EnumType.ORDINAL로 저장했다고 가정하면, NEW는 O, IN_PROGRESS는 1, COMPLETED는 2로 데이터베이스에 저장됩니다. 만약 나중에 열거형에 새로운 상태를 추가하고자 하여 IN_PROGRESS와 COMPLETED 사이에 PENDING 상태를 추가한다면, PENDING은 2가 되고 COMPLETED 였던 상태는 3으로 밀려나게 됩니다. 이렇게 되면 데이터베이스에 저장된 기존의 데이터가 더 이상 정확한 상태를 반영하지 못하게 됩니다.

public enum Status {
    NEW, IN_PROGRESS, PENDING, COMPLETED // PENDING 추가
}

따라서 열거형의 순서가 변경되거나 중간에 열거형 상수가 추가되어도 여향을 받지 않도록 EnumType.STRING을 사용하여 열거형의 이름을 문자열로 저장하는 것이 권장됩니다. 이 방법을 사용하면, 데이터베이스에 저장된 값이 항상 명확하고 안정적으로 열거형 값을 반환하게 됩니다.

728x90

'Spring(Boot & FrameWork)' 카테고리의 다른 글

@Not Empty  (0) 2024.04.01
클래스 분리  (1) 2024.03.27
초난감 DAO  (1) 2024.03.26