← 홈으로 돌아가기

Rankly API 변경 이력 (Changelog)

이 문서는 사람이 읽는 요약입니다. 스키마·요청·응답 필드의 기계-readable 1차 명세Swagger UIOpenAPI JSON을 기준으로 합니다.


2026-04-28

플레이스 N1/N2/N3 지수 통합 (네이버 PlaceSummary.gdid 기반)

구분 내용
모델 SlotRankLog, PlaceSnapshotnaver_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 플랫폼 응답 infonaver_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는 동일.

구독 · 공개 플랜 API

구분 내용
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.

2026-04-14

계정 · OTP · 탈퇴

구분 내용
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_healthyservice_started (웹 헬스 대기로 배포 전체가 막히지 않도록).

기타 (동일 기간 커밋 로그에 포함된 변경)

운영 메모


2025-12-18 (참고)


이전 이력

세부 커밋은 저장소에서 확인하세요.

git log --oneline -30