v2.2.320: /naver-shopping "CATEGORY_TREE is not iterable" 크래시 수정 + 카테고리 목록 조회

- import * as (namespace import) 로 배열 JSON 을 불러오면 esbuild 번들에서
  { default: [...] } 로 감싸져 배열이 아니게 되는 문제 — import x = require(...)
  로 전환해 esbuild/tsc/ts-jest 세 경로 모두 동일하게 동작하도록 수정
- 실제 esbuild 번들 산출물을 실행하는 회귀 테스트 추가 (ts-jest만으론 이 버그를 못 잡음)
- /naver-shopping categories [검색어] — 대분류 목록/세부 카테고리 검색 명령 추가
This commit is contained in:
2026-08-06 10:06:20 +09:00
parent c79eda1862
commit 29ad4cc023
13 changed files with 106 additions and 26 deletions
+8
View File
@@ -1,5 +1,13 @@
# Astra Patch Notes
## v2.2.320 (2026-08-05)
### 🐛 `/naver-shopping` "CATEGORY_TREE is not iterable" 크래시 수정 + 카테고리 목록 조회
실사례: 배포 직후 `/naver-shopping 요즘 뜨는 뷰티 카테고리 알려줘` 실행 시 `CATEGORY_TREE is not iterable` 에러. 원인: `import * as x from './data.json'`(네임스페이스 import)를 esbuild 로 번들하면 배열 최상위 JSON 이 `{ default: [...] }` 로 감싸져 `x` 자체가 배열이 아니게 됨 — ts-jest 는 require() 그대로라 이 클래스의 버그를 테스트로 못 잡는다(실제로 기존 유닛 테스트는 전부 통과했었음).
- **수정**: `import x = require(...)`(TS 의 순수 CJS require 문법)로 전환 — esbuild·tsc·ts-jest 세 경로 모두 동일하게 파싱된 배열을 그대로 받는다. (`esModuleInterop: true` 로도 고칠 수 있었지만, 이 프로젝트에서는 그 옵션이 `jest.spyOn(fs, 'statSync')` 같은 기존 CJS 네임스페이스 모킹을 깨서(Cannot redefine property) 되돌림.)
- **회귀 테스트 추가**: `tests/naverTrend.test.ts` 에 esbuild 로 실제 번들링한 산출물을 실행해 검증하는 테스트 추가 — ts-jest 만으로는 못 잡는 이 클래스의 버그를 앞으로 CI 가 잡는다.
- **카테고리 목록 조회 추가**: `/naver-shopping categories` (대분류 11종), `/naver-shopping categories <검색어>` (트리 fuzzy 검색 — 이름·경로·cat_id 표) — 어떤 분야명을 물어야 할지 몰라서 못 쓰는 문제 해결.
검증: tsc 무오류 + jest 1013 통과(신규 1) + esbuild 정상.
## v2.2.319 (2026-08-05)
### 🛍️ 네이버 쇼핑인사이트 · 검색어트렌드 연동 — `/naver-shopping`, `/naver-trend`
사용자 요청: 네이버 쇼핑인사이트·검색어트렌드 API로 "오늘 검색어 많은 키워드 10개" 같은 자연어 질문에 답하고 싶음. 두 API 모두 비교 대상(분야 코드/키워드 묶음)을 미리 지정해야 상대 비율(ratio)만 돌려주는 구조라 "전체 실시간 top-N"을 직접 못 준다 — LLM이 도메인 지식으로 후보를 제안하고 실제 API로 검증해 순위를 매기는 방식(discover 모드)으로 갭을 메웠다.