KlickLab의 데이터 파이프라인은 고객의 모든 상호작용을 분석하는 것을 목표로 한다.
이는 대규모 트래픽을 지연 없이 처리해야 한다는 것을 의미했다.
시스템이 과연 피크 타임의 부하를 견딜 수 있는지,
병목 지점은 어디인지에 대한 답을 찾기 위해
실제와 같은 트래픽을 시뮬레이션할 강력한 도구가 필요했다.
그래서 우리는 자체적인 트래픽 생성 도구.
팬텀 플로우를 만들었다.
초기 버전은 익숙하고 생산성이 높은 Node.js의 cluster
모듈을 활용해 멀티코어 기반의 트래픽 생성기로 만들어졌다. 간단한 테스트에는 충분했으나, 목표 성능을 향해 나아가면서 몇 가지 명확한 한계에 부딪혔다.
개발 및 초기 테스트는 주로 Windows 환경에서 이루어졌으며,
이로 인해 다음과 같은 운영체제 수준의 제약도 성능에 영향을 주었다.
이러한 제약은 도구의 실제 성능과 확장성을 측정하는 데 장애 요소로 작용했으며, 이후 Linux 환경으로의 전환을 결정하게 된 또 하나의 계기가 되었다.
시스템의 한계를 돌파하기 위해 언어와 아키텍처를 재검토했고,
Go는 모든 요구사항에 대한 명쾌한 해답을 제시했다.
pprof
초기 개발은 Windows에서 이루어졌으나,
고부하 테스트를 진행하며 운영체제 수준의 명확한 한계에 직면했다.
네트워크 성능: Linux의 epoll 모델은 Windows의 IOCP에 비해
고성능 네트워크 처리에 더 최적화되어 있으며, 적은 커널 튜닝으로도 높은 성능을 보장한다.
자원 관리 한계: Windows는 동시에 열 수 있는 소켓 핸들 수에 대한 제약이 더 크다.
수만 개의 동시 연결을 시뮬레이션해야 하는 상황에서 이는 명백한 병목점으로 작용했다.
PhantomFlow는 Go로 재작성된 CLI 기반의 고성능 트래픽 시뮬레이터이다.
pprof
로 성능 병목 분석 가능go build phantomflow.go
# 시간 기반 모드 (5분 동안 512 워커로 실행)
./phantomflow -d 300 -c 512 http://YOUR-NLB-ENDPOINT/api/analytics/collect
# 요청 수 기반 모드 (100만 개 요청, 256 워커로 실행)
./phantomflow -n 1000000 -c 256 http://YOUR-NLB-ENDPOINT/api/analytics/collect
2025-07-18 21:30:01 [진행] 성공: 153024, 실패: 18, RPS: 5098.12
2025-07-18 21:30:02 [진행] 성공: 158210, 실패: 18, RPS: 5186.00
코드에 포함된 pprof 서버 덕분에 부하 테스트 중에도 PhantomFlow의 내부를 들여다볼 수 있다.
// 단 한 줄로 활성화되는 강력한 프로파일링 서버
go func() {
_ = http.ListenAndServe("localhost:6060", nil)
}()
ssh -L 6060:localhost:6060 -i your-key.pem ubuntu@your-ec2-ip
이후 브라우저에서 아래 주소로 접속
http://localhost:6060/debug/pprof/
Node.js로 시작하여 Go로 전환하고, AWS 환경에 맞춰 최적화하는 과정을 통해
PhantomFlow는 KlickLab의 데이터 수집 파이프라인을 검증하는 핵심 도구가 되었다.
이 도구는 인프라의 한계를 사전에 파악하고,
병목 지점을 개선하며, 사용자에게 항상 안정적인 서비스를 제공할 수 있게 해준다.
GitHub 저장소: https://github.com/Eatventory/PhantomFlow