이 문서는 사람이 읽는 요약입니다. 스키마·요청·응답 필드의 기계-readable 1차 명세는 Swagger UI 및 OpenAPI JSON을 기준으로 합니다.
| 구분 | 내용 |
|---|---|
| 모델 | SlotRankLog, PlaceSnapshot에 naver_index1(Float, nullable), naver_index2, naver_index3 필드 추가 |
| 마이그레이션 | slots/migrations/0015_add_naver_n123_indexes.py |
| 유틸 | rank_utils.fetch_naver_n123(keyword, target_place_id, target_place_name) — 네이버 통합검색 SSR HTML → __APOLLO_STATE__ → PlaceSummary.gdid 파싱으로 N1/N2/N3 추출. RestaurantListSummary 키워드(맛집/카페 등)는 "{지역} 주변 음식" fallback으로 PlaceSummary 유도 |
| 배치 기록 | process_slot_item() (slot_rank_api.py), _handle_place() (slot_updater.py) — place 순위 업데이트 시 N1/N2/N3 자동 기록 |
POST /check_rank |
place 플랫폼 응답 info에 naver_index1, naver_index2, naver_index3 추가 |
POST /check |
place 플랫폼 raw 응답에 naver_index1, naver_index2, naver_index3 추가 |
GET /slots/ranks |
히스토리 응답 항목에 naver_index1, naver_index2, naver_index3 추가 (SlotRankMainItemOut) |
슬롯 목록 rank_history |
각 히스토리 항목에 naver_index1, naver_index2, naver_index3 추가 (SlotRankHistoryItem) |
SlotRankLogSchemaOut |
naver_index1, naver_index2, naver_index3 (Optional[float]) 추가 |
N1/N2/N3 의미: - N1: 키워드 유사도 지수 (카테고리 기반, 동일 키워드 내 거의 고정) - N2: 관련성/인기도 지수 (장소 고유, fallback에서도 동일 값 유지) - N3: 랭킹 지수 (순위와 강한 상관관계)
fallback 전략: PlaceSummary 미반환 키워드(강남역 맛집, 홍대 카페 등 RestaurantListSummary)의 경우 "{지역} 주변 음식" 검색으로 PlaceSummary를 유도하여 N1/N2/N3 추출. fallback N1/N3는 원본 키워드와 다른 컨텍스트값이지만 N2는 동일.
| 구분 | 내용 |
|---|---|
GET /api/v1/subscriptions/plans/public |
auth=None. 비로그인 가격·랜딩 페이지용 공개 플랜 목록. visible=True · is_active=True 플랜만 반환 (기존 GET /subscriptions/plans 와 동일 필터). 응답 스키마는 SubscriptionPlanPublicOut (created_at 등 운영 메타 제외). 응답 헤더 Cache-Control: public, max-age=300. |
| 구분 | 내용 |
|---|---|
POST /api/v1/accounts/otp/send |
Celery(delay)가 Redis에서 지연·hang 될 때 약 5초 타임아웃 후 SMTP 스레드 폴백으로 발송. HTTP 응답이 수 초 걸릴 수 있음(정상 범위). 브로커 타임아웃 설정(CELERY_BROKER_*) 보강. |
POST /api/v1/accounts/otp/verify |
(동작 동일) Swagger 설명 보강. |
POST /api/v1/accounts/login |
탈퇴 유예 중(pending_delete_at 미래, is_active=False) 로그인 허용 — 탈퇴 취소·안내용. |
POST /api/v1/accounts/withdraw |
유료(플랜 가격이 0보다 큰) 활성 구독만 탈퇴 차단. 무료 구독 자동 해지, 활성 슬롯 INACTIVE 처리. JWT 필수. |
POST /api/v1/accounts/withdraw/cancel |
auth=None. 본문 email + password 권장(JWT 없이 취소). 유예 기간 내 복구, 구독 없으면 기본 무료 구독 재생성. 슬롯은 자동 복구 없음(정책). |
| JWT | ninja_jwt USER_AUTHENTICATION_RULE 커스텀(탈퇴 유예 사용자 인증 허용). |
| 문서 | Swagger accounts 태그 엔드포인트 description 대폭 보강. 루트 /docs/accounts-otp-withdraw/ 가이드 추가. |
| 구분 | 내용 |
|---|---|
| GitHub Actions / Docker | docker compose vs docker-compose 분기 명확화. |
docker-compose (web) |
Healthcheck start_period 300s, retries 증가. collectstatic에서 --clear 제거(기동 시간 단축). |
| discord-bot | depends_on.web: service_healthy → service_started (웹 헬스 대기로 배포 전체가 막히지 않도록). |
current_usage null 관련 버그 수정 등(자세한 내용은 Git 히스토리 참고).frontend-api-changes-2025-12-18.세부 커밋은 저장소에서 확인하세요.
git log --oneline -30