아래에서 구조, 특징, 장단점을 비교하기
코드값(예: 상태코드, 구분코드, 카테고리 등)을 DB 테이블에 저장하고,
애플리케이션은 그 데이터를 조회해서 사용합니다.
예시:
code_master 테이블
| code_group | code | name | desc |
| USER_TYPE | A | 관리자 | Admin user |
| USER_TYPE | N | 일반 | Normal user |
| STATUS | 01 | 활성 | Active |
| STATUS | 02 | 비활성 | Inactive |
| 항목 | 설명 |
| 유연성 높음 | 새로운 코드 추가 시 DB만 수정하면 됨 (무배포) |
| 운영 편리 | 관리자 페이지에서 코드값 수정 가능 |
| 확장성 좋음 | 타 시스템과 코드 테이블 연동 가능 |
| 비개발자도 관리 가능 | 기획자·운영자가 직접 관리 |
| 항목 | 설명 |
| 성능 부담 | 매번 코드 조회를 위해 DB 접근 (캐싱 필요) |
| 정합성 문제 가능 | 여러 환경(DB sync 불일치) 발생 시 혼란 |
| 타입 안정성 없음 | 잘못된 코드값을 넣어도 컴파일 시점에 검증 불가 |
| 버전 관리 어려움 | DB 데이터 변경 이력은 Git처럼 추적 어려움 |
코드값을 **Enum 클래스(열거형)**로 정의하여
소스코드 내부에서 관리하는 방식입니다.
예시 (Java)
public enum UserType {
ADMIN("A", "관리자"),
NORMAL("N", "일반");
private final String code;
private final String name;
UserType(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() { return code; }
public String getName() { return name; }
}
| 항목 | 설명 |
| 타입 안정성 높음 | 잘못된 코드값을 사용하면 컴파일 오류 |
| IDE 지원 | 자동완성, 리팩터링 용이 |
| 성능 우수 | DB 접근 없이 메모리에서 즉시 사용 |
| 버전 관리 용이 | 코드 변경 내역이 Git으로 관리됨 |
| 항목 | 설명 |
| 배포 필요 | 코드 추가/수정 시 반드시 재배포 |
| 운영 유연성 낮음 | 비개발자가 코드 수정 불가 |
| 공유 어려움 | 여러 시스템이 동일 Enum을 쓰려면 각 시스템별 반영 필요 |
구분 DB 코드 관리 Enum 코드 관리
| 구분 | DB 코드 관리 | Enum 코드 관리 |
| 관리 위치 | DB 테이블 | 소스 코드 |
| 변경 방법 | DB 수정 (무배포) | 코드 수정 + 재배포 |
| 운영 유연성 | 높음 | 낮음 |
| 성능 | DB 접근 필요 (캐싱 필수) | 빠름 (메모리 접근) |
| 타입 안정성 | 낮음 (런타임 오류 가능) | 높음 (컴파일 검증) |
| 버전 관리 | 별도 관리 어려움 | Git으로 용이 |
| 다중 시스템 공유 | 쉬움 | 어려움 |
| 적용 분야 | 운영용 코드 (설정, UI용) | 비즈니스 로직용 코드 (Enum, 상수) |
대부분의 기업에서는 다음처럼 혼합 전략을 씁니다 👇
구분 방식 이유
| 구분 | 방식 | 이유 |
| 시스템 내부 로직 분기 | Enum | 컴파일 시 타입 보장, 빠름 |
| 화면 표시용, 설정용 코드 | DB 테이블 | 비개발자 수정 가능, 무배포 |
| 공통 코드 관리 | DB + 캐싱 | 속도와 유연성 절충 |
예시)
항목 추천 방식
| 항목 | 추천 방식 |
| 비즈니스 로직 제어용 상수 | ✅ Enum (안정성과 컴파일 검증 중요) |
| 운영/관리 UI에서 자주 바뀌는 코드 | ✅ DB 테이블 (운영 유연성 중요) |
| 대규모 공통코드 체계 | ✅ DB + 캐시 (혼합형) |

| 데이터베이스 DELETE 트리거(Trigger)란? (0) | 2025.12.02 |
|---|---|
| 데이터 삭제할때 delete와 truncate 차이점은? (0) | 2025.12.02 |
| 엑셀파일 등 DB 테이블 데이터 INSERT 시 반드시 체크할 12가지 (0) | 2025.11.05 |
| 큐브리드 함수에서 INTERSECT | INTERSECTION 차이는? (0) | 2025.11.05 |
| sql 반올림 round() 함수 사용방법은? (0) | 2025.09.14 |