From 8225b34faf924243c8554f8af97b2527c7cbaf37 Mon Sep 17 00:00:00 2001 From: ssggii Date: Wed, 24 Sep 2025 15:13:18 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[SCRUM-312]=20FIX:=20=EC=BD=94=EC=8A=A4=20?= =?UTF-8?q?=EC=9A=94=EC=95=BD=20=EC=A1=B0=ED=9A=8C=EC=9D=98=20=EC=A6=90?= =?UTF-8?q?=EA=B8=B8=EA=B1=B0=EB=A6=AC=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=88=98=EC=A0=95=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LEFT JOIN을 INNER JOIN으로 변경하여 이미지가 있는 즐길거리 중에서 랜덤으로 3개만 조회하도록 쿼리를 수정했습니다. --- .../running_handai/domain/spot/repository/SpotRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java b/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java index 38bfc11..b3230ff 100644 --- a/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java +++ b/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java @@ -48,7 +48,7 @@ public interface SpotRepository extends JpaRepository { " s.description, " + " si.img_url As imageUrl " + "FROM spot s " + - "LEFT JOIN spot_image si ON s.spot_id = si.spot_id " + + "JOIN spot_image si ON s.spot_id = si.spot_id " + "JOIN course_spot cs ON cs.spot_id = s.spot_id " + "WHERE cs.course_id = :courseId " + "ORDER BY RAND() LIMIT 3", From c3efa29c201de7e0ea8b0f37a0fae45e518a0810 Mon Sep 17 00:00:00 2001 From: ssggii Date: Thu, 25 Sep 2025 19:26:27 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[SCRUM-312]=20REFACTOR:=20=EC=A6=90?= =?UTF-8?q?=EA=B8=B8=EA=B1=B0=EB=A6=AC=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=EC=9D=98=20=EC=95=88=EC=A0=95=EC=84=B1=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존 쿼리는 모든 즐길거리의 이미지가 없는 경우, 즐길거리가 존재하더라도 빈 데이터를 반환하는 문제가 있었습니다. 해당 문제를 해결하기 위해 spot_image 테이블을 LEFT JOIN으로 묶고, ORDER BY를 사용하여 이미지가 있는 즐길거리부터 우선적으로 반환하도록 수정했습니다. 이를 통해 모든 즐길거리의 이미지가 없는 경우에도 항상 데이터를 반환하여 API 안정성을 높였습니다. --- .../spot/repository/SpotRepository.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java b/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java index b3230ff..929fbca 100644 --- a/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java +++ b/src/main/java/com/server/running_handai/domain/spot/repository/SpotRepository.java @@ -42,16 +42,24 @@ public interface SpotRepository extends JpaRepository { * CourseId와 일치하는 Spot을 SpotImage와 함께 랜덤으로 3개 가져옵니다. */ @Query( - value = "SELECT " + - " s.spot_id AS spotId, " + - " s.name, " + - " s.description, " + - " si.img_url As imageUrl " + - "FROM spot s " + - "JOIN spot_image si ON s.spot_id = si.spot_id " + - "JOIN course_spot cs ON cs.spot_id = s.spot_id " + - "WHERE cs.course_id = :courseId " + - "ORDER BY RAND() LIMIT 3", + value = """ + SELECT + s.spot_id AS spotId, + s.name, + s.description, + si.img_url AS imageUrl + FROM + spot s + JOIN + course_spot cs ON s.spot_id = cs.spot_id + LEFT JOIN + spot_image si ON s.spot_id = si.spot_id + WHERE + cs.course_id = :courseId + ORDER BY + (si.img_url IS NOT NULL) DESC, + RAND() + LIMIT 3""", nativeQuery = true ) List findRandom3ByCourseId(@Param("courseId") Long courseId);