피드로 돌아가기
Dev.toDevOps
원문 읽기
mockd가 7개 프로토콜을 단일 Go 바이너리로 통합해 개발 환경 복잡도를 4개 런타임에서 0개 런타임으로 축소
7 Protocols, 1 Binary, 0 Dependencies
AI 요약
Context
개발자가 HTTP 테스트를 위해 WireMock(Java, 200MB Docker), WebSocket용 Node 스크립트, MQTT용 Mosquitto, gRPC용 Go 스텁을 각각 운영하고 있었다. 4개의 도구, 4개의 런타임, 4개의 설정 파일, 4개의 포트를 관리해야 했으며 실제 코드 작성보다 mock 인프라 구성에 더 많은 시간을 소비했다.
Technical Solution
- Go를 선택해 CGO_ENABLED=0로 정적 링크된 단일 바이너리(43MB) 생성: 공유 라이브러리, 런타임, 인터프리터 없이 모든 Linux/macOS/Windows 환경에서 실행 가능
- goroutine으로 7개 프로토콜(HTTP, GraphQL, gRPC, WebSocket, MQTT, SSE, SOAP) 동시 운영: 각 리스너가 독립적 goroutine에서 동작하며 서로 블로킹하지 않음
- 단일 YAML/JSON 설정 파일로 모든 mock 정의: 34개 faker 함수({{faker.name}}, {{uuid}}, {{now}}, {{random.int}}) 동일하게 적용
- 공통 인프라 통합: 템플릿 엔진, 요청 로깅(HTTP/GraphQL/gRPC/WebSocket/MQTT 통합), Chaos 프로필(HTTP/GraphQL/gRPC/SOAP 지원), 8개 포맷 import(OpenAPI, Postman, HAR, WireMock, cURL, Mockoon, WSDL, JSON)
- GOOS=darwin GOARCH=arm64 cross-compilation으로 단일 GitHub Actions 워크플로우에서 6개 OS/arch 바이너리 배포
Impact
CI/CD 배포 시간 2초(curl로 설치) vs 200MB Docker 이미지 풀링, 개발 머신 온보딩 시간 "mockd install" vs "Java 17 + Docker Desktop 설치", air-gapped 환경에서 단일 바이너리 SCP 전송 vs node_modules 다중 파일 처리.
Key Takeaway
정적 링크된 단일 바이너리와 goroutine 기반 동시성 모델을 조합하면, 의존성 0으로 여러 프로토콜을 한 프로세스에서 관리할 수 있으며 개발 환경의 설정 복잡도를 급격히 줄일 수 있다.
실천 포인트
다중 프로토콜 테스트 환경을 구성하는 팀에서 mockd 같은 통합 mock 도구를 도입하면, 런타임 의존성을 0개로 유지하면서도 HTTP, GraphQL, gRPC, MQTT 등 7개 프로토콜을 하나의 커맨드로 관리할 수 있어 개발자 생산성과 CI/CD 파이프라인 속도를 함께 향상시킬 수 있다.