SYSTEM BLUEPRINT

멈춘 화면은 그대로,
비어 있던 서버만 채웁니다

작가-사용자 플랫폼 재개장 사전 기획서 · 일반 사용자 / 작가 / 관리자 3개 역할의 결제와 정산 흐름을 9개 핵심 화면으로 설계했습니다. 제안서의 3대 역제안(코드 인수 진단 · 불변 정산 원장 · D-45 런칭 게이트)이 실제 화면에서 어떻게 작동하는지 증명합니다.

USER 시나리오

일반 사용자 — 작품을 사고, 바로 읽기까지

화면은 이미 만들어져 있습니다. 비어 있는 것은 '결제 버튼을 눌렀을 때 서버가 해야 할 일'입니다. 이 흐름의 3~5단계가 이번 과업의 핵심 구현 범위입니다.

작품 탐색

기존 목록·검색 화면 그대로 사용 (수정 없음)

상세 · 미리보기

구매 전 12% 미리보기, 잠긴 구간 안내

결제 요청

주문 스냅샷 생성 및 PG 결제창 호출

웹훅 확정

서버 웹훅 수신으로만 주문 확정 (유실 방지)

열람 권한 부여

확정 즉시 열람 개방 + 정산 원장 적재

USER | 화면 01

작품 상세 · 구매 (결제 전 상태)

https://writers-platform.co.kr/works/1042/episodes/3
작품 상세 — 『밤의 필사자』 3화
작가 한도윤 · 연재 3화 / 전 12화 · 등록 2026.10.02
미구매 · 열람 잠김
ORIGINAL SERIES
밤의 필사자
3화
한도윤 지음
2,500원
미리보기 (전체 분량의 12%)
“원고를 넘긴 뒤에도 문장은 계속 자랐다. 나는 그 문장이 어디까지 가는지 보기 위해 밤을 샜고, 결국 마지막 장을 찢어야 했다…”
이후 내용은 결제 후 열람할 수 있습니다.
결제 금액 2,500원
작가 정산 예정액 (수수료 20% 차감)2,000원
결제하고 바로 읽기
주문번호는 결제 요청 시점에 발급됩니다 · ORD-20261012-0417

[화면 개요 및 목적]

독자는 3화까지 읽고 멈췄습니다. 화면은 이미 있지만 '결제하고 바로 읽기'를 눌러도 아무 일이 일어나지 않는 상태 — 이것이 지금 플랫폼이 매출 0원인 이유입니다. 우리는 이 버튼 뒤의 서버 로직만 정확히 채웁니다.

[핵심 기능 로직]

버튼을 누르는 순간 주문 스냅샷(작품·화·금액·수수료율)을 그대로 얼려 저장합니다. 이후 작품 가격이 바뀌어도 이 주문의 정산 금액은 절대 변하지 않습니다. [제안서 역제안 02 — 불변 정산 원장] / [데모 Step 1과 연결]

  • OrderSnapshot 생성 · 가격/수수료율 동결
  • 기존 상세 화면 마크업 무수정 연동
USER | 화면 02

결제 진행 · 승인 확정 대기

https://writers-platform.co.kr/payments/ORD-20261012-0417
결제 진행 — 승인 확정 대기
주문번호 ORD-20261012-0417 · 결제수단 카드(신한 1234)
웹훅 수신 대기 중
결제 요청액
2,500원
2026.10.12 21:04:07
PG 승인 상태
승인
TID t20261012210409a
주문 확정
대기
웹훅 수신 후 확정
결제 상태 흐름 · 실시간 PaymentEventLog 기준
결제 요청 생성 (READY)
주문 스냅샷 저장 · 금액 2,500원 잠금 · 21:04:07
완료
PG 승인 응답 수신 (AUTHORIZED)
TID t20261012210409a · 21:04:09
완료
웹훅 수신 → 주문 확정 (PAID)
화면 응답이 아니라 서버 웹훅으로만 확정합니다. 창을 닫아도 결제는 유실되지 않습니다.
진행 중
열람 권한 부여 + 정산 원장 적재
SALE +2,500 / FEE −500 두 건이 원장에 기록됩니다.
대기

[화면 개요 및 목적]

결제창에서 '승인 완료'가 떠도 아직 주문은 확정이 아닙니다. 브라우저가 닫히거나 네트워크가 끊기면 결제만 되고 주문은 사라지는 사고가 여기서 납니다. 이 화면은 그 구간을 눈에 보이게 만든 설계입니다.

[핵심 기능 로직]

주문 확정은 오직 PG 서버 웹훅으로만 처리합니다. 같은 웹훅이 두 번 와도 결과는 한 번만 반영되며(멱등), 웹훅이 늦으면 조회 API로 자동 보정합니다. [데모 Step 2와 연결]

  • Webhook 기반 결제 확정 · 멱등 키 처리
  • PaymentEventLog 상태 전이 추적
USER | 화면 03

구매 완료 · 내 서재 (열람 권한 부여됨)

구매 완료 — 내 서재
회원 dohyun_k · 보유 작품 14편
열람 권한 부여됨
결제가 확정되었습니다 · 『밤의 필사자』 3화
주문번호 ORD-20261012-0417 · 2,500원 · 2026.10.12 21:04:11 확정
영수증
지금 읽기
내 서재 · 최근 구매 결제 확정 건만 노출
작품결제일금액열람
밤의 필사자3화2026.10.122,500원가능
밤의 필사자2화2026.10.052,500원가능
종이 위의 계절완결2026.09.288,900원가능
편집자의 붉은 펜1화2026.09.210원무료
새벽 세 시의 교정지5화2026.09.142,500원환불
환불 시 처리 방식 정책
환불이 발생해도 기존 기록을 지우지 않습니다. 반대 부호의 새 기록을 한 줄 더 쌓습니다.
SALE+2,500
FEE−500
REFUND−2,500
FEE_REVERSAL+500
작가 정산 잔액은 자동으로 원위치되고, 누가 언제 왜 되돌렸는지가 남습니다.

[화면 개요 및 목적]

결제가 확정되는 순간 두 가지가 동시에 일어납니다. 독자에게는 열람 권한이 열리고, 작가의 정산 원장에는 판매 기록이 쌓입니다. 이 둘이 한 트랜잭션으로 묶여 있어야 '돈은 받았는데 못 읽는' 상황이 생기지 않습니다.

[핵심 기능 로직]

환불이 발생해도 기존 기록을 삭제하지 않고 반대 부호의 새 기록을 추가합니다. 그래서 어제의 정산 잔액을 오늘 다시 계산해도 같은 값이 나옵니다. [제안서 역제안 02 / 데모 Step 3과 연결]

  • 열람 권한 부여 + 원장 적재 단일 트랜잭션
  • Spring Security · 구매자 전용 콘텐츠 접근 제어
ARTIST 시나리오

작가 — 판매가 정산금으로, 정산금이 입금으로

작가가 플랫폼을 떠나는 이유는 팔리지 않아서가 아니라 정산이 틀려서입니다. 판매부터 입금까지 모든 금액에 이유와 시각이 남도록 설계했습니다.

작품 등록

원본 업로드·썸네일 생성 (서버 처리)

판매 발생

결제 확정 시 원장에 SALE·FEE 자동 기록

월 마감

말일 마감 배치로 정산 대상액 확정

지급 신청

원천징수 3.3% 반영 실지급액 확인 후 신청

입금 완료

익월 10일 지급 · 명세서·영수증 자동 발급

ARTIST | 화면 01

작가 대시보드 · 이번 달 정산 현황

https://writers-platform.co.kr/artist/dashboard
작가 대시보드 — 한도윤
작가코드 ART-0142 · 정산 주기 매월 말 마감 / 익월 10일 지급
10월 정산 집계 중
이번 달 판매
412건
전월 대비 +87건
판매 총액
1,038,000원
환불 6건 반영 완료
정산 예정액
803,088원
수수료·원천징수 차감 후
지급 예정일
11.10
10월 말 마감 후 D+10
작품별 판매 현황 · 2026년 10월 정산 원장 집계 기준
작품판매판매액수수료 20%정산 대상액
밤의 필사자 3화168건420,000원−84,000원336,000원
밤의 필사자 2화121건302,500원−60,500원242,000원
종이 위의 계절 (완결)23건204,700원−40,940원163,760원
새벽 세 시의 교정지94건235,000원−47,000원188,000원
환불 (6건)−6건−15,000원+3,000원−12,000원
정산 계산 내역 확정 전 미리보기
판매 총액1,038,000원
플랫폼 수수료 20%−207,600원
정산 대상액830,400원
원천징수 3.3%−27,312원
실지급액 803,088원
수수료율·원천징수율은 설정값으로 분리되어 있어, 정책이 바뀌어도 코드를 고치지 않습니다.

[화면 개요 및 목적]

작가가 가장 자주 여는 화면입니다. '이번 달에 얼마 들어오나'라는 단 하나의 질문에 즉시 답하도록, 실지급액을 화면에서 가장 큰 글자로 배치했습니다.

[핵심 기능 로직]

수수료율(20%)과 원천징수율(3.3%)은 코드가 아니라 설정값입니다. 클라이언트가 정책을 늦게 확정해도 개발이 멈추지 않고, 나중에 바뀌어도 과거 정산은 그대로 보존됩니다.

  • SettlementPolicy 설정값 분리 (수수료·세율)
  • 원장 집계 캐시 · 작품별 판매 롤업
ARTIST | 화면 02

정산 원장 상세 (Append-only Ledger)

https://writers-platform.co.kr/artist/settlements/2026-10
정산 원장 상세 — 2026년 10월
작가 한도윤 · 원장 엔트리 1,044건 · 잔액 803,088원
원장 정합 · 검증 통과
이 화면의 모든 금액은 지워지거나 덮어써지지 않습니다. 취소·환불도 새로운 한 줄로 기록되어, 어제의 잔액을 오늘 다시 계산할 수 있습니다.
정산 원장 (Settlement Ledger) append-only · 2026.10.12 기준
기록시각유형사유주문번호금액누적 잔액
10.12 21:04:11SALE밤의 필사자 3화 판매ORD-20261012-0417+2,500원803,088원
10.12 21:04:11FEE플랫폼 수수료 20%ORD-20261012-0417−500원800,588원
10.11 09:22:40REFUND구매자 환불 요청 승인ORD-20261009-0233−2,500원801,088원
10.11 09:22:40FEE_REV환불에 따른 수수료 환입ORD-20261009-0233+500원803,588원
10.10 18:41:02SALE종이 위의 계절 판매ORD-20261010-0388+8,900원803,088원
10.10 18:41:02FEE플랫폼 수수료 20%ORD-20261010-0388−1,780원794,188원
SALE 합계
+1,038,000원
412건
FEE 합계
−207,600원
수수료 20%
REFUND 합계
−15,000원
환입 +3,000원 포함
원장 잔액
803,088원
지급 신청 가능

[화면 개요 및 목적]

이 프로젝트에서 가장 중요한 화면입니다. 잔액을 더하고 빼는 방식이면 환불 한 건에 정산이 무너지고, 어디서 틀어졌는지 아무도 모릅니다. 그래서 모든 금액 이동을 한 줄씩 쌓는 원장 방식으로 설계했습니다.

[핵심 기능 로직]

SALE / FEE / REFUND / FEE_REVERSAL / PAYOUT 다섯 가지 유형만으로 모든 상황을 표현합니다. 어떤 시점의 잔액이든 그 시점까지의 기록을 더하면 나옵니다. [제안서 역제안 02의 핵심 증거 / 데모 Step 3과 연결]

  • settlement_ledger · append-only 설계
  • 환불 시 역기록(reversal) 자동 생성
ARTIST | 화면 03

지급 신청 · 증빙 발급

https://writers-platform.co.kr/artist/payouts/new
지급 신청 — 2026년 10월분
정산 마감 완료 · 신청 가능 기간 11.01 ~ 11.07
신청 대기
지급 계좌 확인 본인 명의만 등록 가능
예금주한도윤
은행 / 계좌국민은행 1234-02-****89
계좌 실명 확인확인 완료 · 10.28
세금 구분개인 (사업소득 3.3%)
증빙 서류 지급 확정 시 자동 발급
2026년 10월 정산 명세서PDF
원천징수영수증 (사업소득)지급 후
이번 회차 실지급액
803,088원
정산 대상액830,400원
원천징수 3.3%−27,312원
지급 신청하기
신청 즉시 원장 잔액이 잠기며(HOLD), 관리자 승인 후 지급 처리됩니다.
지급 이력
2026.10.10 · 9월분612,447원
2026.09.10 · 8월분488,206원

[화면 개요 및 목적]

작가가 실제로 돈을 받는 마지막 관문입니다. 계좌 실명 확인, 세금 구분, 원천징수 계산, 증빙 서류까지 — 개발이 아니라 세무·운영에서 사고가 나는 구간이라 화면에서 미리 전부 보여줍니다.

[핵심 기능 로직]

신청 즉시 해당 금액을 HOLD 상태로 잠급니다. 잠긴 금액은 다음 회차 정산에 이중으로 잡히지 않으며, 관리자 승인 후에만 PAYOUT 기록으로 전환됩니다.

  • Data Aggregation & Visualization
  • 정산 명세서·원천징수영수증 자동 발급
ADMIN 시나리오

관리자 — 마감하고, 승인하고, 맞는지 확인한다

관리자 화면도 이미 만들어져 있습니다. 우리는 그 화면 뒤에서 돌아야 할 마감 배치와 승인·대사 로직을 채웁니다. 이 흐름이 없으면 작가에게 단 1원도 나갈 수 없습니다.

월 마감 배치

말일 원장 스캔 후 작가별 정산액 확정

예외 검토

계좌 미확인·이상 금액 자동 보류 처리

지급 승인

관리자 권한 계정만 승인 가능 (서버 검증)

이체 실행

승인 건만 이체 대기열로 이동 · PAYOUT 기록

대사 검증

PG 입금액과 원장 합계 대조 · 차액 0원 확인

ADMIN | 화면 01

정산 마감 배치 콘솔 (실행 중 상태)

https://writers-platform.co.kr/admin/settlements/close
정산 마감 배치 콘솔 — 2026년 10월
실행자 admin@platform · 배치 ID SETTLE-202610
배치 실행 중 · 78%
정산 대상 작가
137명
판매 발생 작가만
처리 완료
107명
78% 진행
마감 총액
42,918,600원
수수료 차감 전
검토 필요
2건
계좌 미확인 작가
월 마감 배치 진행률 예상 잔여 00:01:12 · 재실행해도 중복 적재되지 않습니다 (멱등)
배치 실행 로그 SettlementCloseJob
21:00:00 INFO SettlementCloseJob start · period=2026-10 · artists=137
21:00:03 INFO ledger scan done · entries=48,206 · sale=52,148,000 fee=−10,429,600
21:00:11 INFO ART-0142 한도윤 · target=830,400 tax=−27,312 payout=803,088
21:00:14 WARN ART-0311 계좌 실명 미확인 → 지급 보류(HOLD) 처리
21:00:19 INFO ART-0407 환불 3건 반영 · reversal=+2,400
21:00:26 RUN 107/137 처리 중… 원장 잔액 재계산 검증 통과

[화면 개요 및 목적]

매달 말일 밤에 한 번 도는 배치입니다. 이 배치가 실패하면 다음 날 137명의 작가가 동시에 문의를 넣습니다. 그래서 진행률과 로그를 화면에서 직접 보게 만들었습니다.

[핵심 기능 로직]

배치는 몇 번을 다시 돌려도 같은 결과가 나오도록 설계합니다(멱등). 중간에 서버가 죽어도 이어서 재실행하면 되고, 중복 정산이 발생하지 않습니다. [데모 Step 2와 연결]

  • SettlementCloseJob · 멱등 재실행 지원
  • 예외 건 자동 HOLD · 실시간 로그 스트림
ADMIN | 화면 02

지급 승인 대기열 (권한 분리 적용)

https://writers-platform.co.kr/admin/payouts/pending
지급 승인 대기열 — 2026년 10월
승인 권한 ROLE_ADMIN · 마감 확정 후에만 활성화
승인 대기 135건 / 보류 2건
승인 버튼은 관리자 계정에서만 보입니다. 작가·일반 사용자 계정으로 같은 주소에 접근하면 서버가 거부합니다.
선택 135건 일괄 승인
작가별 지급 승인 대기 총 지급 예정 34,335,880원
작가정산 대상액원천징수실지급액계좌상태
한도윤 (ART-0142)830,400원−27,312원803,088원확인승인 대기
서유하 (ART-0208)1,204,000원−39,732원1,164,268원확인승인 대기
문재이 (ART-0311)486,200원−16,044원470,156원미확인지급 보류
백서린 (ART-0407)2,918,400원−96,307원2,822,093원확인승인 대기
정하람 (ART-0512)342,000원−11,286원330,714원확인승인 완료
승인 대기
135건
33,865,724원
지급 보류
2건
계좌 실명 미확인
승인 완료
0건
승인 즉시 이체 대기열 이동

[화면 개요 및 목적]

돈이 실제로 빠져나가는 유일한 지점입니다. 화면을 숨기는 것만으로는 부족하고, 서버가 요청자의 권한을 매번 확인해야 합니다. 기존 관리자 화면은 그대로 두고 인가 로직만 서버에 붙입니다.

[핵심 기능 로직]

일반 사용자·작가 계정이 같은 주소를 직접 호출해도 서버가 403으로 거부합니다. 승인 행위는 누가 언제 무엇을 승인했는지 감사 로그로 남습니다.

  • Spring Security · ROLE_ADMIN 메서드 인가
  • 승인 감사 로그 (actor · time · amount)
ADMIN | 화면 03

대사(對査) 리포트 · 차액 0원 검증

https://writers-platform.co.kr/admin/reconciliation/2026-10
대사(對査) 리포트 — 2026년 10월
PG 입금 내역 ↔ 정산 원장 대조 · 자동 실행 매일 03:00
차액 0원 · 정합
PG 실입금액
52,133,000원
카드 51,208,000 / 간편 925,000
원장 SALE 합계
52,148,000원
환불 반영 전
환불 차감
−15,000원
6건
차액
0원
정합 확인
PG 입금액과 원장 합계가 1원 단위까지 일치합니다
불일치가 생기면 해당 주문번호와 발생 시각이 즉시 목록으로 뜨고, 지급 배치는 자동으로 멈춥니다.
리포트 내보내기
일자별 대사 결과 최근 5일
일자PG 입금원장 합계환불차액판정
2026.10.121,842,000원1,842,000원−2,500원0원정합
2026.10.111,617,500원1,617,500원−2,500원0원정합
2026.10.102,204,900원2,204,900원0원0원정합
2026.10.091,988,000원1,988,000원−5,000원0원정합
2026.10.081,745,600원1,745,600원0원0원정합

[화면 개요 및 목적]

재개장 이후 클라이언트가 매일 확인하게 될 화면입니다. PG에 실제로 들어온 돈과 우리 원장이 계산한 금액이 같은지를 하루 한 번 자동으로 맞춰 봅니다.

[핵심 기능 로직]

차액이 1원이라도 생기면 해당 주문번호가 즉시 목록에 뜨고 지급 배치는 자동으로 멈춥니다. 잘못된 돈이 나가는 것보다 하루 늦게 나가는 것이 언제나 낫습니다. [제안서 역제안 02·03 / 데모 Step 4와 연결]

  • 일 배치 대사 · 불일치 시 지급 자동 중단
  • Issue Tracking & Status Management