주코의 삼각형과 패키지 관리의 트레이드오프
-
세 가지 속성: 인간이 이해하기 쉬운 이름(Human-meaningful), 중앙 권위가 없는 분산 구조(Decentralized), 이름과 내용의 일치 보장(Secure) 중 최대 두 가지만 선택 가능합니다.
-
중앙 레지스트리의 선택: npm이나 RubyGems는 ‘보안’과 ‘인간 중심 명칭’을 위해 ‘분산화’를 포기했습니다. 이를 통해 전역적으로 고유한 패키지 이름을 보장합니다.
연합형 모델의 보안적 한계
-
이름 충돌과 의존성 혼란: 연합된 각 노드가 동일한 이름으로 서로 다른 패키지를 제공할 경우, 개발자는 어떤 것이 진짜인지 판단할 수 없으며 이는 심각한 보안 공격(Dependency Confusion)의 통로가 됩니다.
-
검증 부담의 전가: 중앙의 관리 주체가 사라지면 모든 개발자가 수천 개의 전이 의존성(Transitive Dependencies)을 직접 감사해야 하는 불가능한 상황에 처하게 됩니다.
주요 사례 분석
-
Go 모듈: DNS를 네임스페이스로 사용하여 분산화를 시도했으나, 도메인 소유권 변경 및 보안 문제를 해결하기 위해 결국 구글이 운영하는 프록시와 체크심 로그라는 중앙 집중식 보안 장치를 추가했습니다.
-
FAIR 프로젝트: 암호화된 식별자(DID)를 사용하여 분산화와 보안을 잡으려 했으나, 사용성을 확보하기 위해 다시 ‘AspireCloud’와 같은 중앙 검색 엔진과 신뢰 라벨러 시스템을 구축해야 했습니다.
전역 네임스페이스의 중요성
- 패키지 이름은 코드 내에 직접 포함되는 실행 포인터입니다. 소셜 미디어와 달리 패키지 관리에서는 동일한 이름이 서로 다른 코드를 가리키는 모호성을 허용할 수 없으며, 이는 안정적인 빌드와 실행을 방해합니다.