docs(audio-recommendation): 추천 탭 snapshot 계획을 갱신한다
This commit is contained in:
@@ -237,17 +237,18 @@ data class CommentedAudioResponse(
|
||||
## 10. Technical Constraints
|
||||
|
||||
### 패키지 구조
|
||||
- 공개 API 조립 계층은 `kr.co.vividnext.sodalive.v2.api.audio.recommendation` 하위에 둔다.
|
||||
- 공개 API 조립 계층은 `kr.co.vividnext.sodalive.v2.api.content.recommendation` 하위에 둔다.
|
||||
- Controller: `...adapter.in.web`
|
||||
- Facade: `...application`
|
||||
- Response DTO: `...dto`
|
||||
- 도메인 조회 계층은 `kr.co.vividnext.sodalive.v2.audio.recommendation` 하위에 둔다.
|
||||
- 도메인 조회 계층은 `kr.co.vividnext.sodalive.v2.content.recommendation` 하위에 둔다.
|
||||
- Query service: `...application`
|
||||
- 점수 정책/domain model: `...domain`
|
||||
- 조회 port: `...port.out`
|
||||
- QueryDSL/JPA 구현: `...adapter.out.persistence`
|
||||
- scheduler: `...adapter.out.scheduler`
|
||||
- 의존 방향은 `v2.api.audio.recommendation -> v2.audio.recommendation`만 허용한다.
|
||||
- `content` 패키지는 오디오 콘텐츠뿐 아니라 오리지널 시리즈 등 추천 탭에 포함될 수 있는 콘텐츠 범주를 포괄하기 위한 명칭이다.
|
||||
- 의존 방향은 `v2.api.content.recommendation -> v2.content.recommendation`만 허용한다.
|
||||
|
||||
### V2 공통화/재사용 대상
|
||||
- `HomeBannerItem`은 메인 홈 전용 DTO가 아니라 여러 추천 화면에서 사용할 배너 응답 구조이므로 `v2.api.common.dto` 계열 공통 DTO로 분리한다.
|
||||
@@ -266,7 +267,8 @@ data class CommentedAudioResponse(
|
||||
- New & Hot, 최근 댓글 많은 오디오, 추천 오디오는 스냅샷 기반 조회를 우선한다.
|
||||
- 스케줄러는 `@Scheduled(cron = "0 0 0 * * *", zone = "Asia/Seoul")` 기준으로 설계한다.
|
||||
- 다중 서버 환경에서 중복 실행을 막기 위해 기존 Redisson lock 패턴을 따른다.
|
||||
- 스냅샷 기준 시각은 KST 전날 `23:59:59`로 저장한다.
|
||||
- 스냅샷 기준 시각은 KST 전날 `23:59:59`를 UTC 변환 없이 KST-local `LocalDateTime`으로 저장한다.
|
||||
- 스냅샷 집계 window도 KST-local `00:00:00`부터 KST-local `23:59:59`까지를 기준으로 계산한다.
|
||||
- 19금 노출 영향을 받는 스냅샷 섹션은 visibility variant를 저장한다.
|
||||
- `SAFE`: 19금이 아닌 콘텐츠만 포함한다.
|
||||
- `ALL`: 19금 콘텐츠와 19금이 아닌 콘텐츠를 모두 포함한다.
|
||||
@@ -279,6 +281,8 @@ data class CommentedAudioResponse(
|
||||
- 비회원은 성인 콘텐츠를 제외한다.
|
||||
- 차단 관계 필터는 기존 v2 홈/크리에이터 채널 조회 패턴을 따른다.
|
||||
- 조회수 점수의 조회수는 `AudioContent.playCount`가 아니라 `creator_content_view_history`의 상세 페이지 조회 이력 count를 사용한다.
|
||||
- 최신성 점수의 일수는 날짜 경계가 아니라 시간까지 포함한 24시간 경과 일수 기준으로 계산한다.
|
||||
- New & Hot lazy 보강은 스냅샷 row가 없을 때 Redis marker 기준 KST 날짜별 1회만 시도하고, 보강 후 후보가 0개인 정상 상황에서는 같은 날짜의 다음 조회가 전체 refresh를 반복하지 않는다.
|
||||
- 공통 오디오 카드 응답의 `isOriginalSeries`는 시리즈 미소속 오디오이면 클라이언트 편의를 위해 `false`로 내려준다.
|
||||
- 무료/포인트/추천 오디오처럼 서로 다른 추천 섹션에 같은 콘텐츠가 동시에 포함되어도 서버에서 중복 제거하지 않는다.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user