소프트웨어를 개발할 경우 규모가 커지고 복잡해지고 외부 라이브러리를 많이 사용할수록 의존성 지옥 이라는 아주 머리 아프고 해결이 힘든 문제에 직면하는 경우가 많습니다.

Hello 라이브러리를 사용하여 A 프로젝트를 개발했는데 이 라이브러리는 Foo 와 World 라이브러리에 의존성이 있습니다. A 프로젝트는 새로운 버전을 개발중이며 Hello 라이브러리도 같이 개발중인데 Hello 가 사용하는 Foo와 World 라이브러리도 업데이트 되야 합니다.

Foo 와 World 는 Qux 가 필요한데 Foo 는 Qux 2.3이 World 는 3.1 이 필요합니다. 이렇게 의존성이 꼬여 버린 경우를 의존성 지옥이라고 하며 프로젝트에서는 많은 라이브러리를 사용하므로 실제 의존성 지옥은 이것보다 매우 복잡합니다.


사용하는 개발 언어와 프레임워크, 운영체제를 막론하고 의존성 지옥은 자주 발생했고 특히 예전 버전의 윈도우는 시스템에서 전역적으로 사용되는 MFC.DLL 같은 공유 라이브러리 파일들이 명확하게 버전 관리가 되지 않아서 "DLL  Hell" 이라는 용어가 있을 만큼 골치 아픈 문제였습니다.

자바 진영에서도 비슷한 "jar Hell" 이라는 용어가 있을 정도로 의존성 지옥 해결은 골치아픈 문제였습니다.