유형: 현황 (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.jsTX 모니터
healthServer~/txSender · monitoring/healthServer.js헬스
server~/punkpollAvaxBlockChainApi · src/server.js블록체인 API (HTTP)
jobProcessor~/punkpollAvaxBlockChainApi · src/jobProcessor.jsjob 처리
fee-dashboard-server~/punkpollAvaxBlockChainApi · src/fee-dashboard-server.js수수료 대시보드
txConfirmationWorker.v2~/punkpollAvaxBlockChainApi-Ver2 · workers/txConfirmationWorker.v2.jsTX 확인 (별도 repo -Ver2·live)
PunkpollLightApi2-Main~/PunkpollFungibleTokenAvax · punkpollApi/PunkpollLightApi2.jsIPFS 업로드+참여큐+콜백 (LightApi2·live)
punkpollSystemApi~/punkpollBotAvax · punkpollSystemApi.js텔레그램/시스템 API
telegramEchoBot~/punkpollBotAvax · telegramBot/index.js텔레그램 봇
ipfs-pin-server~/ipfs-pin-server · src/index.jsIPFS 핀
panelManager~/punkpollUtil · panelManager.js패널 관리
punkpoll-wallet-standalone~/data/standalone_wallet/.../punkpoll_wallet_standalone웹뷰 지갑

인증 (punkpoll-dev user, node)

데몬repo/스크립트
auth-gatewaynode ~/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).

재정의 규율


검증된 데몬 연결 매트릭스 (실 .env·2026-07-07, 추측 0)

데몬(repo)주 DB보조 DBRedis체인API 호출(verified)
punkpoll-api(Spring)punkpoll_platformpunkpoll_mina(알림톡)
kakaoChatBotNodeJspunkpoll_minapunkpoll_platformElastiCache(punkpoll-main-redis)
punkpollBotAvax(systemApi·tg)punkpoll_minapunkpoll_platformapi-system·api-blockchain·api-ipfs
txSenderpunkpoll_minapunkpoll_platformlocalhostAvalanche 43114api-blockchain·backend(punkpoll_api)/api/sys
blockchainApipunkpoll_minapunkpoll_platform43114api-ipfs·api-system·/api/sys
blockchainApi-Ver2punkpoll_minapunkpoll_platform43114
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 43114txSender .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·blockchainApiLightApi2 .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)

✗ 미확인 (파일 안 열었음 — 안 그림)

이전 다이어그램(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 연결
txSender172.31.18.117:6603(DB×4) · 54.180.110.55:443(외부 HTTPS=Avalanche RPC/api)
PunkpollLightApi2-Main172.31.18.117:6603(DB)
server(blockchainApi)54.180.110.92:443(HTTPS) · 172.31.18.117:6603(DB)
txConfirmationWorker.v2172.31.18.117:6603(DB×2)
kakao-punkpoll172.31.21.2:6603 + 172.31.18.117:6603 (DB 2개) · 172.31.7.205:6379(Redis ElastiCache)
punkpollSystemApi172.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)

⚠️ RDS 인스턴스명 ↔ DB명 스왑 함정 (DNS 실측 확정)

DB (실사용)RDS 인스턴스명사설 IP사용
punkpoll_mina인스턴스 punkpoll-avax172.31.18.117백엔드 전 데몬 주DB
punkpoll_platform인스턴스 punkpoll-mina172.31.21.2web/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
txSendertx_tracking(:253) 픽업→서명TX 제출(메인넷43114)→tx_pending 추적txSender.js:253
txMonitor모니터 + SBT 발행 주체(receiptSbtService·mintReceiptSbtIfEnabled 논블로킹·Pinata+mint)txMonitor.js:103·826
txConfirmationWorker.v2TX 컨펌(WORKER_CONFIRMATIONS_REQUIRED)Ver2 scripts/start-tx-worker.mjs
blockchainApi server(:3838)/join-survey→tx_tracking INSERT·배포·수수료server.js
PunkpollLightApi2(:9400)참여큐(Redis INCR 인원제한)+IPFS→blockchainApijoinSurveyQueue.js:322
ipfs-pin-server(:3100)Pinata 핀+BullMQsrc/index.js

🔴 서버-확정 정정(로컬 추적 오류): sbtMinter·txConfirmer 데몬 = pm2 미존재 = prod 미실행(dead). repo에 파일 있으나 안 돎. 로컬 추적서 이 둘을 live로 본 것 정정. SBT/컨펌은 실행 데몬(txMonitor·v2)이 흡수. → 라이브러리 온체인부 이 기준으로 정합.