추천 API
이 문서로 해결할 질문
GET /recipes/recommended계약과 응답 필드는 무엇인가요?- 캐시·fallback·무효화는 어떻게 동작하나요?
- Consumer 추천 파이프라인과의 관계는 무엇인가요?
전체 흐름은 추천 시스템을 참고하세요.
엔드포인트
GET /api/v1/recipes/recommended?limit=10
Authorization: Cookie accessToken (JWT 필수)
| 항목 | 값 |
|---|---|
| 전략 | server/producer/.../recommendation-cache-strategy.ts |
| 키 | recommendation:{userId} |
| TTL | 3600초 (CACHE_TTL_RECOMMENDATION_SECONDS) |
무효화는 Consumer RECOMMENDATION 타입으로 수행하며, 캐시 무효화를 참고하세요.
응답 (RecommendedRecipeItemDto[])
| 필드 | 설명 |
|---|---|
recipe | RecipeSummary (제목, 이미지, stats 등) |
rank | 추천 순위 (1부터) |
score | 추천 점수 |
reason | 추천 근거 문구 |
calculatedAt | 원본 갱신 시각 |
OpenAPI 스키마는 RecipeRecommendationItem이며, 개인화 추천 레시피 조회 레퍼런스에서 필드 정의를 확인할 수 있습니다.
조회 로직
Fallback 시 reason에 초기 추천 데이터 없음을 명시합니다.
프론트엔드 연동
/recipeCSR 섹션은useRecommendedRecipes()를 사용하며, React QueryQUERY_CACHE.recommended를 적용합니다.- 로그인이 필수이며, 비로그인 시 섹션을 미표시하거나 로그인을 유도합니다.
원본 갱신 (Consumer)
user-events는 RecommendationHandler로, activity-events는 ActivityRecommendationService로 처리되어 PostgreSQL upsert와 Top N(10) 재정렬이 수행되고, RECOMMENDATION 캐시 무효화가 이어집니다.
가중치 요약은 추천 시스템 — 주요 이벤트 가중치를, 상세는 추천 파이프라인을 참고하세요.
확장 시 유의
챗봇 SuggestedRecipe와 추천 원본 테이블을 직접 동기화하지 않습니다. 필요 시 챗봇 tool이 본 API를 호출하는 방식으로 확장합니다.