Plaything에서는 이렇게 반대되는 성향에 대해서 매칭을 해준다.
그런데 테스트코드에서는
이렇게 매칭할 때 매칭되는 대상이 없다고 떴다.
실제 서비스를 돌릴 때는 잘 되던게 테스트에서느 안 된다고 하니 또 트랜잭션의 문제인가 싶었다.
테스트에서 저장한 User의 정보가 DB에서 잘 조회됐다.
그렇다면, 날아가는 쿼리의 문제로 보인다.
select p1_0.id,p1_0.birth_date,p1_0.gender,p1_0.introduction,p1_0.is_baned,p1_0.is_private,p1_0.nick_name,p1_0.primary_role,p1_0.profile_status
from profile p1_0
join personality_trait pt1_0 on p1_0.id=pt1_0.profile_id
join relationship_preference rp1_0 on p1_0.id=rp1_0.profile_id
join profile_image pi1_0 on p1_0.id=pi1_0.profile_id where p1_0.is_baned=? and (pt1_0.trait=? and pt1_0.is_primary_trait=?) limit
이런 쿼리가 나갔다.
join에서 문제가 생긴 것으로 보인다.
마지막에 있는 ProfileImage 조인부분을 뺴니 데이터가 잘 조회됐다.
현재 테스트에서는 유저들에게 ProfileImage를 넣어주지 않았다.
이 특성인 것 때문으로 보인다.
profileImage와 profile간에 교집합이 없으니 데이터를 조회하지 못한 것이다.
leftJoin으로 바꿔주면 데이터가 잘 조회됐다.
하지만, 우리 서비스의 로직상 innerJoin이 필요하다. 프로필 사진이 있어야만 매칭이 되기 때문이다.
그러니 원래 코드는 Inner Join으로 해주는 게 맞다.
테스트에서 user들에게 프로필 이미지를 넣어주어야 한다.