Enum class로 카테고리를 분류할까.. 말까..

myminimin·2023년 9월 26일
0

Spring/Springboot

목록 보기
20/21

게임에는 여러 장르가 있다. 스포츠, 공포, 생존 등... 그리고 보통은 한 게임에 여러 개의 장르를 설정한다. 예를 들어 P의 거짓이라는 게임은 '소울라이크, 액션, 탐험, 액션 RPG' 4개의 장르를 가지고 있다.

처음에는 game - genre 두 테이블을 연결하는 game_genre 와 같은 매핑 테이블이 필요할 것이라고 생각을 했다.

이전에 4일짜리 단기 토이프로젝트(Spring 사용)를 할 때 DB를 처음 설계해보면서 '매핑 테이블' 이라는 개념에 대해서 어렴풋이 알게됐는데... 이번에 Spring boot를 사용하면서 JPA를 배우다보니 매핑 테이블을 어떻게 해야하는가에 대해 고민을 많이 했다.

Spring boot로 만들어진 프로젝트를 7개정도 분석을 해보니 매핑 테이블을 직접 만드는 경우가 많았고(그리고 패키지별로 분류를 해서 깔끔하게 정리를 해놓으니 정말 보기 좋아서 참고할 것임! ), @ManyToMany를 쓰는 프로젝트도 있었다...!?

그러다가 어떤 한 프로젝트는 당근마켓을 클론한 프로젝트였는데 상품에 대한 카테고리를 Enum class로 분류를 해둔 것을 봤다.

어? 이거 내가 하려는 프로젝트에도 적용할 수 있겠는데? 라는 생각이 들어 Enum에 대해서 더 검색을 해봤다.

  • Enum을 사용했을 때 장점
  1. 단순하다 : 다대다 관계를 중개 엔티티와 매핑하는 방식 대신에 간단하게 사용할 수 있어서 데이터 모델이 간단해진다.
  2. 가독성 : 게임 카테고리 값이 명확하게 정의되어있어 가독성이 향상된다
  3. 유지보수성 : 중개 엔티티와 관련된 데이터베이스 스키마 변경 없이 카테고리를 관리할 수 있다
  • 단점
  1. 확장성 : 새로운 카테고리를 추가할 때마다 코드를 변경해야함
  2. 데이터베이스 쿼리 : 게임 카테고리가 데이터베이스에 직접 저장되지 않으므로 특정 카테고리로 게임을 필터링하거나 검색하는 등의 복잡한 쿼리를 수행하기 어려울 수 있음 (여기에서 이미 탈락....)
  3. 유지 보수와 변경 관리 : 코드와 데이터베이스 변경 사이에 불일치가 발생할 수 있다.

그냥 테이블 다 만들자!!!! 😂

0개의 댓글