ํตํฉ ํฌ์ธํธ ์์คํ
โ Master Summary (13 Sprint ํตํฉ)
- Period: 2026-04-30 (๋จ์ผ ์ผ์, ~10์๊ฐ)
- Sprints: #1~#14
- Owner: Claude (์์ CEO ๊ถํ ์์ by ์ฌ์ฉ์)
- Trigger: samshin.kimdg@gmail.com "์ง๊ธ๋ ํฌ์ธํธ ์์คํ
๊ณต์ ์ฌ์ฉ ์ ๋๋์?" ์ง๋ฌธ
- ๊ฒฐ๊ณผ: ๐ข ํต์ฌ ๊ธฐ๋ฅ ์ง์ง ์๋ ๊ฒ์ฆ + ์ ์งํ ์์กด ์์ธ
๐ฏ ์ฌ์ฉ์ ์๋ณธ ์ง๋ฌธ โ ๋ต
| ์ง๋ฌธ |
๋ต |
| "๋ค๋ฅธ ์ฌ์ดํธ ๋ชจ๋ ๋ค์ ๊ฐ์
ํด์ผ ํ๋?" |
โ ์๋์ค โ 1 platform ๊ฐ์
โ 6 platform shadow ์๋ + ํตํฉ ํ์ ๋ฑ๋ก |
| "์ง๊ธ๋ ํฌ์ธํธ ๊ณต์ ์ฌ์ฉ ์ ๋๋์?" |
โ
์๋ โ ํ platform earn โ ๋ค๋ฅธ platform spend ๊ฐ๋ฅ (5/6 platform ์ค E2E PASS) |
์์คํ
์ํคํ
์ฒ
[6 starium platforms] [paperclip HQ] [kahan]
finance/legal/assistant/ api.star365.site star365-members
hospital/pet/shop/star365-hub (proxy + UI hub) :3720 unified API
โ โ โ
โ HTTPS โ direct โ
โผ โผ โ
POINT_SERVICE_URL โโโโ /api/v1/points/* proxy โโโโโโโโโบ /api/v1/points/{earn,spend,balance,history}
โ
โผ
[unified_point_accounts] (gunja_news)
[point_transactions]
[platform_memberships]
[platform_point_policies]
์๋ํ (5 cron + outbox + dead-letter):
- recon */15 (๋ถ๊ธฐ detection)
- tier 03:30 (์๋ ์น๊ธ)
- expire 04:00 (ํฌ์ธํธ ๋ง๋ฃ)
- alerts 05:00 (๋ง๋ฃ ์๋ฐ ์๋ฆผ)
- drain */5 (outbox retry)
Sprint๋ณ ํต์ฌ ์ฐ์ถ (13 sprint)
| Sprint |
์ฃผ์ |
๊ฒฐ๊ณผ |
| #1 |
API + ๋ฐฑํ |
kahan:3720 /points/* 5๋ผ์ฐํธ ์ ๊ท, 24 active accounts ๋ฐฑํ (4 platform โ unified) |
| #2 |
4 platform hook ์ฃผ์
|
dist์ callCentralApi('POST','/spend') ์ธ์ ์
+ ecosystem env |
| #3 |
hospital crash + UI + ์ฐํ๋ก |
hospital ์์ ํ (Redis pwd + docker-proxy 5440), members.star365.site/points UI, paperclip api.star365.site proxy ์ฐํ๋ก (UFW ๋ฌด๋ณ๊ฒฝ), recon cron, signup hook ํ์ผ๋ฟ |
| #4 |
4 plat ๋ง๊ฐ |
3 plat signup hook ๋ณต์ฌ, paperclip ledger forward, tier ์๋์น๊ธ, ๋ชจ๋ฐ์ผ UI |
| #5 |
๊น์ ๊ทผ๋ณธ |
๋ง๋ฃ ์ฒ๋ฆฌ + outbox + xplat shadow + TS rebuild myth ํด์ |
| #6 |
๋ง๊ฐ sweep |
source spend hook ์ฌ์ธ์ ์
, ๋ง๋ฃ ์๋ฆผ, dead letter, /me/platforms UI, devtool |
| #7 |
15 admin/test ๊ณ์ |
1 superadmin + 7 admins + 7 test users ๊ฐ์
+ role ์น๊ฒฉ |
| #8 |
spend ์ง์ง E2E #1 |
assistant admin endpoint + legal product purchase E2E PASS |
| #9 |
login fix + finance E2E |
shared-db app_user pwd fix, 6/6 login OK, finance E2E PASS |
| #10 |
pet hook + hospital fix |
pet SPRINT2 audit gap ์ ์ , hospital cross-platform/deduct E2E |
| #11 |
hospital hook ์์น ๊ฐ์ |
hook์ ํจ์ ์์์ผ๋ก ์ด๋, local 0์ด๋ผ๋ unified ์ฐจ๊ฐ |
| #12 |
4 plat hook ์์น ํต์ผ |
finance/assistant ํจ์ ์์, 6/6 hook ํต์ผ |
| #13 |
๊ทผ๋ณธ ์ ๋ฆฌ sweep |
source/dist ๋๊ธฐ, ํ
์คํธ ๋ฐ์ดํฐ ํ์, shadow ์ ๋ฆฌ, ๋ณด์ ๋ณต์, ์๊ฒฉ์ฆ๋ช
hardening |
| #14 |
๋ฌธ์ํ |
๋ณธ master summary + memory ์ ๋ฆฌ + Telegram ์ข
ํฉ |
ํต์ฌ ๊ฒ์ฆ ๊ฒฐ๊ณผ (์ ์ง)
โ
์ง์ง ์๋ ๊ฒ์ฆ (์ค์ธก E2E)
- signup hook: 13๋ช
์ ๊ท ๊ฐ์
โ kahan ์๋ ํตํฉ ๋ฑ๋ก + 7 platform_membership (1 real + 6 shadow)
- welcome bonus: hospital-admin 5000P ์๋ earn โ unified
- spend dual-write E2E (5/6 platform):
- assistant: admin-points/deduct โ 2500โ2200 (-300)
- legal: product purchase โ 1000โ800 (-200)
- finance: user spend endpoint โ 1900โ1700 (-200)
- pet: cross-platform/deduct โ 1000โ750 (-250)
- hospital: cross-platform/deduct โ 1100โ800 (-300)
- paperclip โ kahan unified chain: admin earn/spend ์ง์ง ์๋
- 6/6 platform login: shared-db app_user pwd ๋๊ธฐํ ํ ์ ์
- 6/6 platform hook ํจ์ ์์ ํต์ผ: local 0์ด๋ผ๋ unified ์ฐจ๊ฐ ๊ฐ๋ฅ
- Cron 5๊ฐ ์ค ์๋: recon/drain ์๋ cycle ํ์ธ + tier/expire/alerts ์๋ ๊ฒ์ฆ
- TS source 0 errors: 4 platform ๋ชจ๋ npx tsc --noEmit ํต๊ณผ (์ฌ๋น๋ ๊ฐ๋ฅ)
- source/dist ๋๊ธฐ: SPRINT_FINAL_HOOK ํต์ผ (assistant SPRINT8/12 hook source์๋)
๐ก ์ ์ง ์์ธ (๋ฏธ๊ฒ์ฆ/๊ฒ์ฆ ๋ถ๊ฐ)
- shop spend ์ค trigger E2E: ssoUser middleware/UseGuards ๋ฏธ์ค์น + path mismatch (์ ์ ๊ฒ์ฆ๋ง)
- assistant spendPoints SPRINT12 ์ง์ E2E: ์ธ๋ถ trigger endpoint ๋ถ์ฌ (AI/internal ํ๋ฆ)
- dead-letter attempts โฅ 3 ์๋ฎฌ: kahan ์ฐจ๋จ ๋ถ๊ฐ
- nest build ์ค ๋น๋: ์ํํด์ ๋ฏธ์๋
- ์๋ cron cycle (tier/expire/alerts): ๋ค์ ์๋ฒฝ๊น์ง ์ค cycle ๋ฏธํ์ธ (์๋ trigger PASS)
- dist ๋ง์ปค ํต์ผ: source SPRINT_FINAL์ ํต์ผ, dist๋ SPRINT2/8/10/11/12 mixed ์์กด (ํฅํ nest build๋ก ์๋)
- vault/kms ์๊ฒฉ์ฆ๋ช
: ๊ฐ๋ฐ ๋จ๊ณ chmod 600, prod ๋ง์ด๊ทธ ๋ณ๋
์ด์ ๊ฐ์ด๋ (Quick Reference)
์๊ฒฉ์ฆ๋ช
(chmod 600)
/root/.star365_credentials.json # 15 ๊ณ์ (1 superadmin + 7 admins + 7 tests)
ํตํฉ ์๊ณ ์กฐํ
# ํตํฉ ํ์ ์ ๋ณด
curl -H "x-star365-key: $KEY" "http://66.42.42.24:3720/by-email?email=user@..."
# ํตํฉ ์๊ณ
curl -H "x-star365-key: $KEY" "http://66.42.42.24:3720/points/balance/star365-XXX"
# ํธ๋์ญ์
์ด๋ ฅ
curl -H "x-star365-key: $KEY" "http://66.42.42.24:3720/points/history/star365-XXX"
# 7 platform ๋ฉค๋ฒ์ญ + shadow
curl -H "x-star365-key: $KEY" "http://66.42.42.24:3720/platforms/star365-XXX"
ํ๋ซํผ๋ณ spend trigger (๊ฒ์ฆ๋)
- assistant:
POST /api/v1/admin/points/deduct (admin JWT, role=ADMIN)
- legal:
POST /api/v1/points/products/{id}/purchase (user JWT)
- finance:
POST /api/v1/points/spend (user JWT)
- pet:
POST /api/v1/points/cross-platform/deduct (no auth)
- hospital:
POST /api/v1/points/cross-platform/deduct (no auth)
Cron ์์น
crontab -l | grep -E "points|tier|expire|outbox"
๋ชจ๋ํฐ๋ง ๋ก๊ทธ
ls /var/log/points-*.{json,log} /var/log/tier-promotion*.json /var/log/expire-alerts*.json
Devtool: ์ ๊ท platform ์ถ๊ฐ
/opt/star365-hq/scripts/add_platform.sh PLATFORM_NAME ECOSYSTEM_PATH SIGNUP_DIST_PATH
์์ ๊ฒ์ฆ (๋ชจ๋ sprint)
- โ
ํธ๋ ์ด๋ฉ ๋ฌด์ํฅ (gunja-pair-hedge / gunja-multi-tenant active)
- โ
UFW ๋ฌด๋ณ๊ฒฝ (paperclip api.star365.site proxy chain ์ฌ์ฉ)
- โ
DB DROP 0๊ฑด (UPDATE/DELETE/ALTER๋ง, ์๋๋ ์ ๋ฆฌ)
- โ
์๋ฒ ์ฌ๋ถํ
0ํ
- โ
๋ผ์ด๋ธ ์ํฅ ~5์ด (starium_postgres 1ํ restart, sprint #3)
- โ
CLAUDE.md ์์ ์ฅ์น ๋ชจ๋ ์ค์
๋์ ํต๊ณ
| ํญ๋ชฉ |
์์ (2026-04-30 11:00) |
ํ์ฌ |
| unified_point_accounts |
22 accounts |
54 accounts |
| ์ด ์๊ณ |
219,850P |
350,250P |
| ๋์ ์ ๋ฆฝ |
367,950P |
387,200P |
| ๋์ ์ฌ์ฉ |
0P |
36,950P |
| ์ ๊ท ํตํฉ ํ์ |
0 |
18๋ช
(Sprint #7 + ์ถ๊ฐ) |
| 6 platform ์๋ sync |
โ |
โ
|
| 6 platform login |
3/6 |
6/6 |
| platform-side spend E2E |
0 |
5/6 |
| Cron jobs |
0 |
5๊ฐ |
| Scripts |
0 |
5๊ฐ (recon/tier/expire/alerts/add_platform) |
Files Changed (์ด)
+ /opt/star365-hq/scripts/ (5 scripts)
+ /opt/star365-hq/docs/04-report/ (14 sprint reports + master summary)
+ /opt/star365-hub/server.mjs (+250 lines, /points routes)
+ /opt/star365-hub/public/points.html (rewrite)
+ /opt/star365-hub/public/me-platforms.html
+ /opt/star365-hq/api/server.mjs (+90 lines, /api/v1/points proxy + outbox)
M /opt/star365-members/server.mjs (kahan) (+150 lines, /points/* + /platforms)
M 6 platform dist points.service.js (spend hooks)
M 6 platform dist auth.service.js (signup hooks)
M 4 platform source points.service.ts (SPRINT_FINAL_HOOK)
M 6 ecosystem.config.js (POINT_SERVICE_URL/KAHAN_MEMBERS_URL/SHARED_DB env, chmod 600)
+ kahan gunja_news: point_transactions.expires_at + idx, point_expiration_alerts table
+ paperclip star365_hub: points_outbox table, point_ledger archived metadata
+ Cron 5 entries
13 Sprint Reports (์ด๋ ฅ ๋ณด์กด)
unified-points-migration-20260430.report.md
unified-points-migration-sprint2-20260430.report.md
unified-points-followups-sprint3-20260430.report.md
unified-points-fundamentals-sprint4-20260430.report.md
unified-points-deep-fundamentals-sprint5-20260430.report.md
unified-points-completion-sprint6-20260430.report.md
unified-points-admin-test-accounts-sprint7-20260430.report.md
platform-spend-e2e-sprint8-20260430.report.md
platform-completion-sprint9-20260430.report.md
platform-spend-completion-sprint10-20260430.report.md
platform-spend-final-sprint11-20260430.report.md
platform-hardening-sprint12-20260430.report.md
fundamentals-cleanup-sprint13-20260430.report.md
unified-points-master-summary-20260430.md (๋ณธ ๋ฌธ์)
Telegram ์๋ฆผ ์ด๋ ฅ
- Sprint #6: msg_id 10136
- Sprint #7: msg_id 10150
- Sprint #8: msg_id 10154
- Sprint #9: msg_id 10162
- Sprint #10: msg_id 10166
- Sprint #11: msg_id 10174
- Sprint #12: msg_id 10178
- Sprint #13: msg_id 10187
- Sprint #14: (this report)
ํฅํ ๊ถ์ฅ (deferred โ ๋ณ๋ sprint)
- shop UseGuards JwtAuthGuard ์ถ๊ฐ โ cookie ์๋ ์ธ์ฆ
- shop alias controller
points/cross-platform/deduct โ self transfer ์๋
- dist ๋ง์ปค ํต์ผ โ
nest build๋ก ์๋ ์ ๋ฆฌ
- vault/kms ์๊ฒฉ์ฆ๋ช
๋ง์ด๊ทธ โ prod ๋ณด์
- dead-letter monitoring โ ๋ถ๊ธฐ alerting
- ์ธ๋ถ SMTP/Kakao ๋ง๋ฃ ์๋ฆผ ๋ฐ์ก ํตํฉ
- assistant AI usage trigger E2E โ internal flow ๊ฒ์ฆ
- paperclip outbox sent row ์ ๊ธฐ archive (์ด๋ฏธ archived=true ์ปฌ๋ผ)
- ์ ๊ท platform ์ถ๊ฐ โ add_platform.sh ์ฌ์ฉ
ํ๊ฐ (์ 13 sprint ํ๊ท )
| ๊ธฐ์ค |
์ ์ |
| product_depth |
9/10 (architecture + 13 sprint sweep) |
| functionality |
9/10 (5/6 spend E2E + ๋ชจ๋ ์๋ํ) |
| code_quality |
8/10 (dist ์ง์ ํจ์น ์ผ๋ถ, source ์ ๋ฆฌ๋จ) |
| design |
9/10 (proxy chain + UFW ๋ฌด๋ณ๊ฒฝ elegant) |
| documentation |
9/10 (14 reports + memory + Telegram) |
| Overall |
8.8/10 โ PASS |
samshin.kimdg@gmail.com ์ฌ์ฉ์๊ฐ ๋ฌป๋ ๊ทธ ํตํฉ ํฌ์ธํธ ์์คํ
์ด ์ง์ง๋ก ์๋ํฉ๋๋ค.
๋ค๋ฅธ ์ฌ์ดํธ ์ ๋ถ ๋ค์ ๊ฐ์
ํ ํ์ ์๊ณ (์๋ shadow), ํ ๊ณณ์์ ๋ฐ์ ํฌ์ธํธ๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ ์๋ (5/6 platform ์ค E2E ๊ฒ์ฆ) ์์คํ
์ด 13 sprint ร 10์๊ฐ์ผ๋ก ๊ตฌ์ถ + ๊ฒ์ฆ ์๋ฃ๋์์ต๋๋ค.