이 사이트는 의 를 yeokja로 기계 번역한 비공식 한국어판입니다. 정확한 내용은 원문을 확인하세요.

캐싱

Nix가 일부 산출물을 불필요하게 빌드하는 대신 이미 빌드된 산출물을 사용하는 메커니즘입니다

개념/캐싱

먼저 Nix 빠른 시작부터 따라가고, 개념 문서는 주로 보충 설명이 필요할 때 참고하기를 권합니다. 오른쪽의x를 누르면 모든 개념 문서에서 이 안내를 숨길 수 있습니다.

Nix는 기본적으로 캐싱을 사용하여 패키지 빌드를 더 빠르고 효율적으로 만듭니다. 이는 결과적으로 개발 환경 생성이나 NixOS 환경 구축처럼 패키지 빌드가 수반되는 다른 Nix 작업도 더 빠르고 효율적으로 만듭니다.

빌드와 캐싱

Nix가 패키지의 derivation을 실체화하여 패키지를 빌드할 때마다 해당 derivation의 클로저 전체를 실체화해야 합니다. 즉, 패키지의 derivation을 빌드하는 데 필요한 모든 derivation과 그 derivation들을 빌드하는 데 필요한 derivation 등을 모두 실체화해야 합니다. 어떤 패키지는 클로저(의존성 트리)가 아주 작지만, 어떤 패키지는 수천 개의 derivation이 포함된 거대한 클로저를 가지므로 Nix에서는 빌드 효율성이 주요 관심사입니다.

Nix가 derivation을 실체화할 때마다 수행하는 작업은 다음과 같습니다:

  1. derivation의 해시를 계산하고, 그 해시를 사용하여 다음과 같은 형태의 Nix 스토어 경로를 계산합니다(가상의 Git 패키지의 경우):

            
    /nix/store/ 1. Nix 스토어 접두사
    f8f72p3xxr20k111mpg4kk93i4cp74qb 2. 해시 부분
    -
    git-2.37.0 3. 패키지 이름
  2. 스토어 경로를 얻으면 Nix는 해당 derivation이 이미 빌드되었는지 판단합니다. 먼저 Nix는 설정된 Nix 스토어에 /nix/store/f8f72p3xxr20k111mpg4kk93i4cp74qb/git-2.37.0 경로가 이미 존재하는지 확인합니다. 존재한다면 빌드하지 않고 그것을 사용합니다. 존재하지 않는다면…

  3. 설정된 바이너리 캐시에 해당 스토어 경로가 존재하는지 확인합니다.

  4. 스토어 경로가 설정된 Nix 스토어에도, 설정된 바이너리 캐시에도 존재하지 않으면, Nix는 이 목록의 모든 단계를 재귀적으로 따르면서 가능한 한 이미 실체화된 패키지를 사용하고 필요한 것만 빌드하여 derivation을 처음부터 빌드합니다.

캐싱이 없는 Nix

캐싱이 없다면 실체화할 때마다 매번 모든 것을 처음부터 빌드해야 하며, 이로 인해 Nix는 훨씬 덜 효율적인—그래서 훨씬 덜 매력적인!—패키지 관리자이자 빌드 도구가 될 것입니다.

바이너리 캐시

로컬 Nix 스토어 외에도, HTTP를 통해 미리 빌드된 바이너리를 제공하는 바이너리 캐시라는 원격 Nix 스토어를 사용하여 Nix 산출물을 캐시할 수도 있습니다. 대부분의 경우 바이너리 캐시는 Nix 스토어와 똑같이 동작하여, Nix가 derivation의 Nix 스토어 경로를 기준으로 무언가가 이미 빌드되었는지 빠르게 판단할 수 있게 합니다.

Nix는 기본적으로 cache.nixos.org를 바이너리 캐시로 사용합니다. 이 캐시는 누구에게나 공개되어 있으며 지속적 통합 시스템을 통해 채워집니다. 이 커뮤니티 캐시 외에도 바이너리 캐시를 직접 운영하거나 FlakeHub Cache 같은 바이너리 캐시 서비스를 사용할 수도 있습니다.