Native Query 사용 → query dsl 리팩토링
Parameter로 Skill Id의 List를 받아오며, 여러 개의 skill Id를 WHERE 조건문에서 IN 연산을 통해 검색
만약 넘어온 Skill ID가 1과 2라면, 1이 들어가는 Meeting / 1과 2가 들어가는 Meeting / 2가 들어가는 Meeting이 모두 출력되는 상황
→ 레퍼런스로 점핏, 원티드 사이트를 보았을 때, 해당 사이트는 IN 연산자로 하나라도 조건에 걸리면 나오는 것으로 추측
만약 1과 2가 반드시 들어가도록 Group By와 Having 을 통해 검색하는 경우, 1과 2가 들어가는 결과만 출력할 수 있다.
→ 이 경우는, 1, 2, 3을 skill Id로 갖는 데이터를 찾을 수 없음
→ 따라서, 이 방법은 사용하지 않는 것이 좋아 보임
기존의 IN 방식을 사용하여, 해당 스킬이 하나라도 걸리는 경우를 모두 출력하는 방법
→ 상단 기준 16개만 출력하므로, DB 조회가 가장 우수할 것으로 예상
1번 방법으로 DB에서 데이터를 50개 정도 가져온 뒤, 자바 코드를 통해 데이터를 압축하는 방법
→ 예를 들어, IN(1, 2)로 조회를 할 경우, 1 혹은 2가 포함되는 모든 경우를 50개 정도 가져온 뒤
→ 해당 데이터들 중, 1과 2를 반드시 포함하는 데이터를 찾아서 정제하기
→ 1과 2를 가지면서 동시에 3을 갖는 데이터도 포함할 수 있음
@Query(value = "SELECT m.* FROM meeting m "
+ "JOIN meeting_skill ms ON m.id = ms.meeting_id "
+ "WHERE ms.skill_id IN (:skillId) "
+ "ORDER BY (6371 * acos(cos(radians(:locationLat)) * cos(radians(m.location_lat)) * cos(radians(m.location_lng) - radians(:locationLng)) + sin(radians(:locationLat)) * sin(radians(m.location_lat)))) ASC "
+ "LIMIT :limit OFFSET :page",
nativeQuery = true)
List<Meeting> getMeetingsWithSkill(Double locationLat, Double locationLng, List<Short> skillId, int limit, int page);