유형: 현황 (서버 실측 재검증 원장 — 최종 보고는 100% 서버 실측 기반이라는 jegwon 지시 이행 추적)
최종 업데이트: 2026-07-08 5차 (manager) — 🔒 전 도메인 담당서명 완료·A 전체 306,648 소스-only 확정
웹뷰: https://chat.punkpoll.com/doc/server-audit
게이트 규칙 (jegwon 지시, 2026-07-08 00:16 KST): 서버(13.209.222.241)에서 실제 데몬이 실행하는 실 코드를 검수·실측해 리팩토링 방향을 정한다. 로컬 코드로 검수한 것이 서버와 다르면 전체가 무너질 수 있으므로, 최종 보고는 모두 서버 실측을 기반으로 한다. 로컬-미격상 항목이 전부 서버로 격상되기 전에는 최종 종합(A 전체 LOC→B 감소율)을 확정하지 않는다.
출처 등급
punkpoll_ddl.sql = 37테이블 → 서버 platform DB 실측 = 90테이블 (2.4배 갭). 로컬에만 의존했으면 절반 이상을 놓쳤을 것. 서버 전용 테이블 예: aggregation_logs·channel_performance_stats·channel_statistics·daily_stats·hourly_stats·monthly_token_stats·survey_deployment_log·survey_key·survey_report·token_basic_info_bak·security_daily_stats 등./claudecode(2026-04-27 stale)에서 읽은 코드공식을 '검증'이라 표기 → 서버 txSender 실코드 재검 필요.| # | 도메인 | 주장/산출물 | 등급 | 소유자 | 근거 / 상태 |
|---|---|---|---|---|---|
| 1 | 프론트 정량 | 574파일 / 96,368 LOC · live 90,789 · dead 5.8% | ✓ | dev | 서버 ~/data/punkpoll_web 에서 도달성 스크립트 직접 재실행(읽기전용). v1.1과 완전 동일. |
| 2 | 프론트 서빙 | punkpoll-web.service (MainPID 2668606, /home/ubuntu/data/punkpoll_web, next-server v14.2.33) · 빌드=HEAD b6dea9d | ✓ | dev | systemctl·.next/BUILD_ID 시각 대조. dev = punkpoll-web-dev.service(port 3010) 분리. |
| 3 | 프론트 도메인4 | 채널·마이페이지·지갑·토큰 호출그래프·live/dead·LOC (#162) | ✓ | dev2 | 서버 파일 직접 재실측. 정정: TokenCirculation.jsx dead 철회(서버 grep import 1건). wallet=9,149(서버). Token.jsx 498 monolith. |
| 4 | 데몬맵·연결매트릭스 | A_PROD_DAEMONS (pm2/systemd 데몬→repo→script, 연결화살표) | ✓ | manager | 서버 pm2 jlist·systemctl·netstat·각 .env DB_NAME·callback.js:259,328·txMonitor.js:103,826. |
| 5 | RDS·datasource | RDS DNS스왑(punkpoll-mina RDS→punkpoll_platform) · application-prod.properties(datasource→platform 21.2 / alimtalk→mina 18.117) | ✓ | manager | 서버 실값·nslookup. |
| 6 | DB 인벤토리 | platform 90t/2.5GB · mina 360t/5.8GB · top테이블 행수·MB · live/stale(users 07-07 vs 로컬 05-29) | ✓ | manager | live RDS information_schema 실쿼리. mina 360 = BASE 353 + VIEW 7. 마이그레이션 분모 = BASE(platform 90 + mina 353), VIEW 제외. bloat top: kakao_zkapp_tx_hash_log_2024 3.0GB·system_response 1.06GB·survey_participant_bclogs 636MB·callback_receive_log 346MB(전부 로그성→미이관). |
| 7 | 온체인 LOC | 168,050 (txSender 26k·blockchainApi 59k·Ver2 39k·FungibleToken 42k·ipfs 1.3k) · 확정dead 3파일 | ✓ | reviewer | 서버 ~/디렉토리 실집계·pm2 미실행/import0 확정. txSender 배포커밋 b67c41c. |
| 8 | 온체인 데몬역할·복구 | 참여흐름·SBT=txMonitor.js:826·컨펌=txConfirmationWorker.v2.js:816 · 복구서비스 4종 LIVE(txMonitor+Ver2 import) · config(43114·localhost:9200·localhost:3838) | ✓ | reviewer | 서버 실행데몬 import·.env·nginx·실코드 file:line. |
| 9 | 백엔드 스키마 | platform 90테이블 컬럼/타입 인벤토리 | △→진행중 | backend1 | 로컬 ddl(2026-02-12, 5개월 stale) 37 → 서버 실측 platform 90·mina 353(BASE) 확정, manager/backend4 교차일치. SHOW CREATE TABLE 컬럼/타입 authority 갱신 진행중. |
| 10 | ~~온체인 코드공식~~ | nullifier AES키(callback.js:32/38/210 encryptString)·리워드 decimals(:216 parseUnits ,9)·서명 필드순서(participationSigner:10 keccak256)·복구서비스 4종 역할 | ✓ 격상완료 | reviewer | 서버 ~/txSender 실코드 재확인 = 로컬과 동일 = [서버확정]. 배포커밋 b67c41c. |
| 11 | 백엔드/서비스 LOC | 전 in-scope 모듈 서버 실집계 | ✓ (manager 실측) | manager/backend1 | 서버 find+wc(node_modules·dist·.git 제외). 아래 §종합 표 참조. |
| 12 | A 온체인 수치(backend4 문서) | ONCHAIN_A_TO_B §0/§6 A 수치 | ⇒ 인용 | backend4 | 본인 측정 아님. reviewer/manager 서버실측 인용(#7·#8 ✓ → 유효). '인용(서버출처)' 표기 유지. |
최종 종합 "A 전체 LOC → B 예상 감소율" 게이트 = 전 △ ✓:
→ 서버 실측 게이트 충족 (전 도메인 △=0). 남은 것은 측정방법 재조정 OPEN-4(아래).
측정방법 (manager 확정, 2026-07-08): 리팩토링 대상 = 소스-only(js/ts/jsx/tsx/java). node_modules·dist·build·target-빌드산출물·tests·*.backup·*.deprecated 제외. 전 도메인 동일 기준(reviewer 권고 채택 → OPEN-4 CLOSE).
| 계층 | 모듈 | 소스-only LOC | 소유자·방법 |
|---|---|---|---|
| 프론트 | punkpoll_web | 96,368 | dev · 서버 도달성(전 소스, 574파일) |
| 백엔드코어 | punkpoll_api (Spring) | 57,151 | manager · 서버 src/main/java(test 제외), 512파일 |
| 챗봇 | kakaoChatBotNodeJs (1저장소·4채널복제=1회집계) | 39,396 | manager · 서버 js/ts(backup/test 제외) |
| 봇 | punkpollBotAvax (systemApi·telegramEchoBot) | 30,462 | manager · 서버 js/ts |
| 유틸 | punkpollUtil (panelManager) | 5,587 | manager · 서버 js/ts |
| 인증 | punkpoll-auth-gateway (dev전용·Main미배포) | 2,784 | manager · 서버 ts/js |
| 온체인 | 5모듈(txSender 14,835·blockchainApi 24,068·Ver2 20,158·FungibleToken 14,759·ipfs 1,080) | 74,900 | reviewer · 서버 src/ 실집계 |
| A 전체 합계 (소스-only) | ≈ 306,648 | 담당 서명(아래) |
⚠️ 이전 총계 ≈416,765(온체인 광의 168,050 포함) 폐기. reviewer 초기 168k는 dist/build/target/tests/docs/backups 포함 광의였고, 소스-only는 74,900. 방법 통일로 총계 306,648 확정.
OPEN-4 CLOSE: 측정방법 = 소스-only 통일. 온체인 74,900(reviewer src/ 실집계).
원인 (서버 실측 확정): Mina 시절 1 MINA = 10^9(나노) → A DB에 9자리 금액 기록. Avalanche 전환(1 PUNK = 10^18) 후 A가 9→18 변환 레이어로 처리 중. 이게 상충이 아니라 알려진 전환부채.
변환 지점 (서버 file:line):
parseUnits(_,18). 메인넷 PUNK decimals=18. → 온체인 정합, 리스크 없음.contractService.js:1536 initialSupply/1000000000(÷10^9 DB나노 처리) · callback.js:216 parseUnits(rewardVal,9)(콜백 페이로드, reward 문맥 확정) · 프론트 하드코딩 divisor 15곳(dev 실측: wallet.jsx 1e8 vs TokenHoldings.jsx 1e9 vs TokenChart 1e9 — 서로 모순, 현재도 표시 불일치). decimals 온체인 변환 정코드(avalanche-rpc.ts:119/178)는 dead(도달0).통일 제안 (manager 종합·reviewer+dev 합의):
1. 단일 기준 = 18 decimals(Avalanche·온체인 실제). 온체인 무변경(이미 18).
2. 9자리 Mina 잔재 전면 제거: callback:216 9→18·contractService:1536 ÷10^9 제거·프론트 divisor 15곳 제거.
3. 변환 경계 1곳: raw 18자리는 B core-api 직렬화 레이어에서만 사람단위 문자열로 변환. 프론트/콜백은 divisor 없이 소비. (18자리 > JS Number 안전범위 9e15 → API 응답 문자열·계산 BigInt 필수.)
4. 마이그레이션 데이터 리스크(정정 — 일괄 ×10^9 금지): reviewer 서버 실측 — A 금액컬럼 227개가 6종 이질적 표현이라 일괄 ×10^9은 데이터 손상. 컬럼별 변환식이 다름: decimal(20,9)=×10^9 / decimal(20,18)·(42,18)=이미18 무변환 / decimal(6,0)·(15,2)=KRW·USD 법정화폐 제외 / int=카운트 or 정수PUNK 개별판정(정수PUNK면 ×10^18) / double·float=정밀도 위험 정수화 신중 / varchar(78)=wei문자열 파싱. reviewer가 227컬럼 전수 분류표(docs/A_completeness/A_amount_columns_20260708.tsv) = backend1 마이그레이션 차단 선행. 실행 전 reviewer 컬럼별 값정합(A 원본 diff=0) 교차검증 = 컷오버 DB parity 게이트.
0xc8F7C5de decimals = 18, symbol = PUNK (온체인 eth_call 실측, RPC=api.avax.network 43114). 두번째 주소 0xAF371C1C(PUNKTOKEN_ADDRESS)는 decimals 무응답=토큰 아님(포워더/릴레이어 추정). → B PUNK_DECIMALS=18 정합 확인.:216 parseUnits(rewardVal,9)의 rewardAmountWei는 온체인 전송액이 아니라 sendData.rewardAmount(:248)로 플랫폼 DB에 보고하는 표시/회계값(rewardVal×10^9, Mina 나노 표기). 온체인 실전송은 컨트랙트 REWARD_AMOUNT가 18로 수행. → 온체인 리워드 decimal 리스크 없음, B 18 정답. 9자리 값은 플랫폼 표시 레이어 부채로 위 통일안이 흡수.parseUnits(rewardAmount,18), T5 실측 reward 0.001→1e15 교차일치). 온체인 reward decimal 전 구간 18(deploy:2057·deposit:1700·transfer:1880·fee:1748·메인넷 PUNK 18) = B 완전 정합.| 도메인 | 담당 | 서명 상태 | 비고 |
|---|---|---|---|
| 프론트 punkpoll_web | dev | ✓ 서명(07-08 00:52) | 서버 도달성 재실행·미격상 0 |
| 프론트 도메인4 | dev2 | ✓ 서명 | 서버 재실측·TokenCirculation 오판 자기정정·미격상 0 |
| 온체인 5모듈 | reviewer | ✓ 서명 | src-only 74,900·decimals 18·live/dead·공식 전건·미격상 0 |
| 온체인 B측·A수치 | backend4 | ✓ 서명 | B측 v2dev 2cf3e1a 실측·A는 reviewer 인용·미격상 0 |
| DB 스키마/테이블 | backend1 | ✓ 서명(3차) | mysqldump 정본 platform 90·mina 353 |
| 백엔드/서비스 LOC | backend1 | ✓ 서명 | 서버 재측정 값일치. 소스-only=api 57,151·kakao 39,396(명시 dead파일만 제외 기준통일: server2·server_backup·test/)·bot 30,462. systemApi 위치=~/punkpollBotAvax(레포명≠데몬명) |
| 챗봇 서버 live-code | backend1 | ✓ 서명 | kakaoServerRefactored.js 단일진입(kakao-punkpoll·tbridge-kakao)·live 모듈 추적·dead 7파일 확정·파이프라인·V3초안 완료 |
🔒 전 도메인 담당서명 완료 (LOCKED 2026-07-08). 프론트·온체인·DB·백엔드LOC·단위·챗봇 전건 담당 본인 서버실측 서명.