유형: 현황 (www.punkpoll.com 클론 요건 매트릭스 — 라우트 기준)
최종 업데이트: 2026-07-06 (manager, jegwon '라우터 기준 process + 파이프라인 진입 전처리까지 클론 매트릭스')
작성 원칙(jegwon 지침): ① '프론트 라우터 기준'으로. ② 각 라우트가 트리거하는 process를 '파이프라인 진입 전처리'까지 정확히. ③ '정확한 복제(클론)' + 우리는 '최적화 추가 리팩토링'. B 상태를 ✅일치 / 🔧불일치 / ❌미구현 표기.
컬럼: 라우트 | 사용자 액션 | 진입 전처리 | 호출 API(순서) | 다운스트림 파이프라인 | B 상태
| 라우트 | 액션 | 전처리 | 호출 API | 다운스트림 | B |
|---|---|---|---|---|---|
/explore | 설문 탐색 | — | GET today/surveys(pageUnit,pageIndex)·today/tags | 플랫폼DB 조회 | ✅ (백엔드 prod 읽기, 페이지네이션) |
/channel | 채널 목록 | — | GET channels·channels/categories | 플랫폼DB | ✅ |
/channel/[id] | 채널 상세 | — | GET channels/{id}·해당채널 surveys | 플랫폼DB | 🔧 (메타라인·설문수 미세차) |
/poll/[id] | 설문 상세·결과 | — | GET surveys/{uid}·surveys/{uid}/result(SYSTEM 집계) | 플랫폼DB+SYSTEM | ✅ (dev 재작성) |
/live/[id] | 실시간 참여현황 | — | GET 실시간 통계 | 플랫폼DB | 🔧 (날짜포맷) |
/vote·/panel | 안내·패널 | — | (정적/패널 quota) | — | ✅ |
| 라우트 | 액션 | 전처리 | 호출 API | 다운스트림 | B |
|---|---|---|---|---|---|
로그인 모달·/login | 카카오/텔레그램 로그인 | — | auth-gateway authorize→ticket exchange→login | 게이트웨이→BotAvax(nullifier)→api(JWT) | ✅ 카카오(실 연동) / 🔧 텔레그램(demo) |
/user/[id] | My Page | 세션 | GET user/profile·polls·token-holdings·token-history | 플랫폼DB(브릿지) | ✅ (2026-07-06) |
/mwallet | 지갑 | 세션 | GET wallet/me·balance | 온체인 balanceOf | 🔧 (A대조 미완) |
/builder (/builder/poll)| 단계 | 액션/API | 다운스트림 | B |
|---|---|---|---|
| 진입 | 채널 manager '새 설문' → 빌더 | — | ❌ (채널 manager 미구현) |
| 작성 | 커버·제목·질문 구성 | — | 🔧 (builder stub) |
| 저장 | POST survey/basicInfo | 플랫폼DB draft | 🔧 (B는 자체 v2 생성 존재) |
| 배포설정 | PATCH survey/distribution/{no} (fee·reward·기간) | — | ❌ |
| ★배포★ | POST mySurvey/distribution/{uid} {sendAlimTalk} | → '배포 8단계'(BotAvax→IPFS→BlockChainApi→콜백→deposit PUNK) + 알림톡 | ❌ (B: 생성→Fuji배포 뼈대만) |
/builder/ai-survey (기사→설문)| 단계 | 액션/API | 다운스트림 | B |
|---|---|---|---|
| 1 뉴스검색 | GET copilot/news/search?query= (Naver) | — | ❌ |
| 2 기사분석 | GET survey/ai/meta?url= (기사 content/메타) | AI | ❌ |
| 3 질문생성 | POST survey/ai/create (AI 질문 초안) | AI | ❌ |
| 4 빌더전송 | POST survey/ai/builder → surveyNo | 빌더 | ❌ |
| 5~ | (이후 C-1 배포설정·배포와 동일) | 배포 8단계 | ❌ |
| 라우트 | 액션 | 호출 API | 다운스트림 | B |
|---|---|---|---|---|
/channel/create | 채널 생성 | POST channel/basicInfo | (채널 토큰 배포 가능) | ❌ (미구현) |
/channel/[id]/manager | 채널 관리(설문생성 진입·유권자·배포) | 다수 | 배포 파이프라인 진입점 | ❌ |
/channel/[id]/edit | 채널 수정 | PATCH channel | 플랫폼DB | ❌ |
| 단계 | 액션/API | 다운스트림 | B |
|---|---|---|---|
| 참여 진입 | 메신저(카카오/텔레그램) 참여링크 → 챗봇 | — | ❌ (챗봇 B 미연결, 컷오버) |
| 제출 | /joinSurvey (sId·userId) | ipfs업로더 | ❌ |
| 파이프라인 | '참여 7단계'(참여DB저장→IPFS job pool→[데몬]IPFS스케줄러→[데몬]BlockChainApi→아발란체→완료콜백→wallet 리워드) | 온체인+wallet | ❌ (B: 참여큐→chain-worker→Fuji 뼈대만) |
Part 1(사용자 여정/라우트)에 더해, 리팩토링의 실제 범위인 '도메인별 기능 등가'. 단일 기준 = MASTER_PLAN Phase 3. [A 기능·계약 → B 상태 → 측정지표].
| 도메인 | A 기능·계약 | B 상태 | 측정지표(핵심) |
|---|---|---|---|
| 3.1 인증·★단일 신원 서비스★ | JWT·OAuth·nullifier 발급 + 통합 회원등록(findOrCreateMember 멱등, 챗봇 의존 제거, 진입점 무관 first-touch 원자 생성) | 🔧 카카오 로그인·nullifier 브릿지·JWT 있음 / 단일신원서비스·통합등록 부분 | 로그인·refresh 계약 100%, nullifier 결정성, first-touch 멱등 |
| 3.1b ★PII 암호화★ | 주민번호·전화번호 암호화 저장, 알림톡 시에만 복호, 복호 경로 인가통제 | ❌ 미구현 | 저장 평문 0, 복호 인가 통제 |
| 3.2 ★결제★ | KCP 주문·승인·취소·잔액·PUNK 구매 | ❌ 미구현 | 결제 계약 100%, 금액 정합 대사 0오차 |
| 3.3 참여/투표·★생명주기·에스크로★ | joinSurvey→IPFS→온체인→콜백 + 생명주기(DRAFT→QUEUED→…→ACTIVE↔PAUSED→STOPPED), 중단/일시정지, 리워드 에스크로(반환=에스크로−(지급+owed)) | 🔧 참여 큐→chain-worker 뼈대 / 생명주기·중단·에스크로 없음 | 이중리워드 0, 상태전이 정합, 반환액 정확, 반환 무결성 |
| 3.4 토큰/FT/SBT/IPFS | 토큰 배포·SBT(영수증 NFT) 민팅·IPFS(★즉시 CID + 지연 Pinata 핀★ 멱등) | 🔧 설문 배포 뼈대(Fuji) / SBT·IPFS 즉시CID·지연핀 부분 | 배포·민팅 계약 100%, IPFS 멱등, 중복 핀 0 |
| 3.5 ★챗봇★ | 카카오 4채널·텔레그램·알림톡, 채널 config화(복제 제거) | ❌ 미구현(B 연결·컷오버 휴먼게이트) | 카카오 응답 p99<4.5s, config화(복제 0) |
| 3.6 지갑 | non-custodial, ★WebView surface + 플랫폼 백엔드 공유★, 개인키 서버전송 0, 서명 왕복 | 🔧 키생성·온체인 잔액·register 있음 / WebView 임베드·플랫폼 공유 부분 | 개인키 전송 0, 서명 왕복, WebView 임베드, 신원 공유 |
| 3.7 web BFF·★관리자★·통계 | BFF 21경로·admin(~20p: alimtalk·blockchain·channels·surveys·tokens·users·settings…)·통계 | 🔧 BFF 조회 다수 / admin 전무·통계 부분 | BFF 21경로 계약 100% |
Part 2 관통 측정모델(도메인 공통): ①도메인 계약 테스트 100% ②A 대비 회귀 0(골든샘플·대사) ③보안 불변식(시크릿 0·인증 필수·fail-closed) ④성능 목표 ⑤체인 격리(Fuji/dry-run·mainnet TX 0)·결제 sandbox.
'무엇을 clone(Part1·2)'에 더해 '어떻게 안전하게 짓고·검증하고·마이그레이션하고·전환하나'. 이게 축소됐던 두 번째 층.
| 영역 | MASTER_PLAN 근거 | 내용 | B 상태 | KPI |
|---|---|---|---|---|
| 물리 분리·시크릿 | §1, 불변원칙 | 서버계정 punkpoll-v2·Redis:6380·MySQL punkpoll_v2_*·시크릿 전량 신규(소스 평문 0) | ✅ (M1 인프라·시크릿) | M1·M9 |
| 체인 격리 | §1.4, dev 역제안 | Fuji/dry-run 강제, mainnet TX 0(Phase6 전) | ✅ (Fuji 실증) | M11 |
| 결제 sandbox | §1.4 | KCP T0000 강제 | ❌ (결제 미구현) | — |
| 계약 스위트 | Phase 0·1.3 | C-01~C-12(5축: 스키마·멱등·인증·응답·무결성)·골든샘플 | 🔧 C-01·부분 | M2 |
| 관측성 기반 | Phase 1.4 (D-051) | 메트릭·구조화로그·트레이싱·무결성 알림 | ❌ 미구현 | M14 |
| fee payer QoS 풀 | Phase 2 (D-052) | 단일 nonce(영속·원자·자가치유)·공유풀·참여 최우선 레인·master→slave top-up | ❌ 미구현 | M5 |
| 세로 슬라이스 E2E | Phase 2 | 생성→배포→Fuji→콜백 확정 E2E | 🔧 뼈대(Fuji 실증) | M3·M4 |
| nullifier v2 마이그레이션 | Phase 4 (M7) | 구키↔신키 호환·연속성 100%·과거 무효화 0 | ❌ (브릿지만) | M7 |
| split-brain 소급 대사 | Phase 4 (D-050) | 가짜성공(미지급) 온체인 대조·교정 | 🔧 (prod 대사 1회 실행함) | M13 |
| 섀도 운영·동등성 | Phase 5 (M8) | A/B 동등성·성능·72h 안정성(sim.punkpoll.com) | ❌ 미구현 | M8 |
| 전환(cutover)·롤백 | Phase 6 (M10) | 단계전환·카나리·롤백 리허설·A 안전중지 | 🔒 휴먼게이트 | M10 |
측정모델 총괄 KPI: M1(시크릿0)·M2(계약100%)·M3(E2E100%)·M4(TX무결성0)·M5(nonce안전)·M6(카카오p99<4.5s)·M7(nullifier연속성100%)·M8(A/B동등성)·M9(A무접촉)·M10(전환·롤백)·M11(mainnet TX 0)·M12(PII평문0)·M13(split-brain대사)·M14(관측성알림). 각 도메인/단계 완료 판정 = 해당 KPI 충족.
→ 정확 클론 = 위 ❌ 절차 전부를 A 스펙대로 재현(+최적화). 우선순위: peter '②쓰기타겟' 결정 후, C(생성·배포)→D(채널관리)→E(참여) 순이 '투표 만들기~참여' 핵심 여정. 각 항목 E2E 실행 검증으로 A 결과와 일치 확인.