피드로 돌아가기
pingtrace 1.0: why I rewrote from npm to Go
Dev.toDev.to
Infrastructure

배포 제약 해결과 동시성 최적화를 위한 Node.js에서 Go로의 아키텍처 전환

pingtrace 1.0: why I rewrote from npm to Go

Tia Zanella2026년 6월 3일4intermediate

Context

TypeScript/npm 기반의 초기 버전으로 워크플로우 검증을 완료했으나, 런타임 설치가 불가능한 Jump Host나 진단 VM 등 제한된 환경에서의 배포 제약 발생. Node.js 런타임 의존성으로 인한 진단 도구의 접근성 저하와 대량 타겟 프로빙 시의 성능 한계 직면.

Technical Solution

  • Runtime Dependency 제거를 위한 Go 기반 Standalone Binary 구조 설계
  • CIDR 블록 및 CSV 타겟의 대량 처리를 위한 Worker Pool 기반 Concurrency 모델 도입
  • 시스템 네이티브 툴(ping, traceroute, tracert)의 출력을 파싱하여 신뢰성을 유지하는 Wrapper 아키텍처 채택
  • Charmbracelet 생태계를 활용한 Terminal-native Interface 및 TUI 구현을 통한 UX 개선
  • Public/Private DNS 및 외부 API(ipinfo.io, PeeringDB) 연동을 통한 데이터 Enrichment 로직 통합
  • 다중 플랫폼(Linux, macOS, Windows) 대응을 위한 크로스 컴파일 배포 파이프라인 구축

- 진단/유틸리티 도구 설계 시 사용자의 실행 환경(Runtime 존재 여부)을 최우선 제약 사항으로 고려 - 초기 MVP는 생산성이 높은 언어로 검증하되, 배포 및 성능 최적화 단계에서 적합한 언어로 재작성 검토 - 외부 도구의 결과물을 파싱하여 가공하는 Wrapper 구조 설계 시 OS별 명령어 차이에 대한 추상화 계층 구현

원문 읽기