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으로 관리하기가 어렵다. 이런 경우엔 코드 안정성을 일부 포기하더라도 운영의 유연성을 위해 공통 코드 테이블을 선택해야 한다.