프로젝트

일반

사용자정보

Actions

기능 #785

진행중

기능 #784: [프레임워크] 테마형 캠페인 데이터 주도화 (카탈로그 라우팅 + 어드민 저작)

[데이터모델] theme_config 스키마 및 활성 테마 카탈로그(ACTIVE_CAMPAIGN_THEMES) 설계·확정

기능 #785: [데이터모델] theme_config 스키마 및 활성 테마 카탈로그(ACTIVE_CAMPAIGN_THEMES) 설계·확정

민찬 김이(가) 약 14시간 전에 추가함. 약 13시간 전에 수정됨.

상태:
진행
우선순위:
보통
담당자:
시작일:
2026/07/01
완료일:
진척도:

70%

추정시간:

설명

h2. 목적
테마를 데이터로 표현하는 스키마를 확정한다. 이후 모든 하위일감의 기반.

h2. 작업

  • theme_config 아이템 스키마 설계 (재사용: master_table pk="CAMPAIGN_THEME", sk=theme_id).
    ** kind/templateType, use_yn/startAt/endAt(스케줄), copy(i18n key), assets(guideImageKey/resultImagePrefix), questions[], resultMapping, ai(command/promptKey), recommend(브랜드소스/개수 = #677), eventKeyPrefix, trigger_keywords.
  • ROI 주입용 활성 카탈로그 ACTIVE_CAMPAIGN_THEMES(env_table) 설계 (theme_id, trigger_keywords, enabled, 기간).
  • 문자열은 원문 대신 i18n key 로 참조하는 규칙 확정.

h2. 완료기준

  • 스키마 문서 확정 + 예시 레코드 1건(바캉스MBTI) 작성.
  • 신규 테이블 필요 여부 판단(가능하면 master_table/env_table 재사용).

민찬 김이(가) 약 13시간 전에 변경 Actions #1

  • 상태을(를) 신규에서 진행(으)로 변경되었습니다.
  • 진척도을(를) 0에서 70(으)로 변경되었습니다.

스키마 확정 (설계 + 적대적 교차검증 반영)

Wave 0 워크플로(분석3 + 설계1 + 적대적검증2)로 도출. 검증 2렌즈 모두 needs-revision → 아래는 수정 반영본.

저장 (신규 테이블 없음)

  • theme_config: env_table, pk="theme_config", sk=<theme_id> (예 "vacance_mbti")
  • 활성 카탈로그: env_table, pk="theme_config", sk="active" (경량 인덱스, themes[] 요약만)
  • 문구: 원문 저장 X, i18n key만 참조. 실제 값은 pk="i18n", sk= translation 맵.

theme_config 주요 필드 (검증 반영)

  • 식별/스케줄: theme_id, use_yn(bool), startAt/endAt(문자열 범위필터), priority(int), branch("ALL" 대문자 통일), target_lang
  • 라우팅 3분리(중요): roiTheme(LLM이 실제 반환하는 enum값 — 이관 시 type_test/well_wishes 유지), kind(렌더 종류), template(TemplateSelector 케이스명)
  • triggerKeywords: { : [키워드...] } (ROI 프롬프트 보간 + initUtterance 매칭)
  • i18nKeys: { label, heroTitle, resultTitle, resultSubtitle, shareButton, promptTypePrefix, ... } (평면 dotted key. i18next keySeparator 처리 실측 확정 필요)
  • assets: { guidePrefix, resultPrefix, resultPattern="{prefix}{code}.png", shareImage }
  • questions: [{ id, i18nKey, options:[{ code, i18nKey }] }] (덕담형은 wishes:{targets[],moods[]} 별도 블록)
  • resultTypeMap: { "<옵션code 연결값=실제 파일 code>": { short, typeNameI18nKey } } (MBTI 16 vs A/B 8 fallback 규칙 명시)
  • ai (단일 아님, phase 맵): { intro?:{command,promptKey}, main:{command,promptKey}, sub?:[{command,promptKey}] } — 신규는 command="streaming_ai_theme_campaign"
  • productReco(#677): { enabled, brandSource(aiResult|fixed|opensearchTheme), fixedBrands[], vectorQuery, keywordPrefix, selectPrompt, pinnedCards:[{portalBrandNm,moveUrl,moveMUrl}], count, size }
  • events(명시 매핑, prefix 파생 금지): { link:{key,name,label}, image:{key,name,label}, copy:{...} } — 기존 키(personality_type_2026_link 등) 그대로 재현해 집계 연속성 유지
  • share: { type(fixedUrl|resultText), baseUrl, initUtterance, encoding }

ACTIVE_CAMPAIGN_THEMES (sk="active")

themes[]: { id, roiTheme, kind, triggerKeywords, enabled, startAt, endAt, priority }, updated_at

검증이 확정한 선행조건 (하위일감 스코프 보정)

  • #786: ai-backend find_first_roi_theme 시그니처/프롬프트 + ai_first_roi_api destructure 3곳 개정으로 activeCampaignThemes 주입. 제네릭 campaign 버킷. roiTheme는 enum 유지.
  • #787: promptKey 소비하는 streaming_ai_theme_campaign 신규(필수) + get_theme_config + use_yn/기간/branch 활성필터 함수 신규(get_i18n 단순재사용 불가).
  • #788: GlobalChatConsult switch 체인에 kind/template 데이터기반 dispatch 신설 + personality_type_test 핸들러의 하드코딩 오케스트레이션(벡터쿼리/키워드prefix/선택프롬프트/강제삽입카드)을 productReco 필드로 이전.
  • #790: save_theme_config + 중첩 저작 폼 신규(범용 에디터 부재).
  • #791: i18n 병합은 반드시 client get→merge→update_i18n (update_i18n은 전량 overwrite).

미해결 결정(사용자 확인 필요)

  • 명절유형/덕담을 지금 데이터로 이관할지(완전통합, #792 확대) vs 신규 테마만 프레임워크로(명절/덕담 현행 유지, 소규모·저위험) — 이 결정이 #786/#788/#792 스코프를 크게 좌우.
  • i18n dotted key ↔ i18next 중첩 해석 정합성 실측 후 keySeparator 정책 확정.

전체 스펙/예시레코드/검증 상세는 워크플로 산출물 기준(오케스트레이터 보관).

Actions

내보내기 PDF Atom