피드로 돌아가기
Dev.toInfrastructure
원문 읽기
배포 제약 해결과 동시성 최적화를 위한 Node.js에서 Go로의 아키텍처 전환
pingtrace 1.0: why I rewrote from npm to Go
AI 요약
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별 명령어 차이에 대한 추상화 계층 구현