유형: 현황 (A 코드베이스 품질 감사 — B 리팩토링 반영용)
최종 업데이트: 2026-07-07 (manager-as-main + Explore 3에이전트 병렬 감사)

A 코드베이스 최적화·클린코드 감사 (punkpoll_web → B)

목적: A(www.punkpoll.com = punkpoll_web) 전 페이지 파악 완료 후, 기존 A 코드의 dead code·중복코드·최적화·클린코드 대상을 정리해 B 리팩토링에 반영한다. 전제: 도메인 기능은 A와 동일(클론) 유지, 구조/품질만 개선. 추측 금지, 전부 file:line 근거.

요약 임팩트: 데드코드 제거 ~5-8% · 중복 통합 ~600-700 LOC 절감 · 폴링/거대컴포넌트/상태이중화가 3대 구조 부채.

불변/개선 경계 (reviewer 프레이밍 — 최적화 트랙 규율 원칙)

'A 기능 무수정'과 '최적화'가 충돌하지 않도록 경계를 못박는다:

PR별 reviewer 검증: C1 4곳 게이트/creatorSe/롤백 동일 렌더 · C2 다중창 BroadcastChannel 실시간 회귀(2창 캡처) · C3 voteYn/status 노출조건+챗봇+LoginModal · C4/C5/C6 출력 URL/컬럼/렌더 불변 · 워커코어 settle/participation 재실증. 각 항목에 reviewer A정합 판정 부착.


1. Dead Code (B에 포팅 제외)

1-1. 데드 라우트 3

라우트파일근거
/explore-2app/(pages)/explore-2/page.jsx인바운드 링크 0, routes.js 미정의 (self-import만)
/dailyapp/(pages)/daily/page.jsx'/daily' 참조 0 (self만)
/citizenapp/(pages)/citizen/page.jsxroutes.js:7 //citizen 주석처리 = 도달 불가 (페이지는 홈 리다이렉트)

1-2. 미참조 컴포넌트 4

1-3. 주석처리 블록 (포팅 전 제거)

1-4. 데드 익스포트 4 (constants/table.js)


2. 중복 코드 (공유 훅/유틸로 통합) — ~600-700 LOC 절감

#클러스터중복 위치통합안절감
C1팔로우/언팔 토글ChannelProfile:19-35·ChannelInfo:46-76·channel/page:71-97·Token:126-157useFollowChannel(uid, onSuccess)40-50
C2좋아요/댓글 동기화 (store+BroadcastChannel+setInterval 100ms)ShareButton·CardActions·DetailSideModal·poll/Poll (각 useEffect 3블록)usePollSyncState(surveyUid) + normalizeCount util180-200
C3Vote 핸들러 (로그인체크→sendMeJoinSurvey)VoteButton:23-38·CardInfo:33-43·AdminPollCardInfo:31-41useVoteHandler(sid,{checkStatus})25-30
C4블록탐색기 URL (avax/minascan)Transaction·UserPublicKey·InfoWallet·TokenHistory·admin모달들·PaymentHistory (10+곳)utils/blockExplorerLinks (getAvax/getMinascan/auto)60-80
C5매니저 테이블 셋업 (TanstackTableCommon 컬럼·정렬·페이징)voters/Participants·Followers·TokenHolders (각 ~142줄 동일)useManagerTableSetup(config) or <ManagerDataTable>280-320
C6빌더 스위치 5분기manager/builder/Builder.jsx:98-137 (ai/token/live/vote/default 모두 유사)config 맵 기반10-20

B 신규 공유파일: hooks/{useFollowChannel, useVoteHandler, usePollSyncState, useManagerTableSetup} · utils/{blockExplorerLinks, countNormalization}


3. 최적화·클린코드 대상 (A 동작 유지, 구조만)

3-1. 폴링/타이머 (이벤트·스토어 구독으로 전환)

위치문제
ShareButton:99·CardActions:130·poll/Poll:101setInterval(checkGlobalState, 100) = 100ms 폴링 재렌더 (스토어 구독으로)
SendHistory:951s 폴링
EmbedPickerModal:43500ms 팝업 감지 폴링 (postMessage로)
SharePollCard:121카드마다 1s 카운트다운 interval (100카드=100타이머 → 공유 useCountdown)
DarkModeContext:1431s 다크모드 백업 폴링 (storage 이벤트와 중복)
admin Dashboard:2046·Scheduler:3730s (document.hidden 체크 없음)

3-2. 거대 컴포넌트 (300줄+ / 다중 책임) — 상위

컴포넌트줄수분리안
AdminDashboardContent2286탭/헬스/배포/ SSE 훅 분리
VoterRegistrationModal1031스텝 컴포넌트
AdminPollCard926헤더/액션/토글
create-wallet-modal807위저드
Comments794리스트/필터/액션
PunkPurchase713결제수단/KCP/주문
PhoneBookNumberTable707테이블/액션/필터
SharePollCard561표시/카운트다운/폰폼/통계
builder Poll565질문/리워드/푸터 (상태 store로)
Sidebar428 · ChannelInfo418 · TokenChart 438서브컴포넌트 분리

3-3. 상태 이중화 (로컬 useState + 글로벌 store 미러) — 단일 소스로

3-4. 재렌더/메모

3-5. 일관성

3-6. 에러 처리


4. B 반영 우선순위

Tier 1 (고임팩트·저복잡): useFollowChannel · blockExplorerLinks · useVoteHandler · 데드코드 3라우트+4컴포넌트+4익스포트 제외
Tier 2 (고임팩트·중복잡): usePollSyncState(폴링→구독) · useManagerTableSetup · 상태 단일소스화
Tier 3 (구조): 거대 컴포넌트 분리 · services 계층 일원화 · TS 마이그레이션 · 에러바운더리

A-parity 불변: 모든 도메인 로직은 A와 동일. 위는 전부 구조/품질 개선(사용자 관찰 동작 무변).

5. v2 백엔드(core-api·chain-worker) 감사 — backend4 도메인 분석 (읽기전용)

A 프론트(1~4)와 별개로, B/v2 백엔드 코드의 dead/중복도 같이 정리. reviewer 가드레일: 통합해도 M4 이벤트게이트·nonce reconcile·settle 항등식·hmac 콜백 semantics 불변(온체인 동작 보존).

5-1. Dead code

5-2. Stale 네이밍/주석 (구 모델 잔재)

5-3. 최대 중복 — 워커 스캐폴드 7개 (임팩트 큼)

5-4. 검토 대상 — custodial 전환(#151) 후 지갑 서비스 병존


6. A 백엔드 모듈 감사 (진행중 — 모듈별 file:line)

[정정 2026-07-07] live/dead는 실 prod pm2 데몬 기준(/doc/daemons). 코드 config 변형(ecosystem 3개 등) 하나만 보고 단정한 판정 오류 정정: PunkpollLightApi2=live(LightApi 아님)·txConfirmationWorker.v2=live(별도 repo -Ver2, dead 아님)·kakaoServerRefactored(Node)=live(PHP dead). FungibleToken은 Mina 컨트랙트코드(FungibleToken.ts·zkPunkManager)만 dead, LightApi2-Main(9400) API서버=live(참여큐+IPFS+콜백). 단 모듈 내부 import 도달성(redisNonceManager import 0=dead)은 변형 무관 정적사실로 유효.
jegwon 지시: 운영 전체 모듈로 확장. reviewer/backend4/backend1/dev·dev2 분담. 온체인 semantics·A 관찰동작 불변 가드레일.

6-1. txSender (온체인 배포·참여·리워드·콜백 데몬) — reviewer 1차 (src/ 14,835줄·15모듈)

6-2~ (나머지 10 모듈) — 분담 착수 대기

kakaoChatBot · punkpollBotAvax · bizchat · punkpoll_api(Spring Boot) · auth-gateway · ipfs · blockchainApi(+Ver2) · FungibleToken · punkpollUtil · standalone_wallet · admin

reviewer 1차 명백 데드파일(공유분): kakaoServer.js.deprecated·server_backup.js·*.backup·channelmanager.bak·channelmanager-mapper.bak / 원본 vs Refactored 병존(kakaoServer vs kakaoServerRefactored·messageHandlers vs messageHandlersRefactored) → 라이브 판별 후 죽은쪽 제거.

6-2. ⚠️ [폐기·재작성] kakaoChatBot(PHP) 감사 = 죽은 코드베이스 대상 오류. 실 live=kakaoChatBotNodeJs/kakaoServerRefactored.js(Node, pm2 kakao-punkpoll). PHP본은 레거시 dead. 카카오 도메인 라이브러리 재작성 필요(/doc/daemons 기준). 아래 PHP 분석은 무효.

6-3. punkpoll_api (설문/채널/유저 CRUD·참여수집) — manager 取合 (Spring Boot 552파일·59.6K LOC)

6-4. punkpoll-auth-gateway (카카오/텔레그램 OAuth·JWT·nullifier) — manager 取合 (NestJS)

6-5. punkpoll-ipfs (참여내용 IPFS·Pinata·BullMQ) — manager 取合 (Node 1080 LOC·컴팩트)

6-6. punkpollBotAvax (텔레그램 진입·설문참여) — manager 取合 (Node)

6-7. bizchat-reward-api — ⚠️ 감사 대상 제외 (jegwon 2026-07-07: 펑크폴 프로젝트 아님. clawdbot-kakaotalk도 제외). 아래는 참고용 관찰(클린 구조 모범 사례로만 인용).

6-8. punkpollUtil (panelManager — 패널관리·응답 스케줄링) — manager 取合 (Node)

6-9. standalone_wallet (웹뷰 지갑) — manager 取合 (Next.js, dev2 도메인)

6-10. punkpoll_admin (관리자 콘솔) — manager 取合 (⚠️ SUPERSEDED)


7. 교차 발견 (전 모듈 공통 — V3 규율)

6-11. 온체인 3모듈 (txSender·punkpollAvaxBlockChainApi·PunkpollFungibleTokenAvax) — backend4 리버스엔지니어링 + reviewer G6

상세: docs/ONCHAIN_A_TO_B_REVERSE_ENGINEERING.md (backend4). B 매핑 reviewer G6 PASS.

7-1. nullifier parity vs security 해소 (backend1 resolveAUser·reviewer G6 PASS)

6-11 보강 (reviewer 온체인 3모듈 first-pass 상세):


8. 모듈 감사 1차 종료 (2026-07-07)

펑크폴 13개 모듈 전수 감사 완료. 프론트(web·admin폐기) + 코어API(api·auth-gw·ipfs) + 메신저(kakao·telegram) + 온체인(txSender·blockchainApi·FungibleToken) + 운영(punkpollUtil) + 지갑(standalone_wallet) + B백엔드(v2). deep file:line은 리팩토링 착수 시 기능단위로.
다음(P0 잔여): 역엔지니어링 기획문서 통합 · 기능별 리팩토링 체크리스트(A출처+G1~G6) · 측정모델 문서.