클로저
Nix 패키지의 의존성 트리
먼저 Nix 빠른 시작부터 따라가고, 개념 문서는 주로 보충 설명이 필요할 때 참고하기를 권합니다. 오른쪽의x를 누르면 모든 개념 문서에서 이 안내를 숨길 수 있습니다.
Nix에서 패키지의 클로저는 해당 패키지를 빌드하거나 실행하는 데 필요한 모든 패키지(그리고 그 패키지들을 빌드하는 데 필요한 패키지 등)를 포괄합니다. 패키지를 빌드하는 데 다른 패키지가 전혀 필요하지 않아 클로저에 패키지가 하나도 없을 수도 있고, 반대로 많은 패키지가 있을 수도 있습니다. 패키지를 빌드할 때마다 Nix는 항상 샌드박스 환경에서 해당 패키지의 클로저 전체를 실체화합니다.
빌드 타임 클로저와 런타임 클로저
Nix 클로저에는 두 가지 유형이 있습니다.
- 빌드 타임 클로저에는 패키지를 빌드하는 데 필요한 모든 것이 포함됩니다.
- 런타임 클로저에는 패키지를 실행하는 데 필요한 모든 것이 포함됩니다.
예를 들어, 여러분의 머신에 Firefox를 설치하고 실행하기 위해 Nix로 Firefox를 빌드한다고 가정해 봅시다. GCC 없이는 Firefox를 빌드할 수 없으므로 Firefox의 빌드 타임 클로저에는 GCC가 포함됩니다. 하지만 런타임 클로저에는 GCC가 포함되지 않습니다. Firefox는 이미 빌드되었기 때문입니다! 대신 Firefox가 사용자 인터페이스에 필요로 하는 GTK는 포함됩니다.
Nix 문서나 다른 곳에서 Nix 클로저가 언급될 때는 대개 런타임 클로저를 의미합니다.
클로저 비대화
패키지에 필요하지 않은 것을 클로저에 포함하면 시간, 디스크 공간, 네트워크 대역폭과 같은 자원이 낭비되는데, 이를 클로저 비대화라고 합니다. Nix는 지시받은 것은 무엇이든 항상 실체화하며, 클로저 비대화를 방지하는 내장 메커니즘이 없습니다. 클로저 비대화의 해결책은 늘 주의를 기울이는 것입니다. 직접 작성한 derivation을 항상 점검하여 derivation에 포함한 모든 패키지가 원하는 패키지를 빌드하거나 실행하는 데 정말로 필요한지 확인하십시오.