CodeGym /행동 /ChatGPT Apps /Product Feed: 목적, 데이터 모델, 핵심 필드 및 정책

Product Feed: 목적, 데이터 모델, 핵심 필드 및 정책

ChatGPT Apps
레벨 14 , 레슨 1
사용 가능

1. Product Feed가 왜 필요한가

클래식 e‑commerce와 비교하면, Product Feed는 다음 사이의 어딘가에 있습니다.

  • 상품 “진열대”(가격, 재고, 링크, 미디어가 있는 카탈로그);
  • 그리고 머천트가 ChatGPT를 통해 어떤 SKU를 보여주고/판매할지 기술적으로 규정하는 계약.

OpenAI는 명시적으로, feed가 상품에 대한 단일한 진실의 원천으로서 검색, 추천, 그리고 체크아웃 데이터 준비가 이를 기반으로 한다고 말합니다.

일반적인 인터넷 쇼핑몰에서는 사용자가 스스로 페이지를 돌아다니며 카테고리를 넘기고 필터링합니다. AI‑commerce에서는 반대입니다. 사용자는 모델에게 “보드게임을 좋아하는 개발자 친구에게 줄 30달러 이하의 디지털 선물 추천해 줘”라고 말하기만 하면, ChatGPT가 여러분의 Product Feed에서 어떤 SKU가 적합한지, 어떤 순서로 보여줄지, 그리고 카드 UI와 Instant Checkout까지 어떻게 구성할지를 스스로 판단합니다.

따라서 Product Feed는 여러 과제를 한 번에 해결합니다.

첫째, ChatGPT에 검색용 구조화 데이터를 제공합니다. 모델은 상품 설명과 이름뿐 아니라 카테고리, 태그, 가격, 가용성, 로캘, 국가 제한 등을 함께 고려합니다.

둘째, 체크아웃을 위한 데이터 소스 역할을 합니다. ChatGPT가 checkout_session을 준비할 때, 피드에서 SKU ID, 가격, 통화, seller URL 등 상거래 정보를 가져갑니다.

마지막으로 Product Feed는 플랫폼과 여러분 사이의 형식화된 계약입니다. 여러분은 “이 목록의 SKU가 있고, 이 중 어떤 것은 검색(discovery)만 가능하며, 어떤 것은 Instant Checkout도 가능하다”고 명시적으로 알립니다.

이를 시각화하면 간단한 도식으로 정리할 수 있습니다.

flowchart TD
  A[GiftGenius DB] --> B[Feed Builder]
  B --> C["Product Feed (CSV/JSON/...)"]
  C --> D[OpenAI Ingestion]
  D --> E[검색 인덱싱 + 랭킹]
  E --> F[ChatGPT/Agent가 선물 추천]
  F --> G["Instant Checkout (ACP)"]

왼쪽은 이미 “실제” 카탈로그가 존재하는 내부 데이터베이스입니다. 오른쪽은 사용자에게 보이는 ChatGPT입니다. 가운데에는 Product Feed와 그 수집/인덱싱 메커니즘이 있습니다. 이 강의에서 다루는 모든 내용은 정확히 A와 D 사이에 위치합니다.

2. Product Feed의 형식과 ‘물리적 측면’

OpenAI의 사양은 파일 포맷에 꽤 유연합니다. TSV, CSV, XML, JSON을 지원하죠. 이는 기존 시스템(자체 모놀리스부터 Shopify까지)이 별다른 요령 없이 피드를 내보낼 수 있도록 하기 위한 설계입니다.

전형적인 흐름은 다음과 같습니다.

  • HTTPS 서버에 Product Feed 파일 또는 endpoint를 게시합니다.
  • 그 주소를 ChatGPT Merchants 포털에 등록합니다.
  • OpenAI가 주기적으로 피드를 가져가서 검증하고 상품을 인덱싱합니다.

문서에서는 피드를 정기적으로(10–15분마다도 가능) 업데이트하라고 강조합니다. 특히 세일이나 피크 기간에는 최신 가격과 재고를 사용자에게 보여주는 것이 중요합니다.

학습 예제인 GiftGenius에서는 TypeScript 개발자들에게 익숙한 JSON을 사용할 것입니다. 하지만 사양 레벨에서 OpenAI가 JSON에 묶여 있는 것은 아닙니다. 우리에게 편리할 뿐이죠.

가장 단순한 JSON 피드는 다음과 같을 수 있습니다.

[
  {
    "id": "gg-coffee-sub-1m-usd",
    "title": "커피 1개월 구독",
    "description": "개발자를 위한 원두 커피 월간 박스.",
    "price": 2900,
    "currency": "usd",
    "availability": "in_stock",
    "link": "https://giftgenius.app/gifts/coffee-subscription-1m",
    "image_link": "https://cdn.giftgenius.app/images/coffee-1m.png",
    "enable_search": true,
    "enable_checkout": true
  }
]

실제로는 더 많은 필드가 존재하며, 일부는 필수이고 일부는 권장 또는 옵션입니다. 구체적인 구성은 이어서 살펴보겠습니다.

3. 제품 vs 옵션(SKU): 모델링 방법

가장 자주 나오는 질문 중 하나는 다음입니다. “Product Feed에서 하나의 상품이 가진 사이즈, 패키지, 구독 기간 같은 옵션은 어떻게 표현하나요?”

Product Feed 사양은 행/레코드 단위를 사용하며, 각 레코드가 판매 가능한 하나의 구성(컨피규레이션)을 설명합니다. 업계에서 권장하고 OpenAI 피드와도 잘 맞는 아키텍처 패턴은 다음과 같습니다. 각 개별 구성(사이즈, 구독 기간, 요금제, 지역)은 피드의 별도 레코드, 즉 별도 SKU입니다.

기본 제품은 내부 도메인 모델에 존재하고, 피드에서는 SKU 레벨로 작업합니다.

예를 들어 어떤 서비스에 1개월, 3개월, 6개월 구독이 있다면, product feed 관점에서는 모두 다른 SKU입니다. 하나의 서비스를 20가지 조건으로 판매할 수 있다면, product feed에는 20개의 SKU가 있어야 합니다.

TypeScript로 표현하면 대략 다음과 같습니다.

// GiftGenius 내부 도메인 모델
export interface GiftProduct {
  id: string;              // product_123
  name: string;
  description: string;
  baseImageUrl: string;
}

// Product Feed로 나가는 SKU
export interface GiftSkuFeedItem {
  id: string;              // product_123_usd_1m
  productId: string;       // GiftProduct.id에 대한 참조
  title: string;
  description: string;
  price: number;           // 최소 단위(센트)
  currency: string;        // "usd"
}

GiftGenius 내부에서는 GiftProductGiftSkuFeedItem 사이가 1:N 관계일 수 있습니다. 피드에는 이미 “평평한” SKU 목록을 제공합니다.

ChatGPT가 어떤 SKU가 하나의 기본 제품에 속하는지(예: 1/3/12개월 구독)를 이해할 수 있도록, item_group_id 같은 그룹화 필드를 자주 사용합니다. 다만 이것은 아키텍처 패턴이지 표준의 강제 요구사항은 아닙니다.

예를 들어:

{
  "id": "gg-coffee-sub-1m-usd",                // 1개월 구독 SKU
  "item_group_id": "gg-coffee-sub",            // 여러분의 제품 ID
  "title": "커피 구독 — 1개월",
  "price": 2900,
  "currency": "usd",
  "enable_search": true,
  "enable_checkout": true
}

3개월 구독의 경우:

{
  "id": "gg-coffee-sub-3m-usd",                // 3개월 구독 SKU
  "item_group_id": "gg-coffee-sub",            // 동일한 제품 ID
  "title": "커피 구독 — 3개월",
  "price": 7900,
  "currency": "usd",
  "enable_search": true,
  "enable_checkout": true
}

이런 접근은 모델과 주문 생성 시 백엔드 모두에 유리합니다. SKU ID가 항상 사용자가 구매한 정확한 구성을 찾을 수 있는 유일 키가 되기 때문입니다.

4. Product Feed의 필수 필드와 UX에 미치는 영향

OpenAI의 Product Feed 사양은 필드를 대략 세 그룹으로 나눕니다. 필수(required), 권장(recommended), 옵션(optional).

정확한 명칭과 목록은 항상 최신 문서를 확인해야 하지만, 학습 목적상 다음과 같은 “미니멀” 셋을 참고할 수 있습니다.

필드 용도 없으면 어떻게 되나
id
머천트 범위에서의 SKU 고유 식별자 상품을 명확히 식별할 수 없음
title
카드용 짧은 이름 모델이 상품을 파악하기 어려움
description
확장 설명 응답이 덜 구체적이고 개인화 품질 저하
price
최소 통화 단위의 가격 체크아웃 준비 불가
currency
ISO 4217 통화 코드(보통 소문자) 플랫폼이 어떤 통화로 계산할지 알 수 없음
link
머천트의 상품 페이지 URL 사용자가 여러분의 사이트로 이동할 수 없음
availability
재고 상태(in_stock, out_of_stock 등) 실제로는 구매 불가한 상품이 노출될 수 있음
enable_search
검색에 사용할 수 있는지 여부 true가 아니면 검색 결과에 노출되지 않음
enable_checkout
Instant Checkout으로 구매 가능한지 여부 discovery/link‑out만 가능

중요한 뉘앙스: enable_searchenable_checkout은 논리적으로 동작 모드를 구분합니다.

enable_search = true, enable_checkout = false인 경우, 상품은 검색 결과에 포함되지만 구매 시에는 Instant Checkout이 아니라 여러분의 링크(link)를 통해 여러분의 사이트로 이동합니다.

반대로 enable_checkout = true라면, 다른 조건(지원 지역, 통화, 유효한 ACP 백엔드 등)이 충족될 때, 상품을 ChatGPT 안에서 한두 번의 클릭으로 바로 구매할 수 있어 전환율이 크게 올라갑니다.

다음은 GiftGenius의 “최소 체크아웃 가능” 객체 예시입니다.

{
  "id": "gg-dev-notebook-plain-usd",
  "title": "미니멀 개발자용 노트",
  "description": "검정색, 무지, 120페이지. 손글씨로 스펙 쓰는 분을 위해.",
  "price": 1500,
  "currency": "usd",
  "availability": "in_stock",
  "link": "https://giftgenius.app/gifts/dev-notebook",
  "image_link": "https://cdn.giftgenius.app/images/dev-notebook.png",
  "enable_search": true,
  "enable_checkout": true
}

참고: 예시에서도 image_link를 추가했습니다. 형식상 권장 필드일 수 있지만, 이미지가 없으면 UX가 크게 나빠집니다.

5. 권장 및 옵션 필드: 피드를 더 매력적으로

필수 필드는 “일단 동작하게” 해줍니다. 하지만 거기에만 멈추면, 멋진 AI 진열대가 아니라 회계용 최소 유효 CSV에 가깝습니다.

권장 필드에는 보통 다음이 포함됩니다.

  • 대표 및 추가 이미지 URL;
  • 상품 카테고리(종종 “gifts > experiences > online courses” 같은 택소노미 기반);
  • 브랜드/머천트명;
  • 색상, 사이즈, 소재 같은 속성;
  • 성인용 플래그, 연령 제한 등.

상품을 풍부하게 설명할수록 모델이 더 의미 있는 답을 생성합니다. 예를 들어, 노트가 재생지로 만들어졌고 “지구를 생각하는 개발자”에게 어울린다고 명시하면, ChatGPT는 친환경 선물을 찾는 사용자에게 이를 의식적으로 추천할 수 있습니다.

GiftGenius의 해당 SKU를 이렇게 확장할 수 있습니다.

{
  "id": "gg-dev-notebook-plain-usd",
  "title": "에코 개발자용 노트",
  "description": "미니멀한 무지노트, 재생지 120페이지.",
  "price": 1500,
  "currency": "usd",
  "availability": "in_stock",
  "link": "https://giftgenius.app/gifts/eco-dev-notebook",
  "image_link": "https://cdn.giftgenius.app/images/eco-dev-notebook.png",
  "category": "gifts > office > notebooks",
  "brand": "GiftGenius Originals",
  "enable_search": true,
  "enable_checkout": true
}

categorybrand 같은 추가 속성은 검색 품질을 개선할 뿐 아니라 분석에도 도움이 됩니다. ChatGPT에서 어떤 카테고리가 전환이 잘 되는지 확인할 수 있습니다.

옵션 필드는 매우 특수한 시나리오(예: 곧 다룰 지리 기반 가격이나 커스텀 메타데이터)와 관련된 경우가 많습니다. “체크리스트 채우기”가 아니라 프로젝트의 성숙도에 맞춰 추가하세요.

6. 상업 플래그와 discovery‑only 모드

enable_searchenable_checkout의 로직을 다시 한 번 분명히 하겠습니다. 이는 다음 강의(ACP, Instant Checkout)로 이어지는 핵심 연결 고리입니다.

이제 막 ChatGPT 머천트로 시작한다고 가정해 봅시다. 선물 카탈로그는 있지만, ACP 백엔드와 Delegated Payment는 아직 개발 중입니다. 그럼에도 ChatGPT가 여러분의 SKU를 찾아 사용자에게 보여주고, 결제는 여러분의 사이트에서 진행되길 원할 수 있습니다.

이 경우 여러분은 다음과 같이 합니다.

  • 필요한 SKU에 대해 enable_search = true로 Product Feed를 게시합니다.
  • ACP 통합을 구현하고 인증하기 전까지 enable_checkout = false로 둡니다.

그러면 ChatGPT는 사용자 응답에 여러분의 선물을 포함하고 카드 UI를 보여주며 “GiftGenius 사이트로 이동” 링크를 제안하지만, 내부 Instant Checkout UI는 구성하지 않습니다.

Agentic Checkout과 Delegated Payment를 구현하면, 특정 상품을 “Instant Checkout 준비 완료” 모드로 전환할 수 있습니다. enable_checkout = true로 설정하고 가격, 통화, seller URL 등의 데이터 요건을 모두 충족하면 됩니다.

사양 레벨에서는 Product Feed의 필드가 line_itemscheckout_session 내 금액을 채우는 데 사용됩니다.

결국 피드는 미세 조정을 위한 지렛대가 됩니다. 어떤 SKU를 어떤 형태로, ChatGPT가 여러분을 대신해 판매할 수 있는지 정하는 것이죠.

7. 로캘, 통화, 지역 및 멀티‑리전 가격

세상은 en-US와 달러로만 구성되지 않습니다. 로컬라이제이션 모듈에서 이미 localeuserLocation이 비즈니스 로직에 어떻게 영향을 주는지 다뤘습니다. 여기서는 그 중요성이 더 커집니다. 독일의 가격이 미국과 다를 수 있고, 어떤 선물은 국가별로 판매 자체가 불가할 수 있습니다.

Product Feed 사양은 이를 몇 가지 메커니즘으로 다룹니다.

첫째, 통화: currency는 유효한 ISO 4217 코드여야 합니다(예: usd, eur, gbp).

둘째, 지역별 가격과 가용성을 설명하는 필드를 사용할 수 있습니다. 문서에는 geo_price와 ISO 3166 기반의 지역 코드가 연관된 예시가 제시됩니다.

아키텍처적으로 두 가지 기본 접근이 있습니다.

접근 1: 지역별 개별 피드.

  • product-feed-us-en.json — 미국용;
  • product-feed-de-de.json — 독일용;
  • product-feed-br-pt.json — 브라질용.

각 피드에는 해당 지역/로캘에 맞춘 SKU가 담깁니다. ChatGPT 입장에서는 단순하지만, 여러 피드를 유지하는 여러분의 작업량이 늘어납니다.

접근 2: geo 필드를 포함한 단일 피드.

각 레코드 안에 가격 배열이나 추가 속성을 보관합니다.

{
  "id": "gg-dev-notebook-multi",
  "title": "에코 개발자용 노트",
  "description": "클린 코드와 지구를 향한 당신의 애정을 응원합니다.",
  "prices": [
    { "region": "US", "currency": "usd", "price": 1500 },
    { "region": "DE", "currency": "eur", "price": 1400 }
  ],
  "availability_by_region": [
    { "region": "US", "availability": "in_stock" },
    { "region": "DE", "availability": "out_of_stock" }
  ],
  "enable_search": true,
  "enable_checkout": true
}

멀티‑리전 필드의 구체 구조는 사양 버전에 따라 달라질 수 있지만, 핵심은 동일합니다. 해당 SKU가 어느 국가에 존재하고, 그곳에서 얼마인지를 플랫폼이 이해할 수 있어야 합니다.

GiftGenius 관점에서는 다음 매핑을 잘 설계하는 것이 중요합니다.

  • ChatGPT가 알고 있는 localeuserLocation;
  • 그리고 피드에서 어떤 부분의 가격과 텍스트를 선택할지.

상업 시나리오에서는 보통 “전 세계용 단일 레코드”보다는 국가별로 다른 SKU를 두는 편이 일반적입니다. 세금, 정책, 상품 제한을 더 쉽게 준수할 수 있기 때문입니다.

8. 데이터 품질과 정책: 이것 없이는 Instant Checkout이 성공하지 못합니다

Product Feed는 형식뿐 아니라 데이터 품질과 OpenAI 정책 준수에 관한 것입니다.

품질 측면에서 OpenAI는 명확히 다음을 요구합니다.

  • 정확하고 안정적인 식별자;
  • HTTPS와 200 응답을 반환하는 유효한 URL;
  • 가격과 통화의 일관성;
  • 최신 재고(실제로는 없는 상품을 in_stock으로 표시하지 않을 것).

또한 텍스트 길이에 대한 요구사항도 있습니다. 예를 들어, title은 지나치게 길면 안 되고(수백 자), description에도 합리적인 상한(수천 자)이 있어 카드가 깔끔하게 보이도록 합니다.

별도의 블록으로 Prohibited Products Policy가 있습니다. Instant Checkout 또는 ChatGPT 전반에서 판매할 수 없는 상품/서비스 카테고리 목록입니다. 불법 상품, 무기, 일부 의료 서비스 등은 자명한 예시죠. 구체 내용은 항상 최신 정책을 확인해야 하며, 우리에게 중요한 점은 다음입니다. Product Feed는 형식뿐 아니라 콘텐츠의 적합성도 검사를 받습니다.

카탈로그에 애매한 카테고리(예: 주류, 도박, 아동 관련 항목)가 있다면 특히 주의해야 합니다. 종종 이런 항목은 enable_checkout = false로 두고, 법적 장치를 갖춘 자체 사이트에서만 판매하는 편이 간단합니다.

9. 실습: GiftGenius를 위한 최소 Product Feed 만들기

이제 배운 내용을 적용해 GiftGenius의 세 가지 SKU를 위한 간단한 피드를 만들어 봅시다. 다음이 있다고 가정합니다.

  1. 에코 개발자용 노트.
  2. 커피 1개월 구독.
  3. “성인을 위한 TypeScript” 강좌의 기프트 카드.

먼저 피드 생성을 위한 TypeScript 타입을 정의합니다.

export interface GiftGeniusFeedItem {
  id: string;
  title: string;
  description: string;
  price: number;         // 센트 단위
  currency: "usd" | "eur";
  availability: "in_stock" | "out_of_stock";
  link: string;
  image_link?: string;
  enable_search: boolean;
  enable_checkout: boolean;
}

이제 몇 개의 요소가 있는 배열을 코드에서 만들고, 이를 JSON으로 직렬화합니다.

export const giftGeniusFeed: GiftGeniusFeedItem[] = [
  {
    id: "gg-eco-notebook-usd",
    title: "에코 개발자용 노트",
    description: "재생지로 만든 미니멀 무지노트.",
    price: 1500,
    currency: "usd",
    availability: "in_stock",
    link: "https://giftgenius.app/gifts/eco-dev-notebook",
    image_link: "https://cdn.giftgenius.app/images/eco-dev-notebook.png",
    enable_search: true,
    enable_checkout: true
  },
  {
    id: "gg-coffee-sub-1m-usd",
    title: "개발자용 커피 구독 — 1개월",
    description: "매달 받는 원두 커피 박스. 마감과도 잘 어울립니다.",
    price: 2900,
    currency: "usd",
    availability: "in_stock",
    link: "https://giftgenius.app/gifts/coffee-subscription-1m",
    image_link: "https://cdn.giftgenius.app/images/coffee-1m.png",
    enable_search: true,
    enable_checkout: true
  },
  {
    id: "gg-ts-course-gift-usd",
    title: "TypeScript 강좌 기프트 카드",
    description: "이제는 generics를 제대로 이해하고 싶은 개발자를 위한 온라인 코스.",
    price: 9900,
    currency: "usd",
    availability: "in_stock",
    link: "https://giftgenius.app/gifts/ts-course",
    image_link: "https://cdn.giftgenius.app/images/ts-course.png",
    enable_search: true,
    enable_checkout: false // 지금은 discovery만
  }
];

그다음 이 구조에서 product-feed.json 파일을 N분마다 생성해 HTTPS 서버에 배포하는 간단한 유틸리티를 만들 수 있습니다.

import { writeFile } from "node:fs/promises";
import { giftGeniusFeed } from "./feed-data";

// 가장 단순한 JSON 피드 생성기
async function buildProductFeed() {
  const json = JSON.stringify(giftGeniusFeed, null, 2);
  await writeFile("public/product-feed.json", json, "utf8");
}

buildProductFeed().catch(console.error);

물론 실제 프로젝트에서는 전체 피드를 코드에 두지 않습니다. 대신 DB에서 데이터를 가져옵니다. 하지만 처음에는 이렇게 학습용 예제를 구성해 파이프라인(생성 → 배포 → 검증)을 테스트해 보는 것이 유용합니다.

10. 안티‑예시: “나쁜” Product Feed는 이렇게 보입니다

사양과 UX 요구를 더 잘 체감하려면, 형식상 거의 동작은 하지만 실제로 문제를 유발하는 예를 보는 것이 좋습니다.

{
  "id": "1",
  "title": "선물",
  "description": "멋진 선물",
  "price": 12.333333,
  "currency": "usdollars",
  "availability": "yes",
  "link": "http://giftgenius.local/gift/1",
  "enable_search": "true",
  "enable_checkout": "maybe"
}

여기에는 여러 문제가 한꺼번에 보입니다.

첫째, id = "1"은 불안정하고 정보가 빈약한 식별자입니다. DB 마이그레이션이나 샤딩을 도입하면 이런 ID는 쉽게 부서집니다. 머천트 범위에서 고유하고 의미 있는, 충분히 긴 ID를 사용하는 편이 낫습니다.

둘째, price가 끝이 없는 소수로 표기되어 있습니다. 사양과 결제 시스템은 보통 소수점 문제와 반올림 오류를 피하기 위해 최소 통화 단위(센트, 페니 등)의 정수를 기대합니다.

셋째, currency = "usdollars"availability = "yes"는 기대 포맷(ISO 4217 및 허용 상태 목록)에 맞지 않습니다.

넷째, linkhttp이고 로컬 도메인을 가리킵니다. 실제 프로덕션에서는 둘 다 용납되지 않습니다. 사양은 공개 접근 가능한 HTTPS를 명시적으로 요구합니다.

다섯째, enable_searchenable_checkout는 불리언이어야 합니다. 문자열이면 OpenAI 파서가 피드를 거부하거나 기본값으로 강제 변환할 수 있고, 그 결과는 여러분을 당황하게 만들 수 있습니다.

이런 문제는 피드 검증에서 바로 실패(거부)로 이어질 수도 있고, 더 불편하게는 피드가 형식상 수용되지만 일부 SKU가 무시되거나 의도와 다르게 동작할 수도 있습니다. 그래서 자체 측의 내부 검증에 투자할 가치가 있습니다.

11. Product Feed 작업 시 흔한 실수

실수 1: 피드를 “한 번 내보내는 CSV”로 생각한다.
가끔 팀은 Product Feed를 “통합용으로 한 번 생성하고 잊어버리는” 파일로 오해합니다. AI‑commerce에서는 그렇지 않습니다. 피드는 정기적으로 업데이트되어야 하는 살아 있는 진실의 원천입니다. 가격을 바꾸거나, 상품을 내리거나, 프로모션을 시작한다면, 그 모든 것이 제때 피드에 반영되어야 합니다. 그렇지 않으면 ChatGPT는 이미 없는 상품이나 옛 가격을 추천하고, 사용자는 당연히 불만을 갖게 됩니다.

실수 2: 제품 모델과 SKU를 혼동한다.
반(anti)패턴으로, 하나의 기본 제품에 많은 옵션이 있을 때 이를 피드의 단일 레코드에 “size1/size2/size3”이나 “duration1/duration2” 같은 필드로 억지로 담으려는 경우가 있습니다. 그 결과 모델은 무엇이 실제 판매 단위인지 이해하지 못하고, 여러분의 ACP 백엔드는 체크아웃 시점에 이 필드를 풀어내느라 고생합니다. 훨씬 단순하고 안정적인 방법은 “SKU 하나당 피드 레코드 하나”입니다. 옵션이라도 말이죠.

실수 3: 로캘과 지역을 무시한다.
첫 MVP에서 개발자들이 모든 항목에 currency = "usd", enable_checkout = true를 설정하고, Instant Checkout이 지역에서 지원되는지나 어떤 상품이 국가별 정책/법으로 금지되는지 고려하지 않는 경우가 많습니다. 이후 새 시장에 진출하려면 가격이 맞지 않거나 세금이 반영되지 않아 모든 것이 깨집니다. 처음부터 SKU를 지역과 통화에 묶는 것이 더 낫습니다. 당장은 시장이 하나뿐이어도요.

실수 4: 설명을 과거의 SEO 텍스트처럼 다룬다.
일부 팀은 웹사이트의 낡은 설명(키워드/로봇용)을 그대로 Product Feed에 복사합니다. ChatGPT에는 독이 될 수 있습니다. 모델은 글쓰기를 잘합니다. 그보다는 구조화된, 정확하고 솔직한 사실이 훨씬 중요합니다. 장황한 마케팅 문구로 description을 채우기보다, 간결하고 핵심 위주로 작성하세요.

실수 5: 자체적으로 피드를 검증하지 않는다.
OpenAI 측 검증에만 의존하면 마감 전날 밤을 망치게 됩니다. 필드 스키마, 허용 값, URL/통화 포맷을 점검하는 간단한 검증기를 백엔드나 CI에 두세요. TypeScript에서도 Zod나 자체 체크로 충분히 구현할 수 있습니다. 그러면 프로덕션에 올리기 전에 문제를 잡을 수 있습니다.

실수 6: Product Feed에 “있는 건 다” 넣는다.
“혹시 모르니 다 넣자”는 생각으로 수천 개 SKU를 피드에 쑤셔 넣고 싶을 수 있습니다. 실제로는 디버깅, 분석, 품질 관리 모두를 어렵게 만듭니다. 품질을 자신하고 실제로 ChatGPT로 판매하려는 카테고리와 SKU만으로 시작하는 편이 훨씬 현명합니다. 나머지는 discovery 모드로 두거나 통합을 아예 하지 않아도 됩니다.

실수 7: Product Feed와 ACP 백엔드를 동기화하지 않는다.
피드와 ACP API는 한 쌍입니다. 피드에 새 SKU가 생겼는데 백엔드가 아직 이를 판매할 줄 모르거나, 반대로 피드에서 SKU를 제거했는데 백엔드가 여전히 존재한다고 믿으면, 비동기화와 복잡한 버그, 그리고 지원 티켓 폭탄을 맞게 됩니다. 좋은 관례는 단일 도메인 카탈로그 모델을 갖고, 이를 피드 생성과 체크아웃 처리 모두에 사용하도록 하는 것입니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION