해당 문제가 발생했을 때, 직감적으로 알 수 있었다. 나의 쿼리 구성이 잘못되었음을..
간과한게 있었다. 중복이 될 수 있다는 점을 생각하지 않았다는 것이다.
엔티티 간 관계 상태
대략 위와 같이 총 3개의 테이블을 조인하여, 그 안에서 원하는 값을 찾는 로직을 구성하고자 했다.
문제 발생 시점에서, 먼저 로직 구성 시 내가 중복되게 작성한 부분이 있는지를 디버그 포인트를 걸어 확인하였다.
⇒ 로직 구성 자체는 문제가 없는 것 같아서, 쿼리 상의 문제라고 판단이 들었고, DB console을 열어서 직접 쿼리를 날려보기로 했다.
select * from post join fields f on post.post_id = f.post_id join tech_stack ts on f.fields_id = ts.fields_id;
그 결과, 문제를 찾을 수 있었다.
distinct
라는 옵션이 없으면 중복을 제거해주지 않는다.post 엔티티 1개에 fileds 2개가 할당되어 있는 경우, 2개가 찾아진다.
post 엔티티 1개에 fileds 2개가 할당되어 있고, fields 하나는 techstack이 2개, 하나는 1개가 할당되어 있는 경우, post 엔티티는 총 3개가 찾아진다.
이는 distinct
옵션을 넣어줌으로써 해결할 수 있다.