샌드 박스 및 테스트 환경
TL; DR
견고한 샌드 박스 = 완전한 격리, 합성/비인간 데이터, 외부 시스템의 실제 시뮬레이터, 예측 가능한 측면 및 시간 이동, 내장 된 demempotency 및 웹 후크, 투명한 한계 및 메트릭스. 손이 닿지 않는 음식, 열쇠-파기, 승진-체크리스트에서만.
1) 환경지도 및 그 역할
규칙: 샌드 박스 실제 수단/게임/개인 데이터에 액세스하지 않고 일방 통행 시뮬레이터를 통한 모든 연결.
2) 데이터: 합성, 익명화, 앉기
기본 합성. 유효하지만 비재무 PAN (테스트 BIN) 인 여권/카드 데이터 생성기는 요금과 잔액의 실시간 패턴입니다.
단계에 대한 익명 화: 식별자의 토큰 화, 골재에 대한 차등 개인 정보 보호, 희귀 조합 제거.
체와 결정론: 하나의 팀-하나의 상태.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
시간 여행: 마감일/만료 테스트를위한 환경의 전 세계 "시간".
3) 시뮬레이터 및 플러그 (스터브)
결제/은행/PSP
Auth/Capture/Refund/Payout 님을 참조하십시오.
PSP 웹 후크: HMAC 서명, retrai, 지연 및 "더러운 인터넷".
KYC/AML/제재
"clear ',' pep _ match ',' protect _ hit ',' doc _ missembly ',' manual _ review '.
prod에서와 같이 dempotency 및 속도 제한을 지원하십시오.
게임 제공자/카탈로그
로비, 기능, RTP/라운드-의사 랜덤 생성, UX 사례에 대한 "지불/실패" 제어.
옵션: 시뮬레이터 "심각도" 스위치 (행복 경로 대 혼돈).
4) 샌드 박스의 웹 후크
HMAC 서명 (v1), 헤더 'X-Event-ID', 'X-Timestamp', 창 5 분
지수 백오프, DLQ 및 재생으로 배상합니다.
콘솔 "재 실행" 및 시도 로그.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) 이념과 결정론
모든 돌연변이는 'Idempotency-Key' 를 받아들입니다.
시뮬레이터는 키 (TTL 24-72 h) 별로 결과를 저장합니다.
"종자 결정론": 동일한 입력-동일한 결과 (반복 가능한 테스트의 경우).
6) 보안 및 액세스
네트워크 격리/VPC, 개별 비밀 및 도메인 ('샌드 박스. 예. com ').
RBAC/ABAC: "파트너", "qa", "개발", 토큰의 물수리 역할은 최소화됩니다.
요율 제한 및 할당량: 임차인/키 당 공정 점유율, 이해할 수있는 '429 '/' Redu-After'.
KMS/Vault에서만 비밀; 규칙적인 회전.
코드/구성 수준 (기능 플래그 하드 블록) 에서 실제 결제 금지.
7) API 게이트웨이 및 샌드 박스의 관찰 가능성
동일한 정책: OAuth2/OIDC/JWT, CORS, WAF, DDoS 프로필.
측정 항목: p50/p95/p99, 4xx/5xx, 적중률 제한, 대기 시간 웹 후크, demotent 적중.
통나무/흔적: PII 없음; 상관 'trace _ id'.
대시 보드 "샌드 박스 건강": 가동 시간, 웹훅 대기열, 시뮬레이터 오류.
8) 기능 플래그, 버전 및 호환성
샌드 박스 → 스테이지 → prod의 기능 포함.
API를위한 SemVer; Swagger/Redoc 샌드 박스의 우울증/일몰 배너.
GraphQL 상점에 대한 지속적인 쿼리 (있는 경우).
9) CI/CD! 프로모션
1. 빌드/단위 →
2. 계약/모의 테스트 (OpenAPI/ProtoQL/GraphQL SDL) →
3. 통합 대 시뮬레이터 →
4. 무대 회귀 (항문. 스냅 샷) →
5. 카나리아 문자 prod.
게이트 체크리스트 프로모션: § 12의 아래.
10) 파트너를위한 UAT 스크립트 (샌드 박스)
결제: 웹 후크 및 PSP 오류가있는 지급/캡처/환불/지불.
KYC/AML: 모든 상태 + 수동 에스컬레이션.
Idempotency: 반복되는 'Idempotency-Key' → 동일한 결과.
속도 제한: '429' 의 올바른 처리.
시간 창: 토큰 만료, '재시도 후', 시간 여행 케이스.
웹 후크: 서명/retrays/DLQ, 수동 재생 및 디드 업.
11) 데이터 정책 및 개인 정보
실제 PAN/KYC 도크를 샌드 박스/스테이지에 저장하지 마십시오.
익명 화: 마스킹, 직접 식별자 제거, 합성 상관 관계.
로그 및 웹 후크 본체의 TTL 저장
12) 점검표
12. 1 새로운 샌드 박스 출시
- 분리 된 네트워크/기본/캐시/개체 저장소
- KMS/Vault에서 생성 된 비밀, 역할 별 액세스
- PSP/KYC/게임 시뮬레이터의 철자 및 버전
- Swagger/Redoc + Postman 컬렉션 (샌드 박스 엔드 포인트)
- 웹 후크: HMAC, 재 시도, DLQ, 재생 콘솔
- 속도/쿼터 프로필, 우울증/일몰 배너 (있는 경우)
- 대시 보드 및 경고 (대기 시간, 5xx, 429, DLQ)
12. 2 프로모션 릴리스 (단계 → prod)
- 계약 diff 확인 (중단 없음)
- 단계에서 정상 p95/p99로드
- 웹 후크는 UAT, demempotency ok를 겪었습니다
- 기능 플래그가 준비되고 롤백 계획이 있습니다
- Changelog, 마이그레이션 가이드 및 파트너에게 우편
13) 안티 패턴
"비밀리에" prod 서비스/데이터베이스에 닿는 샌드 박스.
무대/샌드 박스의 실제 카드/여권 데이터.
웹 후크/후퇴가없는 시뮬레이터는 "행복한 길" 입니다.
dempotence → 중복 지불/베팅 없음.
모든 파트너를위한 하나의 일반적인 HMAC 비밀.
제한이 없거나 투명한 429/Redict-After가 없습니다.
14) 미니 스 니펫
.env. 샌드 박스 (예)
dotenv
API_BASE=https://sandbox.api.example.com
OAUTH_ISS=https://sandbox.idp.example.com
PSP_SIM_URL=https://sandbox.psp-sim.example.com
KYC_SIM_URL=https://sandbox.kyc-sim.example.com
WEBHOOK_SECRET_ROTATION_DAYS=90
FEATURE_FORCE_SANDBOX_PAYMENTS=1
OpenAPI 조각 (샌드 박스 서버)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
이데올로기 유사 코드
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
PSP 시뮬레이터 트리거
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) 샌드 박스 관측 및 SLO
가동 시간 샌드 박스 API는 99입니다. 5% (통합 쇼케이스는 떨어지지 않아야 함).
정상적인 하중에서 웹 후크 p95 × 3 ~ 2xx.
게이트웨이의 예산 5xx 오류 1%.
도킹 포털을 사용할 수 있으며 계약과 동기화됩니다.
16) 거버넌스
환경 소유자 (SRE/플랫폼) 및 청지기 API (계약).
변경 사항을 해제하기위한 LF 프로세스, Deprencation/Sunset 캘린더.
공용 샌드 박스에 대한 별도의 제한/할당량 및 "공정 사용" 가격.
요약 다시 시작
샌드 박스는 "기본 사본" 이 아닌 개발자를위한 제품입니다. "제공: 엄격한 격리, 합성 데이터, 웹 후크 및 레트라가있는 본격적인 시뮬레이터, 측면 및 시간 이동을 통한 결정론, 플래그 및 투명한 한계가 있습니다. 계약, 관찰 가능성 및 거버넌스로 모든 것을 연결하면 통합이 빠르고 안전하며 예측 가능해지고 통증이 없어집니다.