누구를 위한 제품인가
한·일 디지털 상품, 선물, 인센티브와 바우처 운영을 검토하는 commerce 팀
COMMERCE · PRODUCT BRIEF
한·일 디지털 바우처 주문, 발급과 암호화 원장을 fail-closed로 설계합니다.
VoucherPort는 한국 고객의 일본 디지털 바우처 주문을 payment intent, provider adapter, fulfilment와 암호화 원장으로 나누어 모델링합니다. 코드·테스트·빌드는 준비됐지만 실제 결제, production DB, provider 계약, PIN 구매, 공개 배포와 고객지원 운영은 검증되지 않았습니다. 현재 화면과 sample order는 제품 구조를 설명하기 위한 로컬 R&D입니다.
샘플 주문이며 실제 결제, PIN 구매 또는 사용 가능한 코드를 만들지 않습니다.
한·일 디지털 상품, 선물, 인센티브와 바우처 운영을 검토하는 commerce 팀
결제와 발급의 실패를 분리하고 민감 PIN·receipt 결과를 주문과 사용자에 결속해 안전하게 전달
PRODUCT FLOW
고정된 provider catalog에서 국가, 통화와 상품을 선택합니다.
정수 금액, 사용자와 상품을 idempotency key에 결속합니다.
승인된 adapter만 bounded timeout과 correlation ID로 호출합니다.
PIN·receipt 결과를 주문·사용자·상품 bound AAD로 암호화해 전달합니다.
INTERFACE TEMPLATE
샘플 주문이며 실제 결제, PIN 구매 또는 사용 가능한 코드를 만들지 않습니다.
CAPABILITIES
국가, 통화, SKU와 provider 상품을 명시적으로 구분합니다.
같은 command의 재시도가 중복 발급으로 이어지지 않도록 설계합니다.
외부 계약 차이를 좁은 adapter와 명시적 오류 분류 뒤로 격리합니다.
즉시 PIN·receipt를 transaction과 user에 결속한 AAD로 보호합니다.
주문, provider attempt, fulfilment와 실패 상태를 분리해 기록합니다.
INTEGRATION SEQUENCE
비밀키는 브라우저에 두지 않고, 모든 외부 응답은 서버에서 검증한 뒤 제품 상태를 갱신합니다.
const intent = await server.orders.create({ idempotencyKey });
const decision = await server.policy.evaluate(intent);
const providerEvent = await server.provider.executeSandbox(decision);
await server.ledger.appendVerified(providerEvent);SECURITY
마케팅 UI와 테스트 fixture는 routable voucher나 credential을 포함하지 않습니다.
caller middleware가 transaction과 user의 소유권을 먼저 검증해야 합니다.
HTTPS, timeout, response size, correlation과 idempotency를 제한합니다.
실제 민감 결과를 로그나 평문 DB column에 저장하지 않는 경계입니다.
READINESS
공개 주소와 production 운영자가 없습니다.
실제 voucher catalog, credential과 fulfilment 호출을 검증하지 않았습니다.
결제 provider, webhook, 환불과 chargeback 운영이 없습니다.
managed DB, KMS, backup/PITR와 데이터 보존 정책이 필요합니다.
시장·운영 경계