Database ‐ 공통 코드 설계 - thought-corner/Backend-PlayGround GitHub Wiki
Database - Common Code Design
공통 코드 vs 애플리케이션 ENUM
- SQL에서 공통 코드 테이블 설계 후 조인
- 장점
- 한 번의 쿼리로 모든 데이터 조회가 가능하다.
- 네트워크 통신 1회
- 데이터베이스에서 최적화가 가능하다.
- 단점
- SQL이 복잡해진다.
- 공통 코드 조인 로직이 여러 SQL에 중복된다.
- 공통 코드 테이블 구조 변경 시 모든 SQL 수정이 필요하다.
- 애플리케이션에서 공통 코드 조회
- 장점
- SQL이 단순해진다.
- 공통 코드 조회 로직 중앙화가 가능하다.
- 유지보수가 용이하다.
- 단점
- 추가 쿼리가 필요하다.(네트워크 통신 증가)
- N + 1 문제 발생 가능성이 있다.
- 애플리케이션 로직 복잡도가 증가한다.
성능이 중요하고 SQL 복잡도를 감수할 수 있다면 SQL에서 공통 코드 조인을 하고 유지보수성이 중요하고 약간의 성능 저하를 감수할 수 있다면 애플리케이션에서 공통 코드를 조회한다.
애플리케이션 ENUM
- 문자열은 오타가 있을 우려가 있어 안정적이지 못하다.
- 따라서 이런 문제들을 해결하려면 애플리케이션에서 ENUM을 사용해야 한다.
public enum OrderStatus {
ORDER("주문 접수"),
PAID("결제 완료"),
SHIPPING("배송 중"),
DELIVERED("배송 완료"),
CANCEL("주문 취소");
private final String displayName;
}
- 장점
- 오타 방지(컴파일 타입 검증)
- 코드 변경 시 추적 용이
- IDE 자동 완성 지원
- 타입 안정성 확보
- 표시 이름도 함께 관리 가능
- 단점
- 표시 이름 변경 시 재배포 필요
- 추가 속성 관리의 어려움
| 구분 | 공통 코드 테이블(DB) | 애플리케이션 ENUM(Java) |
|---|---|---|
| 주요 용도 | 단순 목록 조회, 화면 표시 | 비즈니스 로직 분기 처리 |
| 코드 안정성 | 낮음(문자열 사용, 오타 위험) | 높음(컴파일 체크, 타입 안전) |
| 변경 유연성 | 높음(DB만 수정하면 반영 가능) | 낮음(코드 수정 및 재배포 필요) |
| 자동 완성 | 지원X | 지원O |
| 관리 주체 | 데이터베이스 관리자, 개발자, 운영자 | 개발자 |
그럼 언제 무엇을 써야하는지?
- 애플리케이션 로직(if문)에 사용된다면
ENUM을 사용한다. 왜냐하면 오타 방지, 자동완성, 리팩토링 용이성 등 코드의 품질과 유지보수성을 위해 필수적이기 때문이다. 개발자가 실수를 줄일 수 있는 가장 확실한 방법이다.- 단순한 목록으로만 보여줘야 한다면 공통 코드 테이블을 사용한다. 로직에 전혀 관여하지 않고 단순히 사용자에게 선택지를 제공하거나 화면에 텍스트를 보여주기 위한 용도라면 공통 코드 테이블을 사용한다.
- 변경이 매우 빈번하다면 공통 코드 테이블을 사용한다. 로직에 일부 사용되더라도 하루에 몇 번씩 바뀔 수 있는 데이터라면
ENUM으로 관리하기가 어렵다. 이런 경우엔 코드 안정성을 일부 포기하더라도 운영의 유연성을 위해 공통 코드 테이블을 선택해야 한다.