토스쇼핑 Open API 상품 선별 시스템 v1.8.0을 구현하고, 상품 1개(스파클 생수 무라벨 2L 24개)로 조회부터 DB 저장까지 전체 workflow를 처음부터 끝까지 검증했습니다. 이 글은 토스쇼핑 Open API 연동 개발기 10편입니다. 다만 AI 평가는 ChatGPT 상품 선별 프로젝트에서 수동으로 수행했으며, AI API 자동 호출은 이번 버전에 포함되지 않습니다.
토스쇼핑 Open API 연동 개발기: 9편까지의 진행 상황
이 시리즈는 Jukebox 콘텐츠와 SNS 콘텐츠에 쓸 토스쇼핑 상품을 API로 다루기 위한 개발 기록입니다. 지금까지의 흐름을 먼저 짧게 정리합니다.
1편에서 개발의 출발점을 정리했고, 2편에서 OAuth 인증과 Health API 호출을 확인했습니다. 이어 3편에서 베스트 상품 목록을 조회했고, 4편에서 상품 상세 조회를 연동했습니다. 5편에서는 쉐어링크 발급 API를 테스트했습니다.
그다음부터는 조회한 데이터를 WordPress 안에서 관리하는 단계였습니다. 6편에서 상품을 DB에 저장했고, 7편에서 저장된 상품의 상세 정보를 갱신했으며, 8편에서 여러 상품을 일괄로 갱신하는 구조로 확장했습니다. 바로 앞의 9편에서는 기존 상품 데이터를 바탕으로 상품 선별용 데이터를 만들었습니다.
토스쇼핑 Open API 상품 선별 시스템이 필요했던 이유
9편까지의 개발은 상품 조회 → 상세 조회 → DB 저장 중심이었습니다. 데이터를 모으고 최신 상태로 유지하는 데는 충분했지만, 저장된 상품 중 무엇을 Jukebox 콘텐츠와 SNS 콘텐츠에 쓸지 판단하고 그 판단을 기록하는 단계는 없었습니다.
그래서 v1.8.0에서는 수집한 상품을 콘텐츠 후보로 평가하고, 그 결과를 상태와 점수로 관리하는 구조를 추가했습니다. 이번 글의 핵심은 수동 평가를 포함한 상품 선별 workflow 검증입니다. 토스쇼핑 Open API 상품 선별 시스템이 자동으로 완성됐다는 뜻은 아닙니다.
이번 글의 범위
- 구현: 선별 실행 생성, 1차 기계적 필터, 평가용 JSON 생성, 평가 결과 JSON 입력, 결과 DB 저장
- 검증: 상품 1개 기준으로 조회부터 최종 선별 결과 DB 저장까지 전체 흐름
- 미구현: AI API 자동 호출 (AI 평가는 ChatGPT 상품 선별 프로젝트에서 수동 수행)
상품 선별 시스템 v1.8.0의 구조
상품 데이터 수집과 상세 조회는 토스쇼핑 Open API 공식 연동 가이드의 API를 이용합니다. v1.8.0은 이렇게 저장한 기존 상품 데이터와 9편에서 만든 상품 선별용 데이터를 기반으로 다음 기능을 구현했습니다.
- 상품 선별 실행 생성 및 선별 실행 ID 관리
- 1차 기계적 필터, 적격 상품과 제외 상품 구분
- 상품별 선별 결과 저장
- Jukebox 점수, SNS 점수 저장
- 최소 점수(min), 점수 차이(gap) 계산
selected/shortlist/near_miss/excluded상태 관리- 선정 이유, SNS Hook, 세부 점수 저장
여기에 ChatGPT 상품 선별 프로젝트와 수동으로 연동하기 위한 기능도 넣었습니다. 상품 선별 평가용 JSON 생성, 평가 결과 JSON 입력, 평가 결과 DB 저장입니다.
상품 선별 Workflow 전체 흐름
이번 개발의 중심은 개별 기능이 아니라 아래 흐름 전체를 한 번 끝까지 통과시킨 것입니다.
상품 조회
→ 상품 상세 조회
→ 상품 선별용 데이터 생성
→ 1차 기계적 필터
→ 상품 선별 평가용 JSON 생성
→ ChatGPT 상품 선별 프로젝트에서 평가
→ 평가 결과 JSON 생성
→ 플러그인에 결과 입력
→ 최종 선별 결과 DB 저장
| 단계 | 담당 | 방식 |
|---|---|---|
| 상품 조회, 상품 상세 조회 | 토스쇼핑 Open API | API 호출 |
| 상품 선별용 데이터 생성 | 플러그인 | 자동 |
| 1차 기계적 필터 | 플러그인 | 자동 |
| 상품 선별 평가용 JSON 생성 | 플러그인 | 자동 |
| 상품 평가 | ChatGPT 상품 선별 프로젝트 | 수동 |
| 평가 결과 JSON 변환 및 플러그인 입력 | 사용자 | 수동 |
| 결과 DB 저장, 최종 상태·점수 계산 | 플러그인 | 자동 |
구분해서 볼 부분: 현재 AI 평가는 ChatGPT 상품 선별 프로젝트와 사람이 수동으로 연결하는 방식입니다. 이번 버전에서는 AI API 자동 호출을 구현하지 않았습니다.
상품 선별 1차 기계적 필터
플러그인은 상품 선별 실행을 만들면서 선별용 데이터를 대상으로 1차 기계적 필터를 적용합니다. 이 단계에서 상품은 평가 대상이 되는 적격 후보와 제외 상품으로 나뉩니다. AI 평가에 넘기기 전에 규칙으로 걸러낼 수 있는 부분을 먼저 처리하는 역할입니다.
필터의 구체적인 조건은 이번 글에서 다루지 않으며, 세부 기준은 [확인 필요]로 남겨 둡니다. 이번 테스트에서 확인한 것은 이 단계가 실행 단위로 기록되고, 원본 후보·적격 후보·제외 수가 구분되어 나온다는 점입니다.
상품 선별 평가용 JSON 생성
1차 필터를 통과한 적격 상품은 플러그인이 상품 선별 평가용 JSON으로 만들어 줍니다. 이 JSON이 ChatGPT 상품 선별 프로젝트에 전달하는 입력입니다. 평가에 쓰는 데이터를 플러그인이 만든 JSON 한 곳으로 모아 두면, 평가자가 참고한 정보의 범위를 확인하기 쉬워집니다.
ChatGPT 상품 선별 프로젝트를 이용한 수동 평가
평가용 JSON은 ChatGPT 상품 선별 프로젝트에 넣어 평가했습니다. 이 과정은 API 호출이 아니라 사람이 직접 옮기는 수동 작업입니다. 평가에서는 Jukebox 점수와 SNS 점수, 선정 이유, SNS Hook, 세부 점수가 나옵니다.
평가 결과에 입력 데이터에 없던 값이 들어간 사례
평가 과정에서 한 가지 문제가 있었습니다. 입력 데이터에는 없던 30일 최저가가 한 차례 평가 결과에 포함된 것입니다. 이 값은 최종 플러그인 입력 JSON에서 제거했습니다.
AI 평가 결과를 그대로 저장하지 않고 입력 데이터와 대조해 보는 절차가 필요하다는 점을 보여 주는 사례입니다. 수동 연동 단계에서는 사람이 이 대조를 할 수 있지만, 이후 자동화를 고려할 때는 별도의 검증 방법이 필요할 수 있습니다. 구체적인 방식은 아직 정해지지 않았습니다.
평가 결과 JSON 변환과 플러그인 입력
검증을 마친 평가 결과는 플러그인이 받을 수 있는 JSON으로 변환했습니다. 이 JSON을 플러그인에 입력하면 플러그인이 평가 결과를 DB에 저장하고, 최소 점수(min)와 점수 차이(gap)를 계산해 최종 상태를 정합니다. 최종 상태는 selected, shortlist, near_miss, excluded 중 하나입니다. 상태를 나누는 구체적인 기준값은 이번 글에서 다루지 않으며 [확인 필요]로 남겨 둡니다.
상품 선별 테스트 결과: 스파클 생수 1개
테스트 상품은 지금까지의 시리즈에서 계속 사용해 온 스파클 생수, 무라벨, 2L, 24개(tacaItemId: 90382271)입니다.
1차 선별 결과
| 항목 | 값 |
|---|---|
| 실행 ID | 1 |
| 원본 후보 | 1 |
| 적격 후보 | 1 |
| 제외 | 0 |
상품 선별 평가 결과
| 항목 | 값 |
|---|---|
| Jukebox 점수 | 91 |
| SNS 점수 | 94 |
| min | 91 |
| gap | 3 |
| 상태 | selected |
평가 결과는 JSON으로 변환해 플러그인에 입력했고, DB 저장까지 정상적으로 이뤄진 것을 확인했습니다.
검증 범위: 이번 테스트는 상품 1개만 대상으로 진행했습니다. 여러 상품이 섞였을 때의 상태 분포나 shortlist, near_miss, excluded 상태가 실제로 나오는 경우, 제외 상품이 있는 실행은 이번에 확인하지 못했습니다.
v1.8.0에서 확인한 것
이번 v1.8.0에서 확인한 것은 점수를 저장하는 기능 자체보다, 수집한 상품 데이터를 콘텐츠 후보 선별 과정으로 연결하는 첫 번째 workflow가 처음부터 끝까지 이어진다는 점입니다. 이전 개발이 상품 조회, 상세 조회, DB 저장에 집중했다면, 이번에는 저장된 상품을 Jukebox 콘텐츠와 SNS 콘텐츠에 쓸 후보로 평가하고 관리하는 단계까지 넓어졌습니다.
- 선별 실행 단위로 원본 후보, 적격 후보, 제외 수를 구분해 기록할 수 있음
- 평가용 JSON 생성 → 수동 평가 → 결과 JSON 입력 → DB 저장이 실제로 이어짐
- 플러그인이 점수와 min, gap, 최종 상태를 저장함
- 평가 결과가 입력 데이터에 없던 값을 포함할 수 있으며, 저장 전 대조가 필요함
현재 한계와 다음 개발 방향
토스쇼핑 Open API 상품 선별 시스템의 현재 한계는 분명합니다. AI 평가가 수동이고, 이번 테스트가 상품 1개에 한정되어 있으며, AI API 자동 호출은 구현하지 않았습니다. 그래서 이번 결과를 자동 상품 선별 시스템이 완성된 것으로 볼 수 없습니다.
다음 개발에서는 여러 상품으로 이 workflow를 확장해 보는 방향을 검토할 예정입니다. 구체적인 범위와 방식은 아직 정해지지 않았으며 [확인 필요], 구현하기 전까지는 계획으로만 남습니다.
자주 묻는 질문
토스쇼핑 Open API 상품 선별 시스템 v1.8.0은 상품을 자동으로 선별하나요?
아닙니다. 1차 기계적 필터와 결과 저장, 점수 계산은 플러그인이 처리하지만 AI 평가는 ChatGPT 상품 선별 프로젝트에서 수동으로 수행합니다. AI API 자동 호출은 이번 버전에서 구현하지 않았습니다.
이번 테스트 규모는 어느 정도인가요?
스파클 생수(tacaItemId: 90382271) 1개입니다. 실행 ID 1에서 원본 후보 1, 적격 후보 1, 제외 0이었습니다.
min과 gap은 무엇인가요?
플러그인이 Jukebox 점수와 SNS 점수로 계산하는 값입니다. 이번 테스트에서는 Jukebox 91점, SNS 94점에 대해 min 91, gap 3으로 저장됐습니다.
평가 결과를 그대로 저장하지 않은 이유는 무엇인가요?
한 차례 평가 결과에 입력 데이터에 없던 30일 최저가가 포함되어, 최종 플러그인 입력 JSON에서 제거했습니다.