> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 제품

> 몇 분 안에 일회성, 구독 또는 사용 기반 제품을 생성하세요. 가격, 미디어, 필드 및 자동 권한을 모두 한 곳에서 관리하세요.

<Info>
  제품은 Dodo Payments의 기반입니다. 일회성 다운로드, 반복 구독, 사용량 기반 액세스 등을 판매하든, 제품을 생성하는 것부터 시작합니다. 각 제품은 가격 책정 방식, 체크아웃에서의 표시 방식, 구매 후 이행 방식 등을 정의합니다.
</Info>

<CardGroup cols={3}>
  <Card title="One‑Time" icon="credit-card" href="/features/one-time-payment-products">
    평생 이용 권한이나 단일 전달 품목에 대해 한 번만 비용을 부과합니다.
  </Card>

  <Card title="Subscriptions" icon="repeat" href="/features/subscription">
    시범판, 정산, 애드온이 포함된 일정에 따라 과금합니다.
  </Card>

  <Card title="Usage‑Based" icon="arrow-trend-up" href="/features/usage-based-billing/introduction">
    실제 사용량에 따라 계량 소비 및 요금 청구.
  </Card>
</CardGroup>

## 제품 생성

대시보드 또는 API를 통해 제품을 생성할 수 있습니다. 가격 모델을 미리 선택하고, 일회성, 구독 또는 사용 기반으로 설정한 후 세부 정보를 구성하세요. 가격 모델은 나중에 변경할 수 없으므로, 다른 모델이 필요하면 새 제품을 생성하세요.

<Steps>
  <Step title="Name & description">
    명확한 제목과 핵심 가치 중심의 간결한 설명을 제공합니다. 설명에는 Markdown을 사용할 수 있습니다.

    <Tip>
      첫 문장은 고객 중심의 결과 지향적으로 유지하세요. 이는 체크아웃에서 눈에 띄게 표시됩니다.
    </Tip>

    <Frame>
      <img src="https://mintcdn.com/dodopayments/r-ndtvzx3WhKqwER/images/products.png?fit=max&auto=format&n=r-ndtvzx3WhKqwER&q=85&s=fb41221c4f2af4de0155e71de1ac6904" alt="제품" style={{ maxHeight: '500px', width: 'auto' }} width="1911" height="927" data-path="images/products.png" />
    </Frame>
  </Step>

  <Step title="Pricing model & price">
    가격 모델을 선택하세요:

    * **일회성**: 한 번 지불하는 고정 가격.
    * **구독**: 간격과 선택적 시험이 있는 반복 가격.
    * **사용 기반**: 측정된 이벤트에서 파생된 가격.

    그런 다음 가격을 설정하세요:

    * **가격**: 기본 금액 및 통화.
    * **할인 (%)**: 결제 및 청구서에 표시되는 선택적 인라인 할인.
    * 구독의 경우 **반복 주기**(예: 1개월 또는 1년)와 필요시 **체험 기간**을 설정하세요. 구독 가격은 최소 **\$1**(또는 선택한 통화의 해당 금액) 이상이어야 합니다. 이 최소 금액 이하로 설정할 경우 구독이 작동하지 않습니다.

    <Warning>
      가격 변경은 새로운 구매에만 적용됩니다. 기존 구독은 플랜 변경 규칙을 따릅니다.
    </Warning>
  </Step>

  <Step title="Product media">
    체크아웃과 송장에 제품을 보여주기 위해 이미지를 업로드하세요. PNG/JPG/WebP 형식(최대 3MB)을 지원합니다. 언제든지 순서를 변경하거나 교체할 수 있습니다.
  </Step>

  <Step title="Automated entitlements (Under Advanced Settings)">
    결제 후 자동으로 활성화되는 이행을 연결하세요:

    * **라이센스 키**: 고유 키 발급 및 검증
    * **파일 다운로드**: 안전한 파일 액세스 부여
    * **사용자 정의**: 웹훅을 통해 자체 권한 논리 트리거

    제공 내용이 변경되면 혜택을 추가하거나 제거하세요. 기존 구독자는 그에 따라 접근 권한을 얻거나 잃게 됩니다.
  </Step>
</Steps>

## 변형 및 가격 옵션

하나의 제품 아래에 변형을 두는 대신, 각 가격 옵션(예: 월간 및 연간)에 대해 별도의 제품을 만드세요. 그런 다음 **제품 컬렉션**으로 그룹화하여 모든 옵션을 단일 결제에서 제시하고 고객 포털에서 요금제를 전환할 수 있도록 합니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/2YrxTqbaYgAm54C_/images/product-collection/checkout-page.png?fit=max&auto=format&n=2YrxTqbaYgAm54C_&q=85&s=1890932384bc32c8126c7993f3581855" alt="제품 컬렉션" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

### 이 접근 방식의 이유는?

* **명확한 가격 모델**: 각 제품은 단일이며 정의된 가격 모델(일회성, 구독 또는 사용 기반)을 가집니다.
* **예측 가능한 API**: 중첩된 변형 로직 없이 간단한 통합을 지원합니다.
* **더 쉬운 보고**: 변형 집계 없이 각 제품에 대한 수익 및 메트릭을 추적할 수 있습니다.
* **유연한 결제**: 여러 제품을 나란히 표시하여 고객이 비교하고 선택할 수 있도록 합니다.

### 제품 컬렉션의 작동 방식

1. **제품 생성**: 각 요금제(예: 시작 월간, 시작 연간, 프로 월간, 프로 연간)에 대한 개별 제품을 설정합니다.
2. **컬렉션으로 그룹화**: 관련 제품을 제품 컬렉션에 추가합니다.
3. **통합 결제**: 고객은 하나의 결제에서 모든 옵션을 보고 선호하는 요금제를 선택할 수 있습니다.
4. **요금제 전환**: 고객은 고객 포털을 통해 동일한 컬렉션 내의 제품 간에 업그레이드 또는 다운그레이드할 수 있습니다.

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  관련 제품을 함께 묶어 일관된 체크아웃 경험과 원활한 업그레이드/다운그레이드 경로를 제공합니다.
</Card>

## 제품 관리

대시보드나 API를 통해 프로그램적으로 제품을 관리할 수 있습니다. API는 제품 생성, 업데이트, 검색, 이미지 업로드 및 보관에 대한 전체 제어를 제공합니다.

### 대시보드 관리

* **업데이트**: 이름, 설명, 이미지, 가격, 필드 및 혜택을 언제든지 편집할 수 있습니다(가격 모델은 변경할 수 없습니다).
* **보관**: 기존 고객에게 영향을 주지 않으면서 새로운 구매에서 제품을 숨깁니다. 나중에 복원할 수 있습니다.

### API 관리

다음 지침을 통해 제품을 생성, 업데이트, 관리 및 검색할 수 있으며, 이미지 업로드도 포함됩니다.

<AccordionGroup>
  <Accordion title="Creating a Product">
    제품은 일회성 항목이거나 구독 기반 서비스일 수 있습니다. 새 제품을 만들려면 `POST` 요청을 상세 정보(이름, 설명, 가격, 통화, 반복 제품 여부 등)와 함께 `/products` 엔드포인트로 전송하세요.

    반복 제품의 경우, `price` 객체를 반복 가격(`type: recurring_price`)으로 설정하고 `payment_frequency_interval` 및 `subscription_period_interval` (`Day`, `Week`, `Month`, 또는 `Year`)과 해당 수량을 지정합니다.

    <Card title="Create Product API" icon="code" href="/api-reference/products/post-products">
      제품 생성 API 문서에서 요청 및 응답 구조를 자세히 확인하세요.
    </Card>
  </Accordion>

  <Accordion title="Updating a Product">
    기존 제품을 수정하려면 `PATCH` 요청을 `/products/{product_id}` 엔드포인트로 전송하세요. 이름, 가격, 설명 등 일부 속성을 다른 세부 정보는 그대로 둔 채로 업데이트할 수 있습니다.

    엔드포인트의 `product_id`가 기존 제품과 일치하는지 확인하세요.

    <Card title="Update Product API" icon="code" href="/api-reference/products/patch-products">
      제품 업데이트 API 문서에서 요청 및 응답 구조를 자세히 확인하세요.
    </Card>
  </Accordion>

  <Accordion title="Retrieving Products">
    계정에 저장된 제품 목록을 가져오려면 `GET` 요청을 `/products` 엔드포인트로 전송하세요. 활성 및 보관된 제품을 포함한 제품 세부 정보를 조회할 수 있습니다.

    <Card title="Retrieve Products API" icon="code" href="/api-reference/products/get-products">
      제품 조회 API 문서에서 요청 및 응답 구조를 자세히 확인하세요.
    </Card>
  </Accordion>

  <Accordion title="Uploading Product Images">
    제품과 이미지를 연결하려면 API가 제공하는 사전 서명 URL을 사용하여 AWS S3에 업로드하세요. 먼저 `/products/{product_id}/images` 엔드포인트에서 이미지 업로드 URL을 요청한 다음 제공된 URL을 사용해 60초 이내에 이미지를 업로드하세요.

    <Warning>
      사전 서명 URL은 60초 후 만료되므로 해당 시간 내에 이미지를 업로드해야 합니다.
    </Warning>

    API에서 사전 서명 URL을 받으면 `PUT` 메서드를 사용하여 이미지를 업로드하세요. 이는 AWS S3에 대한 안전하고 임시적인 접근을 보장합니다.

    **S3 업로드에 지원되는 라이브러리:**

    * **Node.js**: `axios`, `node-fetch`
    * **Python**: `requests`, `boto3`
    * **Go**: `net/http`
    * **PHP**: `GuzzleHttp`
    * **Ruby**: `rest-client`

    업로드가 성공하면 AWS S3가 `200 OK` 상태를 반환하며, 이미지가 성공적으로 저장되었음을 나타냅니다.

    <Card title="Upload Product Image API" icon="code" href="/api-reference/products/put-products-images">
      제품 이미지 업로드 API 문서에서 요청 및 응답 구조를 자세히 확인하세요.
    </Card>
  </Accordion>

  <Accordion title="Archiving a Product">
    제품을 더 이상 표시하거나 사용하지 않으려면 `DELETE` 요청을 `/products/{id}` 엔드포인트에 사용하여 제품을 아카이브할 수 있습니다. 이 작업은 제품을 숨기지만 영구적으로 삭제하지는 않습니다.

    <Card title="Archive Product API" icon="code" href="/api-reference/products/archive-product">
      제품 보관 API 문서에서 요청 및 응답 구조를 자세히 확인하세요.
    </Card>
  </Accordion>

  <Accordion title="Unarchiving a Product">
    보관된 제품을 복원해야 한다면 `POST` 요청을 `/products/{product_id}/unarchive` 엔드포인트로 전송하세요. 그러면 제품이 다시 활성화되어 사용 가능해집니다.

    <Card title="Unarchive Product API" icon="code" href="/api-reference/products/unarchive-product">
      제품 복원 API 문서에서 요청 및 응답 구조를 자세히 확인하세요.
    </Card>
  </Accordion>

  <Accordion title="Checkout & fulfillment">
    제품에서 결제 또는 구독 흐름을 생성하고 혜택 및 웹후크를 통해 자동으로 이행하세요.

    <CardGroup cols={3}>
      <Card title="Checkout Sessions" icon="code" href="/developer-resources/checkout-session">
        일회성 또는 구독 구매에 대한 체크아웃 세션을 만드세요.
      </Card>

      <Card title="Payment Webhooks" icon="code" href="/developer-resources/webhooks/intents/payment">
        결제 수명 주기 이벤트에 대응하세요.
      </Card>

      <Card title="Subscription Webhooks" icon="code" href="/developer-resources/webhooks/intents/subscription">
        구독 생성, 갱신 및 취소 이벤트를 처리하세요.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## 모범 사례

* **명확함으로 시작하기**: 각 가격 옵션(월간 vs 연간)에 대해 별도의 제품을 사용하세요.
* **신중하게 트라이얼 이용하기**: 트라이얼을 온보딩과 짝지어 활성화를 촉진하세요.
* **이행 자동화하기**: 혜택 및 웹후크를 사용하여 즉시 제공하세요.
* **메타데이터로 태깅하기**: 조정을 위해 시스템 ID를 저장하세요.

<Check>
  이제 제품을 만들고 단발성, 반복적 또는 사용량 기준으로 판매할 준비가 되었습니다.
</Check>

## 관련

<Card title="Product Analytics" icon="chart-mixed" href="/features/analytics-and-reporting#product-level-analytics">
  각 제품별로 수익, 고객, 유지율, 구독자 및 MRR을 추적하세요.
</Card>
