Skip to content

Commit 0499779

Browse files
SOIVclaude
andcommitted
docs: 마켓플레이스 수수료 확정 및 공유 링크 도메인 요구사항 추가
- 03-long-term-vision: 수수료 5% + 결제 처리 수수료 ~3% 분리 공시 방식 확정 - 08-shared-link: 공유 링크 사용 가능 조건 섹션 추가 (도메인 미연결 시 차단) - IP 직접 접속 / localhost 환경에서는 링크 발행 불가 - PUBLIC_URL 기반으로 도메인 여부 감지 - 미설정 시 안전 우선 (비활성화) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 2949094 commit 0499779

2 files changed

Lines changed: 61 additions & 8 deletions

File tree

docs/v2_FINANCIAL-LEDGER/roadmap/03-long-term-vision.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,21 +137,31 @@ SaaS (Managed Cloud)
137137

138138
### 유료 모듈 / 테마 수수료
139139

140+
> **결정된 방식**: Fieldstack 수수료 5% + 외부 결제 수수료(Stripe 등 ~3%) 별도 공시.
141+
> 실질 부담률 ~8%는 타 플랫폼(10% 이상) 대비 여전히 개발자 친화적입니다.
142+
140143
개발자가 마켓플레이스에 유료 모듈 또는 테마를 등록할 수 있으며,
141144
결제된 금액 중 **5%를 Fieldstack 운영 수수료**로 수취합니다.
145+
외부 결제 처리 수수료(Stripe 등 약 2.9%+α)는 별도로 발생하며,
146+
정산 화면에 명확히 분리 표시합니다.
142147

143148
```
144149
사용자가 유료 모듈 구매 (예: 10,000원)
145-
└─ 개발자 수취: 9,500원 (95%)
146-
└─ Fieldstack 수수료: 500원 (5%)
150+
└─ 결제 처리 수수료 (Stripe ~3%): 약 300원
151+
└─ Fieldstack 운영 수수료 (5%): 500원
152+
└─ 개발자 실수취: 약 9,200원 (92%)
153+
154+
실질 총 부담률: ~8% (타 플랫폼 10~30% 대비 낮음)
147155
```
148156

149157
### 수수료 책정 근거
150158

151-
- Apple / Google 앱스토어: 30%
152-
- Steam (게임): 30%
153-
- Gumroad: 10%
154-
- **Fieldstack: 5%** — 개발자 친화적, 생태계 형성 우선
159+
| 플랫폼 | 수수료 | 비고 |
160+
|--------|--------|------|
161+
| Apple / Google 앱스토어 | 30% | 결제 수수료 포함 |
162+
| Steam | 30% | |
163+
| Gumroad | 10% | 결제 수수료 포함 |
164+
| **Fieldstack** | **5% + 결제 수수료 (~3%)** | 합산 ~8%, 투명 공시 |
155165

156166
개발 및 서버 운영 유지 명목의 최소 비용만 확보하는 것이 목적이며,
157167
수익보다는 **모듈/테마 생태계를 키우는 것**을 우선합니다.

docs/v2_FINANCIAL-LEDGER/technical/08-shared-link.md

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,50 @@ registerSharedLinkRenderer('invoice', async (resourceId, ctx) => {
131131

132132
---
133133

134-
## 6. 보안 고려사항
134+
## 6. 사용 가능 조건 (도메인 요구사항)
135+
136+
공유 링크 기능은 **도메인이 서버에 연결된 경우에만 활성화**됩니다.
137+
IP 주소가 그대로 포함된 링크는 발행이 차단됩니다.
138+
139+
### 이유
140+
141+
- **서버 IP 노출**: IP 주소가 공개 링크에 포함되면 서버의 물리적 위치와 인프라 정보가 외부에 드러납니다.
142+
- **HTTPS 미보장**: IP 직접 접속은 TLS 인증서 발급이 사실상 불가능하므로 링크 내용이 평문으로 전송될 수 있습니다.
143+
- **신뢰성 부족**: 수신자가 `http://123.456.78.90/s/token` 형태의 링크를 받으면 피싱으로 오인하기 쉽습니다.
144+
145+
### 허용 조건
146+
147+
| 조건 | 설명 | 허용 여부 |
148+
|------|------|-----------|
149+
| Cloudflare Tunnel 연결 | 도메인 + HTTPS 자동 제공 | ✅ 허용 |
150+
| 직접 도메인 연결 (A/CNAME) | 도메인 + TLS 인증서 설정 | ✅ 허용 |
151+
| IP 직접 접속 (포트 포함) | 도메인 없음 | ❌ 차단 |
152+
| `localhost` / 루프백 주소 | 외부 공유 불가 환경 | ❌ 차단 |
153+
154+
### 도메인 감지 방식
155+
156+
서버는 시작 시 `installed.lock` 또는 환경변수에서 `PUBLIC_URL`을 읽어 도메인 여부를 판단합니다.
157+
158+
```
159+
PUBLIC_URL=https://myapp.example.com → 도메인 확인됨, 공유 링크 활성화
160+
PUBLIC_URL=http://192.168.0.10:3000 → IP 감지됨, 공유 링크 비활성화
161+
PUBLIC_URL 미설정 → 비활성화 (안전 우선)
162+
```
163+
164+
공유 링크 기능이 비활성화된 상태에서 발행을 시도하면:
165+
166+
```
167+
POST /core/share
168+
→ 403 { error: 'SHARED_LINK_UNAVAILABLE', reason: 'Domain not configured' }
169+
```
170+
171+
관리자 설정 화면에서도 현재 상태를 표시합니다:
172+
- 도메인 미설정: "공유 링크 기능을 사용하려면 도메인을 연결하세요." 안내 배너
173+
- 도메인 설정 완료: 기능 정상 활성화
174+
175+
---
176+
177+
## 7. 보안 고려사항
135178

136179
- 토큰은 최소 **16자 이상의 랜덤 문자열** (crypto.randomBytes 기반)
137180
- 비밀번호는 평문 저장 금지 — bcrypt 해시로 저장
@@ -141,7 +184,7 @@ registerSharedLinkRenderer('invoice', async (resourceId, ctx) => {
141184

142185
---
143186

144-
## 7. 활용 예시
187+
## 8. 활용 예시
145188

146189
| 모듈 | 리소스 타입 | 외부 접속자가 보는 것 |
147190
|------|------------|----------------------|

0 commit comments

Comments
 (0)