← /work
04Live revenue2026.04 —

Magazine · saju editorial

정통 명리학을 AI 페르소나 편집부로 production 화한 매거진 × 결제 제품. 라이브 매출.

role자체 제품 end-to-end 책임 — 제품 · 풀스택 · 결제 · AI 생성 · 운영Live service
problem
Toss v1/v2 검증 계약 불일치가 실패 기록 62건을 남겼고, 첫 실결제에서는 webhook이 주문보다 먼저 도착했습니다.
my decision
사실 계산과 LLM 해석을 분리하고, 결제별 secret·멱등성·raw response·PG 재시도로 결제 계약을 다시 고정했습니다.
verified proof
첫 결제 race는 1분 뒤 자동 정합됐고, 검증 계층 재구성 뒤 관측 기간에는 같은 원인의 권한 누락이 확인되지 않았습니다.
current stage
2026.04 시작 · 라이브 매출
scroll ↓
paljalab — 실제 서비스 화면
actual product — 라이브 서비스 화면
why

한국 사주 시장은 대부분 인간 1:1 로 굴러갑니다. 느리고 비싸고 정합성도 사람마다 다릅니다. 단일 LLM 에 시키면 환각이 났습니다 — 환각이 곧 환불 사고로 직결되는 도메인입니다. 사실 계산은 코드가, 해석만 LLM 이 맡는 분리 구조로 풀었습니다.

moat
  • 01결정적 차트 계산(코드)과 해석(LLM 페르소나) 분리 — 사실 영역에 LLM 해석이 개입하는 범위를 제한
  • 02Toss v2 결제 — 결제 건별 시크릿 매칭 + 멱등성 키 + 웹훅 원문(raw) 보존
  • 03첫 결제에서 webhook이 주문 INSERT보다 1초 먼저 도착 — 실패 시 5xx 응답으로 PG 재시도를 유도해 1분 뒤 자동 정합
  • 04결제 사고 진단 3축 표준 — DB row · 사용자 화면 · 웹훅 경로를 동시에 봄
  • 05매거진 페이월 톤 site-wide + 반려동물 sub-product(멍냥사주) 로 결제·콘텐츠 인프라 재사용 확장
hypothesis

(1) 단일 LLM의 사실 오류 가능성은 역할 분리로 줄입니다 — 사실은 코드가 계산하고 LLM은 해석 범위만 맡습니다. (2) 결제 사고는 DB·사용자 화면·웹훅 경로를 함께 대조해야 조용한 불일치와 시간 경합을 구분할 수 있습니다.

constraints
  • 01결제 → 권한 → 콘텐츠 → 환불 사이클의 불일치가 고객 신뢰와 매출에 직접 영향
  • 02라이브 운영 중 사고 = 사용자 즉시 영향
  • 03제품·개발·운영을 함께 맡음 — 자동 회귀·감사 없이는 조용한 실패를 놓치기 쉬움
  • 04환각이 매출로 직결되는 도메인 — 그럴듯한 오답이 제일 비쌈
decisions · tradeoffs
  • 결제사 v2 전환에 맞춰 검증 계층 재구성 — 결제 건별 시크릿 매칭 + 멱등성 키 + 웹훅 원문 보존

    buy웹훅 처리 복잡도 ↑ → v1/v2 불일치로 누적된 62건의 실패 기록을 원인별로 추적 가능

  • 주문 INSERT보다 webhook이 먼저 오는 경합에서 실패 시 5xx를 반환해 PG 재시도를 유도

    buy일시 실패를 즉시 성공으로 숨기지 않음 → 첫 결제에서 1분 뒤 자동 정합되는 복구 경로 실증

  • 사실 계산은 코드, 해석만 LLM — '5인 합의' 마케팅보다 정확한 실구조

    buy페르소나 다양성 ↓ → 사실 정합성 ↑, 환각이 narration 영역에 갇힘

  • sub-product(멍냥사주) 는 기존 결제·콘텐츠 인프라 재사용 — 단 결제 경합은 sub-product 환경에서 재검증

    buy재검증 비용 ↑ → 본체의 사고 회고 룰이 product line 전체로 이식됨

verified

누적된 실패 기록 62건은 Toss v2 결제를 v1 방식으로 검증한 버전 불일치로 확인했습니다. 검증 계층을 재구성한 뒤 관측 기간에는 같은 유형을 다시 확인하지 못했습니다. 별건인 첫 결제 race는 webhook이 주문보다 1초 먼저 도착했지만 5xx→PG 재시도로 1분 뒤 자동 정합됐습니다. MySQL 새벽 다운 6회는 메모리 튜닝·비운영 환경 정리·스왑·로그 상한을 함께 적용한 뒤 관측 기간에 재발하지 않았습니다.

result

라이브 매출. 검증 계층 재구성 뒤 관측 기간에 같은 유형의 권한 미부여는 다시 확인되지 않았습니다.

retro

조용한 사고가 진짜 사고입니다 — 에러 로그가 없다는 건 안전하다는 뜻이 아니라 아직 발견 못 했다는 뜻일 수 있습니다. 그리고 반복되는 장애는 단일 원인이 아닙니다. 이 두 원칙의 출처가 이 제품입니다.

stackPHPMySQLGPT-4.1 · GPT-4oDALL-E 3Toss Payments v2