yb__char
개발은 늘 어려워
yb__char
전체 방문자
오늘
어제
  • 분류 전체보기 (37)
    • 일상 (2)
    • 코딩테스트 (1)
    • Spring (7)
    • 면접 대비 (2)
    • Java (4)
    • Git (3)
    • CleanCode (1)
    • 데이터베이스 (4)
      • SQL (2)
    • 후기 (2)
    • Nestjs (0)
      • Code (0)
      • Typescript (0)
    • Javascript (6)
      • Async (2)
      • lodash (3)
    • iOS (5)
      • Swift 문법 (5)
      • SwiftUI (0)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
yb__char

개발은 늘 어려워

[Spring boot] @ManyToMany를 사용하면 안 되는 이유
Spring

[Spring boot] @ManyToMany를 사용하면 안 되는 이유

2022. 10. 12. 15:15

@ManyToMany가 편리할 수도 있겠지만, 실무에서는 사용을 권장하지 않는다.

다대다이기에 중간 테이블에 컬럼을 추가할 수도 없고 세밀하게 쿼리를 사용하여 조회 및 변경하기 어려워진다.

ManyToMany -> OneToMany, ManyToOne

또한 조인 쿼리를 날렸을 때 조인 테이블 자체에 위 테이블처럼 주문시간이나 수량 같은 부수적인 데이터 다루기가 어려워진다.

그리고 중간 중간 테이블이 숨겨져 있기 때문에 예상치 못한 쿼리들이 조회될 수도 있다.

 

그래서 해결 방법으로 위와 같이 중간 테이블을 생성하고 @OneToMany, @ManyToOne으로 일대다, 다대일 관계로 풀어내는 것이 제일 best라고 생각한다.

 

그래야 위 Member_Product처럼 회원의 FK, 상품의 FK를 조회하고 해당 회원의 한 상품 ID를 조회하여 꺼내올 수 있는 로직이 성립된다.

 

동기들과 사이드 프로젝트를 하면서 Nestjs로 백엔드 개발을 하다가 회원이 게시물에 좋아요 했을 때 멍청하게 다대다로 했다가, 직접 UX적으로 생각해보니 말이 안 되는 로직이 나왔다.

 

한 회원이 한 게시물에 좋아요를 여러 번 클릭하거나 좋아요 상태를 체크해도 어떤 유저가 눌렀는 지 체크가 안 되는 현상이 예상되어

중간에 likeStatus(좋아요 상태)이라는 컬럼을 가진 테이블을 생성하여 위 같이 매핑했더니, 원하는 방향으로 흘러갔다.

그래서 실무뿐만 아니라 UX적으로도 생각을 해보고 접근하여 다대다를 선택할지 사전에 고민을 해봐야 할 듯하다.

 

 

'Spring' 카테고리의 다른 글

[Spring boot] 열리는 port 번호 변경하기  (0) 2022.10.13
JPA vs MyBatis 비교  (0) 2022.03.25
[Spring] MyBatis 연동 및 API 테스트  (3) 2022.02.11
[Spring] Spring Service, Bean, 의존성 주입  (0) 2022.02.07
[Spring Boot] Spring 웹 개발 입문 (Spring Controller, HTTP, REST API 문서)  (0) 2022.02.03
    'Spring' 카테고리의 다른 글
    • [Spring boot] 열리는 port 번호 변경하기
    • JPA vs MyBatis 비교
    • [Spring] MyBatis 연동 및 API 테스트
    • [Spring] Spring Service, Bean, 의존성 주입
    yb__char
    yb__char
    안녕하세요 백엔드 개발자 차윤범입니다.

    티스토리툴바