유형: 현황 (A 실 운영 데몬 맵 — live 판정의 authority)
최종 업데이트: 2026-07-07 (manager 실 pm2/systemd 직접 확인 · 13.209.222.241 Main)
웹뷰: https://chat.punkpoll.com/doc/daemons
A 실 운영 데몬 맵 (13.209.222.241 Main/prod)
이게 live 판정의 유일한 기준. 코드 추정(import·.bak·"v2" 네이밍)이 아니라 실제 실행 중인 데몬 = live, 그 데몬이 실행하는 스크립트 + 그 import 그래프 = live 코드. (jegwon 지적: 실 데몬을 봐야 실제 운영 파악.)
systemd (Main prod)
| 서비스 | repo/스크립트 | 역할 |
| punkpoll-web.service | ~/data/punkpoll_web (Next.js) | 웹 프론트 (live) |
| punkpoll-api.service | ~/data/punkpoll_api (Spring Boot Java 17) | 코어 API (live) |
| nginx | — | 리버스 프록시 |
| (dev: punkpoll-web-dev :3010 / punkpoll-api-dev :9210) | | Dev |
pm2 (Main prod, ubuntu user)
| 데몬 | repo · 스크립트 | 역할 |
| kakao-punkpoll | ~/kakaoChatBotNodeJsPunkpoll · kakaoServerRefactored.js | 카카오 챗봇 (Node·live) |
| tbridge-kakao | ~/kakaoChatBotNodeJsTbridge · kakaoServerRefactored.js | 티브릿지 카카오 |
| txSender | ~/txSender · daemons/txSender.js | 온체인 TX 전송 |
| txMonitor | ~/txSender · daemons/txMonitor.js | TX 모니터 |
| healthServer | ~/txSender · monitoring/healthServer.js | 헬스 |
| server | ~/punkpollAvaxBlockChainApi · src/server.js | 블록체인 API (HTTP) |
| jobProcessor | ~/punkpollAvaxBlockChainApi · src/jobProcessor.js | job 처리 |
| fee-dashboard-server | ~/punkpollAvaxBlockChainApi · src/fee-dashboard-server.js | 수수료 대시보드 |
| txConfirmationWorker.v2 | ~/punkpollAvaxBlockChainApi-Ver2 · workers/txConfirmationWorker.v2.js | TX 확인 (별도 repo -Ver2·live) |
| PunkpollLightApi2-Main | ~/PunkpollFungibleTokenAvax · punkpollApi/PunkpollLightApi2.js | IPFS 업로드+참여큐+콜백 (LightApi2·live) |
| punkpollSystemApi | ~/punkpollBotAvax · punkpollSystemApi.js | 텔레그램/시스템 API |
| telegramEchoBot | ~/punkpollBotAvax · telegramBot/index.js | 텔레그램 봇 |
| ipfs-pin-server | ~/ipfs-pin-server · src/index.js | IPFS 핀 |
| panelManager | ~/punkpollUtil · panelManager.js | 패널 관리 |
| punkpoll-wallet-standalone | ~/data/standalone_wallet/.../punkpoll_wallet_standalone | 웹뷰 지갑 |
인증 (punkpoll-dev user, node)
| 데몬 | repo/스크립트 |
| auth-gateway | node ~/punkpoll-auth-gateway/dist/main.js (punkpoll-dev user) |
비-펑크폴/보조 (참고)
nemo-persons·nemo-autobot(python)·pm2-logrotate(infra).
🔴 live/dead 판정 정정 (실 pm2 기준 — 코드추정 오류 교정)
| 앞선 판정(오류) | 실제(pm2 확인) |
| kakaoChatBot = PHP(8599줄) 현행 | ❌ PHP는 레거시(dead). live=kakaoChatBotNodeJs / kakaoServerRefactored.js(Node). 제 §6-2 감사는 죽은 코드베이스 대상 — 폐기·재작성 필요. |
| kakaoServer.js vs Refactored 병존, live 미정 | ✅ kakaoServerRefactored.js = live(pm2 실행). kakaoServer.js=dead. |
| txConfirmationWorker.v2 = 병존 dead 후보(reviewer) | ❌ v2 = live, 그것도 별도 repo punkpollAvaxBlockChainApi-Ver2. 메인 repo와 다름. |
| PunkpollLightApi=live / LightApi2=병존 legacy(reviewer) | ❌ 역전: PunkpollLightApi2 = live(PunkpollLightApi2-Main). LightApi=dead. |
| punkpollAvaxBlockChainApi 단일 repo | ✅ 실제 2 repo: 메인(server·jobProcessor·fee-dashboard) + -Ver2(txConfirmationWorker.v2). |
재정의 규율
- 모든 live-code 라이브러리 문서는 이 데몬 맵의 실행 스크립트를 진입점으로 재기준. 데몬이 안 돌리는 코드 = dead(레거시).
- kakao 도메인 감사 = kakaoChatBotNodeJs(Refactored)로 전면 재작성(PHP본 폐기).
- 온체인 = blockchainApi 메인 + -Ver2 + FungibleToken(LightApi2) + txSender, 실행 데몬 기준 재확정.
검증된 데몬 연결 매트릭스 (실 .env·2026-07-07, 추측 0)
| 데몬(repo) | 주 DB | 보조 DB | Redis | 체인 | API 호출(verified) |
| punkpoll-api(Spring) | punkpoll_platform | punkpoll_mina(알림톡) | — | — | — |
| kakaoChatBotNodeJs | punkpoll_mina | punkpoll_platform | ElastiCache(punkpoll-main-redis) | — | — |
| punkpollBotAvax(systemApi·tg) | punkpoll_mina | punkpoll_platform | — | — | api-system·api-blockchain·api-ipfs |
| txSender | punkpoll_mina | punkpoll_platform | localhost | Avalanche 43114 | api-blockchain·backend(punkpoll_api)/api/sys |
| blockchainApi | punkpoll_mina | punkpoll_platform | — | 43114 | api-ipfs·api-system·/api/sys |
| blockchainApi-Ver2 | punkpoll_mina | punkpoll_platform | — | 43114 | — |
| PunkpollFungibleTokenAvax(LightApi2) | punkpoll_mina | — | — | (via api-blockchain) | api-blockchain |
| panelManager(punkpollUtil) | punkpoll_mina | — | — | — | — |
| ipfs-pin-server | (로컬 IPFS 노드 127.0.0.1:5011) | — | 127.0.0.1 | — | — |
핵심: punkpoll_mina = 백엔드 공유 주 DB(챗봇·온체인·util 전부), punkpoll_platform=web/api 주 DB. 둘 다 여러 데몬이 크로스 접근(= 크로스호스트 부채의 실체). api-*.punkpoll.com = nginx vhost(→ 각 데몬). ⚠️ 앞 다이어그램 v1의 'bot→api' 는 오류(실제=bot→punkpoll_mina 주력) — jegwon 지적 정확.
검증된 연결만 (file:line 근거) + 미확인 명시 — 추측 제거본 (2026-07-07)
규칙: 직접 연 파일의 file:line만 진술. 확인 안 한 엣지는 안 그리고 '미확인'으로 남김. 완성도보다 정확성.
✓ 검증됨 (실제 연 파일)
| 엣지 | 근거(file:line 또는 .env) |
| 각 데몬 → 주/보조 DB | 각 repo .env DB_NAME/PLATFORM_DB_NAME (위 매트릭스) |
| txSender → Redis(local)·Avalanche 43114 | txSender .env REDIS_HOST·AVAX_RPC_CHAIN_ID |
| txSender → punkpoll-api :9200 /api/sysres/supl·subl (콜백) | 서버 실코드 callback.js:259·328 + 서버 .env PLATFORM_API_PREFIX=http://localhost:9200 (⚠️reviewer의 3.35.226.102=stale 로컬·폐기) |
| txSender ⇄ tx_pending·tx_confirmed (mina DB) | txSender.js:267·273·552 (이중발행 방지 조회) |
| LightApi2 → Redis(참여인원 INCR) | joinSurveyQueue.js:322 survey:participant:{sId} |
| LightApi2 → api:9200·blockchainApi | LightApi2 .env PLATFORM_API_PREFIX·BLOCKCHAIN_API_URL |
| blockchainApi = joinSurvey(참여TX) 안 함 → txSender가 담당 | jobProcessor.js:3·326 "joinSurvey는 txSender 프로젝트로 분리됨" 명시 |
blockchainApi .env 호출대상 정의 | IPFS_API_URL·BLOCKCHAIN_API_URL·SYSTEM_API_URL·PLATFORM_API_PREFIX (정의 확인·정확 call 세만틱 미확인) |
| punkpollSystemApi 실 엔드포인트 | punkpollSystemApi.js 라우트 실측(/joinSurvey·/mint·/balanceOf·/token·alimtalk·/api/sysres/*·imageInfo·kakaoLogout) |
✓ 추가 서버검증 (reviewer, 서버 running 코드 file:line)
- 참여 흐름: blockchainApi → tx_tracking(mina DB) → txSender → Avalanche 메인넷 43114 → 콜백 punkpoll-api:9200. (서버 코드 확정)
- api-blockchain.punkpoll.com → nginx → localhost:3838(blockchainApi server). (서버 확정)
✗ 미확인 (파일 안 열었음 — 안 그림)
- LightApi2/blockchainApi → txSender 정확 트리거 경로(tx_pending write→txSender 픽업 여부): 추정, 확인 안 함.
- txConfirmationWorker.v2(blockchainApi-Ver2) 실제 outbound 엣지: 별도 repo, 미추적.
- SBT mint 흐름·chain→콜백 상세 경로: 미확인.
- api-blockchain.punkpoll.com → nginx → localhost:3838(blockchainApi server) [reviewer 서버검증 ✓]. 나머지 vhost(api-ipfs·api-system·backend)→데몬 매핑은 nginx conf 서버 확인 남음.
- 봇→punkpoll_api 정확 호출 지점(양방향 여부): 미확인.
이전 다이어그램(v1·v2)의 위 '미확인' 화살표는 spec/문서로 메운 추측이었음(폐기). 데몬맵 이미지는 위 ✓ 검증분만으로 재작성 예정.
런타임 실측 연결 (netstat established·2026-07-07·config 아닌 실 연결)
jegwon: config .env는 stale IP(3.35.226.102·3.36.52.184=옛서버) 있음. 실행 프로세스의 실제 연결이 진실. 모두 13.209.222.241.
| 데몬(pid) | 실제 established 연결 |
| txSender | 172.31.18.117:6603(DB×4) · 54.180.110.55:443(외부 HTTPS=Avalanche RPC/api) |
| PunkpollLightApi2-Main | 172.31.18.117:6603(DB) |
| server(blockchainApi) | 54.180.110.92:443(HTTPS) · 172.31.18.117:6603(DB) |
| txConfirmationWorker.v2 | 172.31.18.117:6603(DB×2) |
| kakao-punkpoll | 172.31.21.2:6603 + 172.31.18.117:6603 (DB 2개) · 172.31.7.205:6379(Redis ElastiCache) |
| punkpollSystemApi | 172.31.18.117:6603(DB) |
포트 리슨(실측): 9200=punkpoll-api(java) · 9400=LightApi2(node) · 3838=blockchainApi(node) · 3100=node(미확인).
확정(런타임): 전 pm2 백엔드 데몬(punkpoll_api java 제외)이 172.31.18.117(mina)에 상시 연결. ⚠️ punkpoll_api(systemd java)는 별개: 서버 application-prod.properties spring.datasource.url→punkpoll_platform(172.31.21.2·주력) + alimtalk.datasource→punkpoll_mina(보조). 즉 api=platform 주력(backend1 §1 정확·상충 없음). kakao는 DB 2개(+172.31.21.2)+Redis. txSender·blockchainApi만 외부 HTTPS(:443).
미확인: 데몬 간 HTTP 호출은 per-request라 스냅샷 미포착. config 주소(9200 등)는 stale IP 혼재 → 코드 엔드포인트별 검증 필요(도메인 오너). 172.31.18.117 = 어느 RDS인지(mina vs platform) DNS 확인 필요.
RDS DNS 확정 (서버 getent)
- 172.31.18.117 = punkpoll_mina (punkpoll-avax RDS) ← 전 백엔드 데몬 주 연결
- 172.31.21.2 = punkpoll_platform (punkpoll-mina RDS) ← kakao 보조·api 주력
- ⚠️ 로컬 저장소 stale: 로컬 repo 커밋 2026-04-27. 서버 실행 repo도 4~5월(txSender 04-09·blockchainApi 04-22·FungibleToken 05-04·kakao 05-21)=running 코드. 코드 검증은 서버 ~/디렉토리 기준(로컬 아님).
⚠️ RDS 인스턴스명 ↔ DB명 스왑 함정 (DNS 실측 확정)
| DB (실사용) | RDS 인스턴스명 | 사설 IP | 사용 |
| punkpoll_mina | 인스턴스 punkpoll-avax | 172.31.18.117 | 백엔드 전 데몬 주DB |
| punkpoll_platform | 인스턴스 punkpoll-mina | 172.31.21.2 | web/api 주DB |
함정: 인스턴스명이 DB명과 엇갈림(punkpoll-avax 인스턴스가 punkpoll_mina DB를, punkpoll-mina 인스턴스가 punkpoll_platform DB를 호스팅). databases.md도 동일 경고. 마이그레이션 호스트 특정 = 위 사설IP/실 DNS 기준(인스턴스명으로 판단 금지). backend1 문서의 'punkpoll_platform=punkpoll-platform RDS'는 오기(그런 인스턴스 없음).
온체인 데몬 서버-확정 역할 (reviewer 서버 pm2+file:line·2026-07-07)
| 데몬(pm2 online) | 서버-확정 역할 | file:line |
| txSender | tx_tracking(:253) 픽업→서명TX 제출(메인넷43114)→tx_pending 추적 | txSender.js:253 |
| txMonitor | 모니터 + SBT 발행 주체(receiptSbtService·mintReceiptSbtIfEnabled 논블로킹·Pinata+mint) | txMonitor.js:103·826 |
| txConfirmationWorker.v2 | TX 컨펌(WORKER_CONFIRMATIONS_REQUIRED) | Ver2 scripts/start-tx-worker.mjs |
| blockchainApi server(:3838) | /join-survey→tx_tracking INSERT·배포·수수료 | server.js |
| PunkpollLightApi2(:9400) | 참여큐(Redis INCR 인원제한)+IPFS→blockchainApi | joinSurveyQueue.js:322 |
| ipfs-pin-server(:3100) | Pinata 핀+BullMQ | src/index.js |
🔴 서버-확정 정정(로컬 추적 오류): sbtMinter·txConfirmer 데몬 = pm2 미존재 = prod 미실행(dead). repo에 파일 있으나 안 돎. 로컬 추적서 이 둘을 live로 본 것 정정. SBT/컨펌은 실행 데몬(txMonitor·v2)이 흡수. → 라이브러리 온체인부 이 기준으로 정합.