# 스탠드얼론 정적 바이너리로 도구를 배포해야 하는 이유

> Clean Markdown view of GeekNews topic #21970. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=21970](https://news.hada.io/topic?id=21970)
- GeekNews Markdown: [https://news.hada.io/topic/21970.md](https://news.hada.io/topic/21970.md)
- Type: news
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-07-14T10:53:02+09:00
- Updated: 2025-07-14T10:53:02+09:00
- Original source: [ashishb.net](https://ashishb.net/programming/tools-standalone-binaries/)
- Points: 26
- Comments: 3

## Summary

**컴파일 언어**로 개발한 **독립 실행형 정적 바이너리 방식**의 도구는 별도의 **개발 환경이나 의존성 설치 없이 즉시 실행** 가능하다는 점에서 유지관리와 보안 면에서 큰 장점을 가집니다. **컴파일 과정**은 비정상 코드 배포를 사전에 방지하는 **안전장치** 역할을 하며, 의존성 패키지가 많은 **인터프리터 언어 도구**에 비해 **디스크 공간 낭비**와 **보안 취약점 노출** 위험 역시 현저히 줄어듭니다. 또한, 런타임 환경 변화나 외부 저장소 변화와 관계없이 **일관된 사용성**을 보장해 장기적인 **유지보수 부담**을 대폭 낮춥니다. 최근 주요 오픈소스 및 실제 개발 경험을 통해, 도구 개발 시 **Rust, Go, C++** 등의 언어로 **독립 실행형 바이너리** 배포를 권장하는 글입니다.

## Topic Body

- **독립 실행형 정적 바이너리**로 도구를 배포하면 사용자가 별도의 **개발 환경이나 도구 체인 설치 없이** 바로 사용할 수 있음  
- 컴파일 과정은 **비정상 동작 코드 배포 가능성**을 낮추는 **추가 안전장치** 역할을 함  
- 인터프리터 언어 기반 도구는 각종 **의존성 설치 및 디스크 공간 낭비**, **업그레이드 시 반복적 재설치** 등 유지관리 부담이 큼  
- 의존성이 많을수록 **보안 취약점** 및 **공격 표면**이 커지며, 해킹 위험이나 유지보수 이슈가 발생하기 쉬움  
- **컴파일 언어 기반의 정적 바이너리**는 외부 환경 변화에도 영향을 받지 않으므로, 배포 후에도 **안정적 사용성**을 보장함  
  
---  
  
### 독립 실행형 정적 바이너리 배포의 장점  
  
#### 설치 없이 즉시 사용 가능  
  
- Open AI가 Codex를 Rust로 다시 빌드하며 TypeScript를 버린 사례처럼, **컴파일 언어로 작성된 단일 바이너리**를 배포하면 사용자는 추가적인 도구 체인 설치 없이 바로 실행 가능함  
- 가장 큰 장점은 속도나 효율성이 아니라, **설치 없이 곧바로 도구 사용이 가능하다는 점**임  
  
#### 컴파일러의 추가 안전장치  
  
- 컴파일 단계에서의 검사로, **비정상 코드가 배포될 가능성**이 줄어듦  
- 예시로 Google Cloud CLI는 Python 기반으로 여러 번 **실행 불가 상태로 배포**된 적 있음  
- 대규모 팀도 이슈를 피하기 어려운데, 소규모 팀이 인터프리터 언어 기반 도구를 안정적으로 배포하기는 더 어려움  
  
#### 도구 체인 의존성 필요 없음  
  
- **컴파일 언어 기반 도구**는 단일 바이너리만 배포하면 되지만, Python, Ruby, TypeScript 등의 **인터프리터 언어 도구**는 반드시 해당 개발 환경이 필요함  
- Ruby로 작성된 mdl(markdown linter)처럼, 개발 환경(루비)이 업그레이드될 때마다 재설치가 필요함  
- JavaScript 기반 markdownlint 사용 시에는 npm 및 44개 이상의 의존성 설치 필요  
  
#### 디스크 공간 낭비 문제  
  
- 인기 FOSS 코딩 어시스턴트 aider는 Python으로 작성되어 Homebrew로 설치 시 **추가로 51개 패키지**가 설치됨  
- 실제 디스크 사용량이 3GiB 이상 늘어나며, 이는 대부분의 리눅스 배포판 용량보다 큼  
- 반면 Rust로 작성된 uv 패키지 매니저는 **35MiB 단일 바이너리**만으로 설치 가능, Rust 자체나 rustup도 불필요  
  
#### 보안 취약점 증가  
  
- 도구의 **의존성이 늘수록 공격 표면 확대** 및 보안 취약점 노출 가능성 증가  
- OpenAI의 Codex 패키지는 24개 직접, 184개 간접 의존성이 존재함  
- 모든 의존성을 OpenAI가 감사하더라도, 의존성 버전이 고정되어 있지 않아 향후 업데이트로 인해 **취약점, 악성 패키지, 동작 중단** 등의 이슈 발생 가능  
  
#### 유지보수 용이성  
  
- JavaScript, TypeScript, Python 등 인터프리터 언어 기반 도구는 **의존성이 제거되면 동작 불가**  
- left-pad 사건처럼, 단일 패키지 삭제로 대규모 서비스와 도구가 마비될 수 있음  
- **컴파일 언어는 빌드 시점에만 의존성이 필요**하므로, 이후 외부 저장소가 사라져도 도구가 계속 정상 동작  
  
### 작성자의 경험  
  
- adb-enhanced 등 과거 Python으로 도구를 만들었으나, 이후 Go로 gabo, wp2hugo 등 다양한 도구를 오픈소스화  
- **Python, TypeScript 등으로 독립 실행형 도구 개발은 더 이상 고려하지 않음**  
- 반드시 **정적 링크 바이너리 배포가 가능한 언어(Rust, Go, C++ 등)** 로 작성 권장  
  
### 결론  
  
- **독립 실행형 도구는 Rust, Go, C++ 등 컴파일 언어로 개발**  
- 최소한의 외부 의존성만을 가진 **정적 바이너리** 형태로 배포해야 함

## Comments



### Comment 41404

- Author: rikko
- Created: 2025-07-15T09:31:54+09:00
- Points: 1

`디스크 공간 낭비 문제` 에 대해서는 적잖이 공감할수 밖에 없네요...  
AKS 운영하는데 컨테이너 이미지 용량 1GB 넘어가는 파이선 앱 볼때마다 머리가 아픕니다.  
지금은 그냥 도커파일 빌려다가 제가 다시 용량줄여서 올리고, 500MB 이하로 못줄이면 그냥 포기합니다 ㅋㅋ

### Comment 41436

- Author: eususu
- Created: 2025-07-15T15:56:22+09:00
- Points: 1
- Parent comment: 41404
- Depth: 1

pytorch+cuda 의존성에 버전만 다르게 걸리는 패키지가 있어서.. 아주 가관입니다.  
별 기능도 없는 녀석인데 작은 데몬별로 의존성이 2기가 가까이 깔립니다..

### Comment 41440

- Author: rikko
- Created: 2025-07-15T17:48:57+09:00
- Points: 1
- Parent comment: 41436
- Depth: 2

단순 추론용으로 쓰는 cpu 런타임이면 형편은 좀 나은데, 요즘 요구되는 LLM 서비스 때문에 트래픽도 트래픽대로, 용량도 용량대로 늘어나니 비용 계산할때 욕나옵니다 ㅋㅋㅋ
