@ManyToMany가 편리할 수도 있겠지만, 실무에서는 사용을 권장하지 않는다.
다대다이기에 중간 테이블에 컬럼을 추가할 수도 없고 세밀하게 쿼리를 사용하여 조회 및 변경하기 어려워진다.
또한 조인 쿼리를 날렸을 때 조인 테이블 자체에 위 테이블처럼 주문시간이나 수량 같은 부수적인 데이터 다루기가 어려워진다.
그리고 중간 중간 테이블이 숨겨져 있기 때문에 예상치 못한 쿼리들이 조회될 수도 있다.
그래서 해결 방법으로 위와 같이 중간 테이블을 생성하고 @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 |