Skip to content

[BE/ADR] 큐레이션 피드 Read Model 분리 #322

Description

@Whale0928

배경

현재 큐레이션 피드는 원본 JSON payload를 조회한 뒤 Response Spec의 x-feed 기준으로 투영하고, 필요한 x-graphql 값을 조회 시점에 보강한다.

원본 payload는 건당 최대 128KB이며 페이지 크기 10과 다음 페이지 확인용 1건을 함께 읽으면 이론상 약 1.4MB를 DB에서 애플리케이션으로 전송할 수 있다. 피드 조회 최적화는 필요하지만 이번 작업 범위에서는 구현하지 않고 후속 과제로 남긴다.

결정

  • curation_extension.payload는 원본 데이터의 SSOT로 유지한다.
  • 피드 조회용 파생 Read Model인 feed_source_payload를 별도로 저장하는 방향을 채택한다.
  • feed_source_payload에는 Response Spec의 x-feed 필드와 피드 GraphQL 보강에 필요한 숨은 입력값(alcoholId 등)만 포함한다.
  • GraphQL로 계산되는 통계값은 저장하지 않고 조회 시점에 보강한다.
  • 큐레이션명, 이미지, 노출 기간 등 payload 외 공통 필드는 기존 Curation 값을 그대로 사용한다.
  • 피드 API의 codes는 1개 이상 필수이며 여러 스펙 코드를 받을 수 있도록 한다.
  • 기존 피드 응답 구조는 변경하지 않는다.

후속 작업

  • feed_source_payload 및 스펙 버전 관리 방식 결정
  • 생성·수정 트랜잭션에서 원본 payload와 피드 Read Model을 함께 갱신
  • 기존 큐레이션 데이터 backfill 절차 마련
  • x-feed 변경 시 대상 스펙의 Read Model 재생성 정책 마련
  • 노출 조건, keyword, codes, cursor를 DB 조회 단계에서 적용
  • Extension과 Spec 일괄 조회로 N+1 제거
  • 동일 GraphQL 실행 계획 단위의 배치 보강 검토
  • 기존 Product 피드 응답 호환성 회귀 테스트 추가

비고

동적 JSON_EXTRACT로 매 요청마다 스펙별 필드를 조합하는 방식은 중첩 배열 복원과 동적 SQL 복잡도가 높아 우선안에서 제외한다.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions