[Spring] 네이버 쇼핑 API 필터링

0-x-14·2024년 11월 19일
0




오늘은 ‘따끈’ 프로젝트를 진행하면서 겪었던 문제와 해결한 방법에 대해 정리해보려 한다.


따끈’은 사용자가 카테고리별로 반려동물의 건강 상태에 대한 일지를 작성하고, 이를 기반으로 AI를 통해 건강 상태를 진단할 수 있는 반려동물 스킨케어 서비스이다.

일지를 작성할 때는 귀/눈/털/발톱/이빨 5개 카테고리 중에서 선택할 수 있고, 이외에도 카테고리별 제품 랭킹, 커뮤니티, 투두 등의 기능이 있다.







이중 내가 개발한 AI진단 방법은 다음과 같다.

  1. 반려동물의 정보와 선택한 일지 기록을 토대로 ChatGPT에게 반려동물의 건강 상태 진단과 관련 제품을 추천해달라고 한다. (GPT의 모델은 chat gpt 4o를 사용하였다.)
  2. 챗GPT가 추천한 제품을 네이버 쇼핑 API를 통해 네이버 쇼핑에 등록된 제품 정보를 불러와서 사용자에게 보여준다.




이 과정에서, 챗GPT가 해외 제품을 추천해주는 문제가 발생하였다.


질문 내용을 구성할 때 5개 제품을 추천 해달라고 했는데, 5개를 모두 한국 제품으로 추천해줄 때도 있지만 해외 제품을 추천할 때도 있었다.

추천해준 제품이 해외에서만 판매될 경우, 네이버 쇼핑 API에서 검색되지 않아 2번의 과정에서 개 사료 등 '반려동물 스킨케어 서비스'라는 따끈 앱의 취지와는 맞지 않는 제품이 불러와지는 일이 발생하였다.





이를 해결하기 위해 먼저 단순히 챗GPT에게 보내는 질문의 내용에 “한국의 제품을 추천해달라”고 추가해보았으나, 여전히 해외 제품만을 추천하는 문제가 발생하였다.
별도의 질문을 통해 확인해보니 챗GPT는 제품이 어느 나라에서 판매되는지는 알 수 없다고 하였다.




고민 끝에 네이버 쇼핑 API로 제품 정보를 업데이트할 때 필터링을 하는 방법으로 이를 해결하였다.




네이버 쇼핑 API의 제품 정보에는 다양한 정보들이 저장되어 있는데, 다음과 같이 카테고리도 저장되어 있다.



관련도 순으로 검색 결과를 받아온 후 제품을 선택할 때, 다음과 같은 필터링을 추가하여 지정한 카테고리 내의 제품을 선택하도록 하였다.

public JSONObject getFilteredItems(JSONArray items) {

        for (int i = 0; i < items.length(); i++) {

            // 반복문을 돌면서 조건을 충족하는 값이 나오면 바로 종료, 해당 item으로 저장함
            JSONObject itemJson = items.getJSONObject(i);

            String category3 = itemJson.getString("category3");
            String category4 = itemJson.getString("category4");

            List<String> validCategory3 = Arrays.asList(
                    "미용/목욕", "강아지 건강/관리용품", "고양이 건강/관리용품"
            );
            List<String> validCategory4 = Arrays.asList(
                    "브러시/빗", "에센스/향수/밤", "샴푸/린스/비누", "이발기", "발톱/발 관리",
                    "드라이기/드라이룸", "미용가위", "타월/가운", "물티슈/크리너",
                    "눈/귀 관리용품", "구강청결제", "칫솔", "치약", "구강티슈", "구강관리용품"
            );

            if (validCategory3.contains(category3) && validCategory4.contains(category4)) {
                // 해당하는 카테고리값에 해당하는 제품이 나오면 즉시 반복문을 종료하고 해당 itemJson값을 리턴함
                return itemJson;
            }
        }

        return null;
    }






물론 챗GPT가 추천해준 제품과는 다른 제품을 가져올 수도 있다.

네이버 쇼핑 API에서 관련도 순으로 제품을 검색하므로 완벽하게 일치하지 않더라도 관련 키워드들이 들어간 제품을 선택한다.
PM과 논의한 결과, 키워드를 통해 진단 내용에 맞는 제품들을 선택하므로 앱의 취지와도 적합하다는 판단이 들어 필터링으로 문제를 해결하였다.



관련 전체 코드는 아래 링크에서 확인할 수 있다.
https://github.com/ttakkeun/Backend_Spring/pull/120


0개의 댓글

관련 채용 정보