본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

Nix는 왜 존재하고 왜 어려울까

~12 min · nix, overview, declarative

Level 0입문자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

Nix는 한 가지 급진적인 생각 위에 세워졌어. 패키지 설치는 입력에 대한 순수 함수여야 한다는 거야. 입력이 같으면 어떤 컴퓨터에서 몇 번 실행하든 비트 단위로 같은 결과가 나와야 해. Nix의 강력한 기능과 낯선 모습은 모두 이 원칙에서 시작돼.

장점은 분명해. 원자적 업그레이드 덕분에 반쯤 바뀐 상태가 남지 않고, 업그레이드는 완전히 성공하거나 이전 상태를 그대로 유지해. 여러 버전의 공존으로 Python 3.10과 3.13을 동시에 설치해 프로젝트별로 쓸 수 있어. 오늘의 변경이 개발 환경을 깨뜨리면 nix-env --rollback으로 즉시 롤백할 수 있지. 저장소의 flake.nix는 운영체제나 기존 PATH와 무관하게 모든 팀원에게 같은 OpenSSL, Python, Postgres를 제공하는 재현 가능한 개발 환경을 만들어. 여기에 80,000개가 넘는 패키지를 가진 거대한 nixpkgs까지 더해져.

낯선 점도 뚜렷해. Nix에는 같은 이름의 순수 함수형 설정 언어가 있고, 공식 문서는 오랫동안 간결하면서도 학술적인 문체였어. 오류 메시지도 이해하기 어렵기로 유명하지. 학습 곡선은 이 퀘스트에서 가장 가파르므로, 몇 시간이 아니라 몇 주 동안 조금씩 익힐 시간을 잡는 편이 현실적이야.

Mac 개발자에게 가장 값진 쓰임은 flakes로 만드는 프로젝트별 개발 환경이야. 시스템 전체의 Homebrew를 Nix로 바꾸지 않아도 프로젝트에 flake.nix를 넣으면, 모든 기여자가 첫 nix develop에서 정확히 같은 도구 버전을 받아. '내 컴퓨터에서는 되는데'라는 문제를 크게 줄일 수 있어.

Code

다른 패키지 관리자에는 없는 Nix 기능·text
  Atomic 업그레이드      - 절대 반쯤 업그레이드 안 됨; 한 명령으로 rollback
  다중 버전              - Python 3.10 + 3.13 + 3.14, 충돌 0
  재현 가능 빌드         - 같은 flake = 같은 binary, 매번
  프로젝트별 환경        - 'nix develop' 으로 프로젝트 도구 진입
  80,000+ 패키지         - 존재하는 단일 패키지 repo 중 최대
  Cross-platform         - 같은 flake 가 macOS / Linux 둘 다에서
  함수형 설정 언어       - 명령형 아니라 선언형

비용: 내재화 몇 주. 보상: drift 없는 도구.

External links

Exercise

https://search.nixos.org/packages를 열고 자주 쓰는 도구 세 개를 검색해 봐. ripgrep, ffmpeg, postgresql 같은 도구가 모두 nixpkgs에 있는지 확인하고, 각각을 프로젝트의 flake.nix에 한 줄로 추가할 수 있다는 점을 적어 봐. nixpkgs의 방대한 규모는 잘 알려지지 않은 강점이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.