피드로 돌아가기
Fitz CLI builder: like typer, but in the language
Dev.toDev.to
Infrastructure

라이브러리 의존성 없는 Language-native CLI 빌더를 통한 5.2MB 네이티브 바이너리 구현

Fitz CLI builder: like typer, but in the language

Martin Palopoli2026년 6월 13일10intermediate

Context

기존 CLI 개발 방식은 Typer, Click 등 외부 라이브러리에 의존하여 언어 자체의 특성보다 라이브러리 고유의 Convention에 종속되는 구조적 한계 존재. 특히 Python 기반 도구는 배포 시 PyInstaller와 같은 별도 패키저가 필요하며 런타임 환경 구축의 복잡성이 수반됨.

Technical Solution

  • Compiler 수준의 CLI 통합을 통해 별도 라이브러리 설치 없이 @command 데코레이터만으로 진입점 정의
  • Function Signature 분석 기반의 Convention-over-Configuration 적용으로 기본값 유무에 따른 Positional Argument와 Flag 자동 구분
  • Build-time Dispatch 생성을 통한 런타임 커맨드 룩업 테이블 제거 및 실행 효율 최적화
  • Compiler 레벨의 Short Flag 충돌 검사 로직을 통한 런타임 에러의 빌드 타임 전이
  • Async/Await 함수 감지 시 #[tokio::main] 자동 래핑을 통한 Native Async 런타임 통합
  • 정적 링크(libc 제외) 기반의 단일 네이티브 바이너리 출력으로 배포 파이프라인 단순화

1. CLI 도구 설계 시 라이브러리 종속성을 줄이고 언어 표준 타입 시스템을 활용한 Argument 파싱 검토

2. 런타임에 발생하는 설정 오류를 빌드 타임으로 옮길 수 있는 Static Analysis 도입 고려

3. 서비스 로직과 CLI 도구 간의 Type 공유를 통해 중복 정의를 제거하고 타입 안정성 확보

원문 읽기