환경 매트릭스

Book Print API의 모든 엔드포인트가 Sandbox 도메인과 Live 도메인에서 어떻게 동작하는지를 정리한 단일 진실원입니다. 클라이언트 입장에서 "이 API를 Sandbox에서 호출할 수 있나?"와 "호출은 되는데, 어떤 데이터가 영향받나?"를 한눈에 판단할 수 있도록 구성되어 있습니다.

도메인 식별

환경도메인
Sandboxapi-sandbox.sweetbook.com
Liveapi.sweetbook.com

서버가 요청 도메인으로 환경을 자동 판별합니다.

한눈에 보기 — 4가지 분류

서버의 모든 엔드포인트는 다음 4가지 동작 중 하나를 합니다. 각 엔드포인트의 분류는 아래 컨트롤러별 표의 분류 컬럼에서 확인할 수 있습니다.

코드이름Sandbox 호출 결과Live 호출 결과클라가 알아야 할 것
A환경 분리✅ 호출 가능 — Sandbox 데이터(is_test=true)만 처리✅ 호출 가능 — Live 데이터(is_test=false)만 처리양 환경이 서로 다른 데이터 풀을 본다. Sandbox에서 만든 책/주문/크레딧은 Live에서 안 보임
B공통 자원✅ 호출 가능 — 단일 데이터 풀 처리✅ 호출 가능 — 단일 데이터 풀 처리양 환경이 같은 데이터를 본다. 계정·템플릿 등 환경 무관 공통 자원. ⚠️ Sandbox에서 운영 데이터 직접 영향 가능
C외부 — 테스트 모드✅ 호출 가능 — 외부 시스템에 테스트 모드로 호출 (실 부수효과 X)✅ 호출 가능 — 외부 시스템에 운영 모드로 호출알림톡·SMS 등. Sandbox 호출은 안전 (실제 발송 안 됨)
DSandbox 차단501 + ERR_SANDBOX_UNSUPPORTED✅ 정상 동작Sandbox에서 호출하면 차단됨. 외부 결제망 등 실 부수효과를 안전하게 막을 수 없는 경우
✅ = "호출 자체가 통과한다"는 의미. 데이터에 어떤 영향이 가는지는 분류(A/B/C/D)에 따라 다릅니다. 단순 호출 가능 여부만 보지 말고 분류도 같이 확인하세요.

Sandbox에서 호출 불가능한 엔드포인트

분류 D에 해당하는 엔드포인트만 모음. Sandbox 도메인에서 호출 시 501 + ERR_SANDBOX_UNSUPPORTED 반환.

메서드경로사유
POST/payments/inicis/confirmSandbox 호출 시 외부 결제망에 그대로 통신되기 때문에 안전 차단 필요

위 외 모든 엔드포인트는 Sandbox에서 호출 가능합니다. 다만 데이터 영향은 분류(A/B/C)에 따라 다릅니다.

자동 재시도 주의: HTTP 501은 일반적으로 "서버 미구현" 의미로 해석되지만, 본 케이스(ERR_SANDBOX_UNSUPPORTED)는 의도적 차단이라 재시도해도 동일 결과입니다. 자동 재시도 로직 화이트리스트에서 제외하세요. 응답 분기는 HTTP 상태가 아닌 errorCode로 하는 것을 권장합니다.

컨트롤러별 매트릭스

표 읽는 법

컬럼의미
메서드 / 경로HTTP 메서드 + 경로
SandboxSandbox 도메인에서 호출 결과 (✅ = 가능, ❌ = 차단)
LiveLive 도메인에서 호출 결과 (✅ = 가능)
분류위 "한눈에 보기" 표의 A/B/C/D
비고보조 설명

Accounts (/accounts)

메서드경로SandboxLive분류비고
POST/accounts/imagesB이미지 업로드
GET/accounts/imagesB
DELETE/accounts/imagesB
PATCH/accounts/imagesB
GET/accounts/meBpersonal도 Live OK
PATCH/accounts/meB
DELETE/accounts/meB

AccountConfigs (/account-configs)

메서드경로SandboxLive분류비고
GET/account-configs/meB
POST/account-configsB
PATCH/account-configs/{accountUid}B

ApiKeys (/keys)

메서드경로SandboxLive분류비고
GET/keysA키마다 env(test/live) 필드. 양 환경 별도 풀
POST/keysA발급 시 도메인 환경에 맞춘 env로 저장
PATCH/keys/{keyPrefix}A
DELETE/keys/{keyPrefix}A

Books (/books)

메서드경로SandboxLive분류비고
GET/booksA
POST/booksA생성 시 도메인 환경에 맞춰 is_test 저장
GET/books/{bookUid}A
POST/books/{bookUid}/finalizationA
DELETE/books/{bookUid}A
PATCH/books/{bookUid}/pdf-statusA
POST/books/{bookUid}/pdf-resultA레거시
POST/books/{bookUid}/coverA
POST/books/{bookUid}/contentsA
DELETE/books/{bookUid}/contentsA
POST/books/{bookUid}/photosA환경 불일치 시 403 ERR_ENV_MISMATCH
GET/books/{bookUid}/photosA
GET/books/{bookUid}/photos/{fileName}A
DELETE/books/{bookUid}/photos/{fileName}A
POST/books/{bookUid}/pdf-coverA
POST/books/{bookUid}/pdf-contentsA
PUT/books/{bookUid}/pdf-coverA
PUT/books/{bookUid}/pdf-contentsA
GET/books/{bookUid}/pdf-coverA
GET/books/{bookUid}/pdf-contentsA

BookSpecs (/book-specs)

메서드경로SandboxLive분류비고
GET/book-specsB공통 카탈로그
GET/book-specs/{bookSpecUid}B

Templates (/templates)

메서드경로SandboxLive분류비고
GET/templatesB
GET/templates/{templateUid}B

TemplateCategories (/template-categories)

메서드경로SandboxLive분류비고
GET/template-categoriesB
GET/template-categories/{key}B

SpecProfiles (/spec-profiles)

메서드경로SandboxLive분류비고
GET/spec-profilesB

Orders (/orders)

메서드경로SandboxLive분류비고
POST/ordersA생성 시 도메인 환경에 맞춰 is_test 저장
POST/orders/estimateA
GET/ordersA
GET/orders/{orderUid}A
POST/orders/{orderUid}/cancelA
POST/orders/{orderUid}/items/{itemUid}/cancelA
PATCH/orders/{orderUid}/shippingA
PATCH/orders/{orderUid}/statusA

Credits (/credits)

메서드경로SandboxLive분류비고
GET/creditsA양 환경 별도 잔액
GET/credits/transactionsA
POST/credits/sandbox/charge(의미 없음)Sandbox 전용 테스트 충전
POST/credits/sandbox/deduct(의미 없음)Sandbox 전용 테스트 차감

Payments (/payments)

메서드경로SandboxLive분류비고
POST/payments/inicis/confirm501DERR_SANDBOX_UNSUPPORTED 반환. Sandbox에서 외부 결제망 호출 방지

Notifications (/notifications)

메서드경로SandboxLive분류비고
GET/notifications/configB
PATCH/notifications/configB
GET/notificationsB
POST/notifications/sendCSandbox 호출 시 외부 발송 시스템 테스트 모드로 전달 — 실 SMS/알림톡 안 나감

Webhooks (/webhooks)

메서드경로SandboxLive분류비고
PUT/webhooks/configB
GET/webhooks/configB
DELETE/webhooks/configB
POST/webhooks/testB사용자가 등록한 본인 webhookUrl로 실 HTTP 송신 (양 환경 동일)
GET/webhooks/deliveriesB

자주 헷갈리는 케이스 (FAQ)

QSandbox에서 POST /orders 호출하면 Live 운영 주문이 만들어지나요?
A아니요. 분류 A(환경 분리)이므로 Sandbox에서 만든 주문은 is_test=true로 저장되며 Live에서 안 보입니다.
QSandbox에서 POST /notifications/send 호출하면 실제로 SMS가 발송되나요?
A아니요. 분류 C(외부 — 테스트 모드)로 외부 발송 시스템에 테스트 모드로 전달되어 실 발송이 일어나지 않습니다.
QSandbox에서 POST /payments/inicis/confirm 호출하면 어떻게 되나요?
A501 + ERR_SANDBOX_UNSUPPORTED 반환되고 액션은 실행되지 않습니다. 결제 검증은 Live에서만 가능합니다.
QSandbox에서 만든 책을 Live 도메인으로 호출해서 조회 가능한가요?
A아니요. 환경 격리가 적용된 모든 책 관련 API는 도메인과 책의 is_test가 일치해야 합니다 (ERR_ENV_MISMATCH 403).