캐싱
Nix가 일부 아티팩트를 불필요하게 빌드하는 대신 이미 빌드된 아티팩트를 사용하는 메커니즘입니다.
We recommend starting with the Nix quick start and consulting concept docs primarily for clarification. Feel free to click x to the right to disable this notification on all concept docs.
기본적으로 Nix는 _캐싱_을 사용하여 패키지 빌드를 더 빠르고 효율적으로 만듭니다. 이는 결과적으로 개발 환경 생성 및 NixOS 환경 구축과 같이 패키지 빌드와 관련된 다른 Nix 작업을 더 빠르고 효율적으로 만듭니다.
빌드 대 캐싱
Nix가 패키지의 파생을 실현하여 패키지를 빌드할 때마다 파생의 전체 클로저를 실현해야 합니다. 즉, 패키지의 파생을 빌드하는 데 필요한 모든 파생과 해당 파생을 빌드하는 데 필요한 파생 등을 실현해야 합니다. 일부 패키지에는 작은 클로저(종속성 트리)가 있는 반면 다른 패키지에는 수천 개의 파생이 포함된 거대한 클로저가 있어 빌드 효율성이 Nix의 주요 관심사입니다.
Nix가 파생을 실현할 때마다 수행하는 작업은 다음과 같습니다.
-
파생에 대한 해시를 계산하고 해당 해시를 사용하여 다음과 같은 형식의 Nix 스토어 경로를 계산합니다(가상 Git 패키지의 경우).
/nix/store/ 1. Nix store prefixf8f72p3xxr20k111mpg4kk93i4cp74qb 2. Hash part-git-2.37.0 3. Package name -
스토어 경로를 확보하면 Nix는 파생이 이미 빌드되었는지 확인합니다. 먼저 Nix는 구성된 Nix 스토어를 확인하여
/nix/store/f8f72p3xxr20k111mpg4kk93i4cp74qb/git-2.37.0경로가 이미 있는지 확인합니다. 그렇다면 빌드하는 대신 해당 경로를 사용합니다. 그렇지 않으면… -
구성된 바이너리 캐시에 스토어 경로가 있는지 확인합니다.
-
스토어 경로가 구성된 Nix 스토어나 구성된 바이너리 캐시에 모두 없으면 Nix는 이 목록의 모든 단계를 재귀적으로 따르고 가능한 경우 이미 실현된 패키지를 사용하고 필요한 것만 빌드하여 처음부터 파생을 빌드합니다.
캐싱이 없으면 실현에는 매번 모든 것을 처음부터 빌드하는 작업이 포함되어 Nix의 효율성이 훨씬 떨어지고 결과적으로 패키지 관리자 및 빌드 도구로서의 매력이 훨씬 떨어집니다!
바이너리 캐시
로컬 Nix 스토어 외에도 HTTP를 통해 미리 빌드된 바이너리를 제공하는 _바이너리 캐시_라는 원격 Nix 스토어를 사용하여 Nix 아티팩트를 캐시할 수도 있습니다. 대부분의 경우 바이너리 캐시는 Nix 스토어와 마찬가지로 작동하므로 Nix는 파생의 Nix 스토어 경로를 기반으로 항목이 이미 빌드되었는지 신속하게 확인할 수 있습니다.
기본적으로 Nix는 cache.nixos.org를 바이너리 캐시로 사용하며, 이 캐시는 모든 사람에게 공개되고 지속적인 통합 시스템에 의해 채워집니다. 이 커뮤니티 캐시 외에도 자체적으로 실행하거나 Cachix와 같은 타사 바이너리 캐시 서비스를 사용할 수도 있습니다.