내부 살펴보기: Universal Commerce Protocol (UCP)

발행: (2026년 1월 28일 오전 09:04 GMT+9)
11 분 소요

Source: Google Developers Blog

Source: http://ucp.dev/

UCP란 무엇인가?

Universal Commerce Protocol (UCP)는 차세대 에이전트형 커머스를 구동하도록 설계된 오픈‑소스 표준입니다. 공통 언어와 기능 원시(primitives)를 정의함으로써, UCP는 소비자 인터페이스, 기업, 결제 제공자 간에 원활한 커머스 여정을 가능하게 합니다. 기존 소매 인프라와 함께 작동하며, 안전한 에이전트형 결제를 위한 Agent Payments Protocol (AP2)과도 호환됩니다. 또한 UCP는 API, Agent2Agent (A2A), Model Context Protocol (MCP)를 통한 유연한 통합을 제공합니다.

UCP는 Google이 Shopify, Etsy, Wayfair, Target, Walmart 등 업계 리더와 협업하여 개발했으며, Adyen, American Express, Best Buy, Flipkart, Macy’s, Mastercard, Stripe, The Home Depot, Visa, Zalando 등 20개 이상의 글로벌 파트너가 인증했습니다.

UCP는 전체 커머스 생태계에 혜택을 주도록 설계되었습니다

  • 기업을 위해: Google Search의 AI Mode와 Gemini와 같은 소비자 인터페이스에 제품을 노출합니다. 비즈니스 로직 소유권을 유지하고 Merchant of Record 역할을 유지합니다. “임베디드 옵션”을 통해 초기부터 완전히 맞춤화된 체크아웃 경험을 제공할 수 있습니다.
  • AI 플랫폼을 위해: 표준화된 API를 사용해 청중에게 에이전트형 쇼핑을 제공하면서 MCP, A2A 또는 기존 에이전트 프레임워크를 유연하게 활용할 수 있습니다.
  • 개발자를 위해: 진화하는 커뮤니티 주도 오픈‑소스 표준에 기여합니다. 우리와 함께 차세대 디지털 커머스를 구축하세요.
  • 결제 제공자를 위해: 개방형 모듈식 결제 핸들러 설계는 상호 운용성을 가능하게 하고, 사용자 동의에 대한 암호학적 증명을 기반으로 하는 보편적인 결제를 증명합니다.
  • 소비자를 위해: 발견부터 구매까지의 마찰을 줄이고, 멤버 혜택을 누리며, 안심하고 쇼핑할 수 있습니다.

새로운, 유연한 표준이 필요한 이유

대화형 경험은 실시간 재고 확인, 동적 가격 책정, 현재 컨텍스트 내 즉시 거래를 요구합니다. 기존 기술 스택은 N × N 통합 병목을 만들며, 각 인터페이스마다 맞춤형 연결을 강요합니다.

UCP는 전체 커머스 여정(발견부터 주문 관리까지)을 표준화하는 단일하고 안전한 추상화 레이어를 제공함으로써 이 병목을 해소합니다:

  • 통합 단순화: N × N 복잡성을 하나의 통합 지점으로 축소합니다.
  • 공통 언어: 발견, 기능 스키마, 전송 바인딩을 표준화해 플랫폼 간 상호 운용성을 확보합니다.
  • 확장 가능한 아키텍처: 새로운 에이전트형 경험과 수직 분야에 맞춰 확장 가능한 기능 및 확장성을 제공합니다.
  • 보안 우선 접근: 토큰화된 결제와 검증 가능한 자격 증명을 통해 에이전트와 백엔드 간 통신을 보호합니다.

UCP 개요

UCP Diagram (Detailed)

UCP는 소비자 인터페이스(예: Search의 AI Mode, Gemini)가 제품 발견, 장바구니 체크아웃 등 비즈니스 백엔드와 연결할 수 있는 명확한 언어를 제공합니다. 기업은 서비스와 기능(예: 체크아웃, 제품 발견)을 노출하고, 에이전트는 이를 동적으로 탐색할 수 있습니다. 결제는 인스트루먼트(소비자가 사용하는 것)와 핸들러(결제 처리자)를 분리하여 모델링하며, A2A, MCP, API 등 다양한 전송 방식을 지원합니다.

How it works

비즈니스 스토어와 에이전트를 예시로 살펴보겠습니다.

2.1 Set up the business server and add sample products

mkdir sdk
git clone https://github.com/Universal-Commerce-Protocol/python-sdk.git sdk/python
pushd sdk/python
uv sync
popd
git clone https://github.com/Universal-Commerce-Protocol/samples.git
cd samples/rest/python/server
uv sync

샘플 제품이 들어있는 로컬 SQLite 데이터베이스를 생성합니다:

mkdir /tmp/ucp_test
uv run import_csv.py \
    --products_db_path=/tmp/ucp_test/products.db \
    --transactions_db_path=/tmp/ucp_test/transactions.db \
    --data_dir=../test_data/flower_shop

2.2 Start the business server

uv run server.py \
   --products_db_path=/tmp/ucp_test/products.db \
   --transactions_db_path=/tmp/ucp_test/transactions.db \
   --port=8182 &
SERVER_PID=$!

2.3 Discover business capabilities with your agent

export SERVER_URL=http://localhost:8182
export RESPONSE=$(curl -s -X GET $SERVER_URL/.well-known/ucp)
echo $RESPONSE

Sample response

{
  "ucp": {
    "version": "2026-01-11",
    "services": {
      "dev.ucp.shopping": {
        "version": "2026-01-11",
        "spec": "https://ucp.dev/specs/shopping",
        "rest": {
          "schema": "https://ucp.dev/services/shopping/openapi.json",
          "endpoint": "http://localhost:8182/"
        }
      }
    },
    "capabilities": [
      { "name": "dev.ucp.shopping.checkout", "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping/checkout", "schema": "https://ucp.dev/schemas/shopping/checkout.json" },
      { "name": "dev.ucp.shopping.discount", "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping/discount", "schema": "https://ucp.dev/schemas/shopping/discount.json", "extends": "dev.ucp.shopping.checkout" },
      { "name": "dev.ucp.shopping.fulfillment", "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping/fulfillment", "schema": "https://ucp.dev/schemas/shopping/fulfillment.json", "extends": "dev.ucp.shopping.checkout" }
    ]
  },
  "payment": {
    "handlers": [
      {
        "id": "shop_pay",
        "name": "com.shopify.shop_pay",
        "version": "2026-01-11",
        "spec": "https://shopify.dev/ucp/handlers/shop_pay",
        "config_schema": "https://shopify.dev/ucp/handlers/shop_pay/config.json",
        "instrument_schemas": ["https://shopify.dev/ucp/handlers/shop_pay/instrument.json"],
        "config": { "shop_id": "d124d01c-3386-4c58-bc58-671b705e19ff" }
      },
      {
        "id": "google_pay",
        "name": "google.pay",
        "version": "2026-01-11",
        "spec": "https://example.com/spec",
        "config_schema": "https://example.com/schema",
        "instrument_schemas": ["https://ucp.dev/schemas/shopping/types/gpay_card_payment_instrument.json"],
        "config": {
          "api_version": 2,
          "api_version_minor": 0,
          "merchant_info": {
            "merchant_name": "Flower Shop",
            "merchant_id": "TEST",
            "merchant_origin": "localhost"
          },
          "allowed_payment_methods": [
            {
              "type": "CARD",
              "parameters": {
                "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
                "allowedCardNetworks": ["VISA", "MASTERCARD"]
              },
              "tokenization_specification": [
                {
                  "type": "PAYMENT_GATEWAY",
                  "parameters": [
                    { "gateway": "example", "gatewayMerchantId": "exampleGatewayMerchantId" }
                  ]
                }
              ]
            }
          ]
        }
      },
      {
        "id": "mock_payment_handler",
        "name": "dev.ucp.mock_payment",
        "version": "2026-01-11",
        "spec": "https://ucp.dev/specs/mock",
        "config_schema": "https://ucp.dev/schemas/mock.json",
        "instrument_schemas": ["https://ucp.dev/schemas/shopping/types/card_payment_instrument.json"],

Source:

2.4 체크아웃 기능 호출

export RESPONSE=$(curl -s -X POST "$SERVER_URL/checkout-sessions" \
  -H 'Content-Type: application/json' \
  -H 'UCP-Agent: profile="https://agent.example/profile"' \
  -H 'request-signature: test' \
  -H 'idempotency-key: 0b50cc6b-19b2-42cd-afee-6a98e71eea87' \
  -H 'request-id: 6d08ae4b-e7ea-44f4-846f-d7381919d4f2' \
  -d '{
        "line_items":[{"item":{"id":"bouquet_roses","title":"Red Rose"},"quantity":1}],
        "buyer":{"full_name":"John Doe","email":"john.doe@example.com"},
        "currency":"USD",
        "payment":{"instruments":[],"handlers":[
          {"id":"shop_pay","name":"com.shopify.shop_pay","version":"2026-01-11","spec":"https://shopify.dev/ucp/handlers/shop_pay","config_schema":"https://shopify.dev/ucp/handlers/shop_pay/config.json","instrument_schemas":["https://shopify.dev/ucp/handlers/shop_pay/instrument.json"],"config":{"shop_id":"d124d01c-3386-4c58-bc58-671b705e19ff"}},
          {"id":"google_pay","name":"google.pay","version":"2026-01-11","spec":"https://example.com/spec","config_schema":"https://example.com/schema","instrument_schemas":["https://ucp.dev/schemas/shopping/types/gpay_card_payment_instrument.json"],"config":{"api_version":2,"api_version_minor":0,"merchant_info":{"merchant_name":"Flower Shop","merchant_id":"TEST","merchant_origin":"localhost"},"allowed_payment_methods":[{"type":"CARD","parameters":{"allowedAuthMethods":["PAN_ONLY","CRYPTOGRAM_3DS"],"allowedCardNetworks":["VISA","MASTERCARD"]},"tokenization_specification":[{"type":"PAYMENT_GATEWAY","parameters":[{"gateway":"example","gatewayMerchantId":"exampleGatewayMerchantId"}]}]}]},
          {"id":"mock_payment_handler","name":"dev.ucp.mock_payment","version":"2026-01-11","spec":"https://ucp.dev/specs/mock","config_schema":"https://ucp.dev/schemas/mock.json","instrument_schemas":["https://ucp.dev/schemas/shopping/types/card_payment_instrument.json"],"config":{"supported_tokens":["success_token","fail_token"]}}
        ]}
      }' ) && echo $RESPONSE

샘플 체크아웃 응답

{
  "ucp": { "version": "2026-01-11", "capabilities": [ { "name": "dev.ucp.shopping.checkout", "version": "2026-01-11" } ] },
  "id": "cb9c0fc5-3e81-427c-ae54-83578294daf3",
  "line_items": [
    {
      "id": "2e86d63a-a6b8-4b4d-8f41-559f4c6991ea",
      "item": { "id": "bouquet_roses", "title": "Bouquet of Red Roses", "price": 3500 },
      "quantity": 1,
      "totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "total", "amount": 3500 } ]
    }
  ],
  "buyer": { "full_name": "John Doe", "email": "john.doe@example.com" },
  "status": "ready_for_complete",
  "currency": "USD",
  "totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "total", "amount": 3500 } ],
  "links": [],
  "payment": { "handlers": [], "instruments": [] },
  "discounts": {}
}

2.5 체크아웃 요청에 할인 적용

export CHECKOUT_ID=$(echo $RESPONSE | jq -r '.id')
export LINE_ITEM_1_ID=$(echo $RESPONSE | jq -r '.line_items[0].id')
export RESPONSE=$(curl -s -X PUT "$SERVER_URL/checkout-sessions/$CHECKOUT_ID" \
  -H 'Content-Type: application/json' \
  -H 'UCP-Agent: profile="https://agent.example/profile"' \
  -H 'request-signature: test' \
  -H 'idempotency-key: b9ecd4b3-0d23-4842-8535-0d55e76e2bad' \
  -H 'request-id: 28e70993-e328-4071-91de-91644dc75221' \
  -d "{
        \"id\":\"$CHECKOUT_ID\",
        \"line_items\":[{\"id\":\"$LINE_ITEM_1_ID\",\"item\":{\"id\":\"bouquet_roses\",\"title\":\"Red Rose\"},\"quantity\":1}],
        \"currency\":\"USD\",
        \"payment\":{\"instruments\":[],\"handlers\":[]},
        \"discounts\":{\"codes\":[\"10OFF\"]}
      }") && echo $RESPONSE | jq

할인이 적용된 응답

{
  "ucp": { "version": "2026-01-11", "capabilities": [ { "name": "dev.ucp.shopping.checkout", "version": "2026-01-11" } ] },
  "id": "cb9c0fc5-3e81-427c-ae"
}
54-83578294daf3",
  "line_items": [
    {
      "id": "2e86d63a-a6b8-4b4d-8f41-559f4c6991ea",
      "item": { "id": "bouquet_roses", "title": "Bouquet of Red Roses", "price": 3500 },
      "quantity": 1,
      "totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "total", "amount": 3500 } ]
    }
  ],
  "buyer": { "full_name": "John Doe", "email": "john.doe@example.com" },
  "status": "ready_for_complete",
  "currency": "USD",
  "totals": [
    { "type": "subtotal", "amount": 3500 },
    { "type": "discount", "amount": 350 },
    { "type": "total", "amount": 3150 }
  ],
  "links": [],
  "payment": { "handlers": [], "instruments": [] },
  "discounts": {
    "codes": [ "10OFF" ],
    "applied": [
      {
        "code": "10OFF",
        "title": "10% Off",
        "amount": 350,
        "automatic": false,
        "allocations": [ { "path": "subtotal", "amount": 350 } ]
      }
    ]
  }
}

정리

kill ${SERVER_PID}

요약

우리는 비즈니스 서버와 에이전트를 설정하고, 기능을 발견했으며, 체크아웃 세션을 생성하고, 할인을 적용했습니다—모두 UCP를 사용했습니다. 이 프로토콜은 신원 연결, 주문 관리도 지원하며, 보다 풍부한 에이전트 경험을 위해 계속 확장될 예정입니다. Python 샘플 구현과 그 README.md를 통해 직접 시도해 보세요.

Google과 통합

UCP는 공급업체에 구애받지 않지만, Google은 검색 및 Gemini의 AI 모드에서 구매 경험을 제공하는 레퍼런스 구현을 제공하며, 이를 통해 소비자는 Google Pay와 저장된 지갑 정보를 사용해 적격 비즈니스에서 직접 구매할 수 있습니다.

예시 질의: “다가오는 여행을 위한 가벼운 여행가방을 찾아줘.”

Triptych illustration

Merchant Center를 통한 비즈니스 통합

Google 구현을 사용하려면 적격 제품이 포함된 활성 Merchant Center 계정이 필요합니다.

다음 단계

  • Google 통합 가이드를 따라 Merchant Center 계정을 설정하고 상인 관심 양식을 제출하세요.
  • 가이드의 체크아웃 섹션에 있는 지침을 사용해 UCP 통합을 완료하세요.

협업 요청

Universal Commerce Protocol은 20개 이상의 파트너가 공동으로 개발하고 승인했으며 오픈 소스입니다. 개발자, 기업 및 플랫폼 아키텍트는 GitHub 저장소, Discussions, 풀 리퀘스트를 통해 기여할 수 있습니다.

Back to Blog

관련 글

더 보기 »

Gemini 3와 실제 에이전트 사례

2025년 12월 19일 우리는 agentic AI의 새로운 단계에 진입하고 있습니다. 개발자들은 단순 notebooks를 넘어 복잡하고 production‑ready agentic workflow를 구축하고 있습니다.