마스터에 담는 것
사실의 상위집합
Quoteapp 기준 + Foodil 사실 필드 흡수. 타입 컬럼(nullable) + extra jsonb.
이 페이지는 AFC 내부 검토 피드백을 기준(anchor)으로, 그 위에서 마스터 구조를 구체화합니다. 핵심 전제는 Quoteapp을 마스터 기준으로 둔다는 것 — 가장 많은 데이터가 쌓여 있고, 앱에 없는 오프라인 상품까지 포함하기 때문입니다. Foodil·CIPL은 마스터의 전체 또는 일부를 보유하는 소비자가 됩니다.
아래 설계는 모두 이 피드백에서 출발합니다. AFC가 확정·제시한 전제를 기준으로 두고, 미해결 질문에 답을 채워가는 방식입니다.
아래는 각 질문에 대한 답을, 위 전제를 기준으로 구체화한 것입니다.
“마스터가 모든 필드를 담는다”는 방향도 가능하지만, 그러면 등록 입력 부담이 커지고(피드백이 지적한 단점) 소유권도 어긋납니다(마케팅 카피를 AFC 운영이 작성). 그래서 필드를 두 층으로 나눕니다 — 사실(canonical fact)은 마스터, 표현·상업(presentation/commercial)은 채널 로컬. Quoteapp 마스터는 Foodil의 ‘사실’ 필드를 흡수하고, Foodil의 ‘표현’ 필드는 Foodil에 남깁니다.
마스터(Quoteapp 확장)는 사실 필드의 단일 진실입니다. 채널은 마스터 사실을 읽기전용으로 받고, 자기 오버레이(표현·상업)만 로컬에서 편집합니다.
| 필드 (피드백 예시 포함) | 분류 | 위치(소유) | 편집 위치 |
|---|---|---|---|
| 상품명 · 브랜드 · 규격 · 중량 · 카톤 · CBM | 사실 | 마스터 | 마스터(Quoteapp) |
| 원산지 · 기 수출 국가 · MOQ · 보관유형 · lead time (현재 Foodil) | 사실 | 마스터 (Foodil→흡수) | 마스터(Quoteapp) |
| HS code · 바코드 · 유통기한 · 원가 | 사실 | 마스터 | 마스터(Quoteapp) |
| 메인 이미지 · 영양성분 이미지 (대표) | 사실 | 마스터 | 마스터(Quoteapp) |
| rich editor description (마케팅 카피) | 표현 | Foodil 로컬 | Foodil |
| 추가 머천다이징 이미지 · SEO · 추천 | 표현 | Foodil 로컬 | Foodil |
| is_public · 스토어 배정 · 커미션 · 바이어별 가격 | 상업 | Foodil 로컬 | Foodil |
| 채널별 판매가 · 문서 설정 | 상업 | 채널 로컬 | 각 채널 |
편집 화면을 없애지 않습니다. 필드 층에 따라 권한만 분리합니다 — 사실 필드는 읽기전용, 채널 필드는 그대로 편집. 이렇게 하면 “한 번만 관리(드리프트 제거)”를 달성하면서도 채널 팀의 작업은 막지 않습니다.
즉 “편집 기능을 회수”가 아니라 master-fed 상품의 사실 필드만 잠그는 것이라 변경 범위가 작습니다.
동일/유사 상품이라도 병합하지 말고 매핑(연결)할 것을 권장합니다. 소유자가 다르고(AFC vs 셀러), 셀러 리스팅은 그들의 상업 오퍼이며, “유사”는 모호해서 자동 병합 시 오매칭·데이터 손실 위험이 큽니다.
AFC 마스터 상품과 셀러 리스팅은 각자 별도 레코드로 두고, 사람 검토를 거친 equivalence(동일 실물) 링크로만 연결합니다. 중복 리포트·비교·분석은 되지만 레코드는 융합하지 않습니다.
| 방식 | 효과 | 리스크 |
|---|---|---|
| 매핑(권장) 권장 | 중복 리포트 · AFC vs 셀러 비교 · 분석 · 소유권 유지 | 매칭 기준·검토 워크플로 필요 |
| 병합 | 단일 레코드 | 소유권 충돌 · 셀러 가격/카피 덮어씀 · 유사 오매칭 시 손실 |
향후 셀러가 붙는 canonical 카탈로그(아마존식)가 필요하면 그때 확장할 수 있습니다. 지금은 매핑으로 시작.
마스터는 사실 필드의 상위집합입니다 — Quoteapp 기준에 Foodil의 사실 필드(원산지·MOQ·보관유형·lead time·대표 이미지 등)를 흡수. 단, 표현·상업 필드는 채널 로컬로 남깁니다. 피드백이 지적한 입력 부담은 발행 시점 필수화로 해소합니다.
마스터엔 최소 필드로도 상품이 존재할 수 있습니다(오프라인 상품처럼). Foodil 발행 시점에만 채널 필수 필드를 요구하므로, 오프라인 상품에 Foodil 데이터를 강제하지 않습니다.
사실의 상위집합
Quoteapp 기준 + Foodil 사실 필드 흡수. 타입 컬럼(nullable) + extra jsonb.
표현 · 상업 = 로컬
Foodil product_overlay(master_product_id 키)에 rich description·머천다이징·가격정책.
발행 시점 필수화
마스터엔 최소 필드로 존재. 채널 필수 필드는 발행할 때만 요구.
왜 ‘전부 마스터’가 아닌가: 모든 채널 필드를 마스터에 넣으면 (1) 등록 시 입력 항목이 폭증하고(피드백 지적), (2) Foodil 마케팅 카피·머천다이징을 AFC 운영이 마스터에서 작성하게 되어 소유권이 어긋납니다. 그래서 사실만 마스터, 표현·상업은 채널이 균형점입니다.
AFC 기준대로 마스터의 데이터 출처(seed)는 Quoteapp입니다. 다만 마스터가 ‘사는 곳(home)’은 하드닝된 전용 core DB를 권장합니다 — 프로토타입(JSON 기반 Quoteapp)을 그대로 회사 카탈로그의 단일 진실로 승격하면 리스크가 큽니다. 작성 UI는 얇은 전용 어드민으로 시작하고, Quoteapp은 먼저 정식 DB로 하드닝한 뒤 시드/소비 역할을 맡깁니다. (‘출처 · home · 작성도구’는 분리된 결정입니다.)