Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 주변상점 메뉴 키워드 검색 API 작성 #999

Merged
merged 23 commits into from
Nov 12, 2024

Conversation

20HyeonsuLee
Copy link
Contributor

🔥 연관 이슈

🚀 작업 내용

  1. 검색창에 메뉴 이름을 검색할 시 연관검색어를 반환하는 API를 작성했습니다.
  2. 검색창의 입력 내용에 맞는 상점을 조회하도록 기존 상점 조회 API를 수정했습니다.
    • 검색 문자열은 query입니다.
    • query이름을 가진 상점이 검색에 포함됩니다.
    • query이름의 메뉴를 가진 상점이 검색에 포함됩니다.

💬 리뷰 중점사항

마감 기한에 후다닥 하느라 정신없이 코드를 짰네요.. 코드 퀄리티가 낮습니다..ㅠ
일주일쯤 뒤에 시간 내서 리팩토링 하도록 하겠습니다.

Copy link

github-actions bot commented Nov 5, 2024

Unit Test Results

334 tests  +3   333 ✔️ +3   1m 31s ⏱️ +3s
  37 suites +1       1 💤 ±0 
  37 files   +1       0 ±0 

Results for commit 57d7f61. ± Comparison against base commit 9e81d6d.

♻️ This comment has been updated with latest results.

Copy link
Contributor

@krSeonghyeon krSeonghyeon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다. 컨벤션과 관련된 부분들 수정해주시면 될 것 같습니다.

@@ -200,4 +209,20 @@ public ResponseEntity<ShopReviewResponse> getReview(
ShopReviewResponse shopReviewResponse = shopReviewService.getReviewByReviewId(shopId, reviewId);
return ResponseEntity.ok(shopReviewResponse);
}

@ApiResponses(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컨트롤러인데 swagger 명세가 남아있네요

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아이고.. 정신없네요


@Component
@RequiredArgsConstructor
public class CacheShopsScheduler {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

한줄 띄기

Copy link
Member

@Choi-JJunho Choi-JJunho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

file change가 살벌하네요 ㅋㅋㅋ
고생하셨습니다 리뷰 확인해주세요

@@ -29,4 +29,7 @@ default Shop getByOwnerId(Integer ownerId) {
}

List<Shop> findAll();

@Query("SELECT DISTINCT s.name FROM Shop s WHERE s.name LIKE %:query%")
List<String> findDistinctNameStartingWith(@Param("query") String query);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

R

이거는 StratWith 쿼리가 아니라 Contains에 대한 쿼리같은데.. 네이밍이 잘못되었거나 쿼리가 잘못되었거나 둘중 하나인거같네용

%LIKE%

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네이밍이 잘못된듯 싶습니다..! 처음에 기능 요구사항이 startwith이였다가 contians로 바뀌었는데 반영이 안됐네요 수정했습니다!

}
)
@Operation(summary = "주변상점 검색어에 따른 연관검색어 조회")
@GetMapping("/search/related/{query}")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A

이거 기존 getShop의 ?query로 검색하는거랑 뭐가다른거죠?
클라이언트 입장에서 어떤 흐름으로 호출하게 되는건지 감이 잘 안와서요~

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 API는 주변상점 목록에서 검색어를 입력할때 검색칸 아래에 떠야하는 연관검색어를 조회하는 API입니다!

상점 메뉴를 그대로 띄워줄수도 있겠지만 그렇게 처리하면 생기는 문제가 있었습니다.
김치를 입력하면 중복된 메뉴명이 출력되는 경우(김치찌개, 김치찌개(2인), 김치찌개(참치))가 생겨서 해당 API를 통해 전처리한 메뉴/상점명을 반환해줍니다!

image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getShop에서 전처리를 해주면 안되는건가요? 검색 API가 두개가 생기는 느낌인데..

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

처음에는 getShop에서 문자열 패턴 이용해서 전처리를 해주려했는데 정확하지 않고, 고려해야할 부분이 많더라구요.(중복되는 메뉴명, 메뉴명 자체가 이상한경우)
또한 아래와 같은 고민점도 있었어서 API를 나누는 방향으로 결정했습니다.

  1. getShops에서 반환하고 있는 상점이 많다.
    • getShops에서 반환하고 있는 상점이 많기 때문에 검색어를 입력할때 마다 API를 호출하는 비용이 많이 들것이라고 생각했습니다.
  2. getShops에서 반환하는 상점 목록과 연관검색어의 성격이 다르다.
    • 클라이언트에서 getShops의 결과를 그대로 띄워주는것이 아닌 검색어와 연관된 메뉴/음식명을 띄워줘야 하기 때문에 결국에는 getShops에 연관검색어의 필드를 추가해야 합니다. 때문에 하나의 API로 처리하는것 보다는 분리하는것이 API의 호출비용, 관심사분리측면에서 좋다고 생각했습니다.

[추가 고민점]

기존 상점에서 존재하는 메뉴명을 그대로 띄워주는게 아니라 메뉴명을 적절히 전처리하고, 해당 메뉴에 대한 음식명도 추출해야해서(교촌 허니 콤보 → 치킨) AI를 도입하지 않는 이상 당장은 어려워보였습니다.

스프린트 기간이 얼마 남지 않기도 해서 일단 GPT돌려서 2000개 메뉴에 대해서 직접 수기로 전처리해서 DB에 저장해놓은 상태입니다. 추후에 GPT API를 이용해서 자동화하고, getShop API하나로 제공할 수 있는 방향성을 더 고민해보도록 하겠습니다😃

Copy link
Member

@Choi-JJunho Choi-JJunho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

추후에는 작업을 조금 더 잘게 쪼개보면 좋겠네요 :)
2000줄 +는 버겁군요 ㅋㅋㅋㅋ

@20HyeonsuLee 20HyeonsuLee merged commit ecd99e7 into develop Nov 12, 2024
3 checks passed
@20HyeonsuLee 20HyeonsuLee deleted the feat/987-search-shop-by-menu-name branch November 12, 2024 05:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

메뉴 이름으로도 상점을 검색기능 추가
3 participants