Package Manager 창에서 작업하는 경우 다양한 소스(레지스트리, 로컬 폴더, 타르볼 및 Git URL)에서 패키지를 설치할 수 있습니다. 하지만 패키지 관리자가 이러한 소스에서 패키지를 원활하게 설치하지만, 먼저 일련의 계산을 통해 설치할 버전 그리고 이 버전을 지원하기 위해 설치할 다른 패키지 및 버전을 결정해야 합니다.
Package Manager 창에서 설치할 패키지 버전을 선택하면 프로젝트 매니페스트에 종속성 을 추가합니다. 이는 프로젝트가 작동하기 위해 특정 패키지의 특정 버전이 필요하다는 선언입니다. 프로젝트 매니페스트에 나타나는 종속성을 “직접” 종속성이라고 합니다.
또한 패키지는 작동하기 위해 다른 패키지를 필요로 합니다. 이러한 패키지를 “간접” 또는 중간적 종속성이라고 부릅니다. 패키지 개발자는 개발 과정에서 이러한 종속성을 패키지 매니페스트에 추가합니다. 예를 들어 아래 다이어그램에서 alembic@1.0.7
패키지에는 timeline@1.0.0
패키지에 대한 종속성이 있으므로, 타임라인 패키지는 “간접 ” 종속성입니다. 반면에 프로젝트에는 cinemachine@2.6.0
및 alembic@1.0.7
패키지에 대한 종속성이 있으므로, 둘 다 “직접” 종속성입니다.
패키지 버전을 종속성으로 추가하는 경우 해당 버전은 반드시 패키지 관리자가 설치하는 버전일 필요는 없는데, 이는 직접 또는 간접 종속성인지 여부에 관계없이 프로젝트의 모든 종속성을 고려해야 하기 때입니다. 설치할 패키지를 결정하기 위해 패키지 관리자는 모든 직접 및 간접 종속성 리스트를 구성합니다.
패키지 관리자는 한 번에 하나의 패키지 버전만 설치할 수 있으므로 설치할 각 패키지의 버전을 결정하기 위해서는 종속성 그래프를 구성해야 합니다. 패키지 관리자가 모든 버전 충돌을 성공적으로 해결하면 잠금 파일에 해결 방법을 저장하여 결정론적 분명성을 보장(매번 동일한 패키지가 안정적으로 설치됨)하고, 종속성 그래프를 다시 계산하는 데 필요한 시간과 리소스를 줄입니다.