본 제안은 패키지 관리 시스템을 구성하는 여러 핵심 요소들을 추상화된 프로토콜 관점에서 정의합니다.
1. 주요 계층 (The Layers)
-
사용자 명령: 개발자가 터미널에 입력하는 install, add, remove, update, publish 등의 인터페이스 계층.
-
매니페스트 형식: 프로젝트가 의존성을 선언하는 package.json, Gemfile, Cargo.toml 등의 형식.
-
록파일 형식: 해결된 의존성을 기록하여 재현성을 보장하는 형식.
-
레지스트리 프로토콜: 클라이언트가 레지스트리와 통신하는 방식 (REST API, 스파스 인덱스 등).
-
아카이브 형식: 배포를 위해 패키지를 묶는 방식 (Tarball, Wheel, Jar, Crate).
-
의존성 해결: 매니페스트의 제약 조건을 만족하는 구체적인 의존성 그래프를 생성하는 알고리즘적 핵심.
-
발행 워크플로우: 개발자 머신에서 레지스트리로 패키지가 발행되는 과정 (인증, 검증, 서명).
-
보안 모델: 시스템이 제공하는 보증 및 위협 처리 (체크섬 검증, 서명 유효성 검사 등).
2. 핵심 행위자 (The Actors)
-
발행자 (Publishers): 패키지를 생성하고 레지스트리에 제공하는 주체.
-
소비자 (Consumers): 프로젝트에 패키지를 설치하며, 이제 CI 시스템 등 자동화된 소비자가 큰 비중을 차지합니다.
-
레지스트리 (Registries): 패키지를 저장하고 메타데이터를 제공하며 이름 공간 규칙을 관리합니다.
-
프록시 및 미러 (Proxies & Mirrors): 소비자-레지스트리 사이에 위치하여 캐싱, 필터링 역할을 수행합니다.
-
해결사 (Resolvers): 추상적인 제약 조건을 구체적인 버전으로 변환합니다.
3. 주요 데이터 유형 및 동작 (Data Types & Operations)
-
데이터 유형: 패키지 식별자 (PURL), 버전 (VERS), 버전 제약 조건, 매니페스트, 록파일, 패키지 아티팩트, 의존성 그래프, 플랫폼 타겟.
-
주요 동작: 발행(Publish), 해결(Resolve), 설치(Install), 업데이트(Update), 취소/사용 중단(Yank/Deprecate), 조회(Query).
-
거버넌스 동작: 이름 공간 할당, 소유권 이전, 분쟁 해결, 콘텐츠 제거, 계정 복구 등 레지스트리의 정책적 결정을 포함합니다.
4. 일관성 속성 (Consistency Properties)
-
해결 결정론: 동일한 조건에서 동일한 그래프 생성.
-
록파일 무결성: 록파일을 통한 설치 결과의 일관성.
-
발행 원자성: 패키지 발행 시 메타데이터와 아티팩트가 원자적으로 가시화.
-
단조 버전: 한 번 사용된 버전 번호의 의미 불변성.
-
취소 의미론: 취소된 버전은 새로운 해결에서 제외되나, 기존 록파일에서는 유효.
-
버전 순서: 두 버전 중 어떤 것이 더 새로운지 결정하는 규칙.
이러한 요소들은 패키지 관리 시스템의 복잡한 상호작용과 다양한 구현 방식을 이해하고 비교하는 데 필요한 공통 언어를 제공합니다.