유저와 게시글 N : M 에서의 Relation
SpringBoot JPA를 설계할 때,
유저가 게시글에 좋아요를 누르는 기능을 구현할 수 있다.
이 때, 유저와 게시글은 N : M 관계가 되는데
User entity와 Post Entity를 ManyToMany 관계로 엮어서 자동으로 like라는 join table을 생성할 수 있고
User entity와 Like 테이블을 one to many, Post와 Like Table을 one to many 해서 동일한 효과를 기대할 수 있다.
이 둘의 차이는, 우리가 직접 join 테이블을 생성하느냐의 차이이다.
전자는 자동 생성이고 후자는 우리가 명시적으로 Like class를 따로 정의해서 entity를 명시적으로 정의한다.
후자의 경우의 장점은, 다른 필드들을 추가적으로 정의해줄 수도 있어서 확장성이 좋다는 것이다.
단순히 USER와 ROLE에 관한 N:M이라면 ManyToMany로 손쉽게 해결할 수 있지만
User와 Post에 관한 N:M이라면 OneToMany를 두 개로 엮으면서, like에서 '좋아요 한 시간' 같은 필드를 추가적으로 넣어줄 수도 있다.
ManyToMany로 구성하던 OneToMany 두개로 구성하던 구현 상황은 동일하게 이러한 상황이 된다.
1. user와 authority를 @ManyToMany 한다.
2. user와 user_authority를 @OneToMany, authority와 user_authority를 @OneToMany
둘의 테이블적 효과는 같다.
전자는 간단하게 할 수 있지만, 후자는 다소 수고스러운 대신에 확장성이 용이하다.