Nix를 사용해 Gleam 프로젝트를 AppImage로 번들링

발행: (2025년 12월 30일 오전 02:01 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

nix bundle

Nix에는 편리하지만 아직 불안정한 nix bundle이라는 명령이 있습니다.

문서: nix3‑bundle manual

이 명령은 Nix 의존성을 하나의 바이너리로 패키징하여 독립 실행 파일을 만들 수 있게 해줍니다.

예시

nix bundle nixpkgs#python314

bundler

--bundler 옵션을 지정하면 번들링 알고리즘을 바꿀 수 있습니다.

예를 들어 github:ralismark/nix-appimage를 사용하면 단일 바이너리를 AppImage 형태로 생성합니다.

저장소: nix‑appimage

위에서 언급한 Python 3.14를 AppImage로 번들링하려면

nix bundle --bundler github:ralismark/nix-appimage nixpkgs#python314

AppImage는 실행 시 필요한 파일만 즉시 추출해 내는 방식으로 동작하므로, 기존 번들링 방식에 비해 시작 속도가 빠릅니다. 따라서 일반적으로 번들링에는 AppImage 사용을 권장합니다.

Gleam 번들링

예전에는 Gleam으로 단일 바이너리를 만들려면 garnet 같은 도구가 필요했으며, 이는 Deno와 Bun에 의존하고 JavaScript 타깃에만 제한되었습니다.

여기서 소개하는 방법은 Gleam이 사용하는 런타임 기능에 의존하지 않으며, Erlang 타깃도 단일 바이너리로 만들 수 있게 해줍니다.

시범 버전은 여기에서 확인할 수 있으며, nix build를 실행하면 단일 바이너리가 생성됩니다:

sandbox‑gleam appimage_build

이 프로젝트는 gleam2nix를 사용해 Gleam 코드를 Nix로 빌드합니다:

gleam2nix

요약

  • nix bundle을 사용하면 어떤 패키지든 단일 바이너리로 만들 수 있습니다.
  • --bundler 옵션으로 번들링 방식을 전환할 수 있습니다.
  • AppImage를 사용하면 빠른 시작 속도를 갖는 단일 바이너리를 얻을 수 있습니다.
  • 이를 통해 Erlang을 타깃으로 하는 Gleam 프로젝트도 단일 바이너리로 만들 수 있습니다.
  • 편리하지만 바이너리 크기가 상당히 커질 수 있습니다(예: 수백 MB).
Back to Blog

관련 글

더 보기 »

[Boost]

5-Second Boot: 1GB RAM 머신을 위한 미니멀리스트 'Browser OS' 구축 techno kraft ・ Jan 1 성능 도전 과제 논의 archlinux