라이브러리의 라이브러리 의존성이 문제인 경우
한 가지 간단한 예를 생각해 보겠습니다. 만약 지금 개발하려는 라이브러리가 범용적인 3D 라이브러리라고 합시다. 다음과 같은 목표를 갖고 있다고 가정해보죠.
- 다양한 기저 라이브러리를 엔진으로 교체하여 사용할 수 있다.
- 3D엔진별로 공통적으로 제공되는 기능은 엔진의 기능을 사용하고 엔진이 지원하지 않는 기능은 추상층에서 제공한다.
- 물리엔진과 통합된 api를 제공한다.
- 다양한 3d포멧을 추가적으로 지원한다.
- 고수준의 유틸리티 기능을 제공한다.
이러한 라이브러리를 구축하는 경우 다양한 엔진들과 호환이 가능하려면 import를 꽤나 여러 가지 패키지로부터 해 와야만 합니다.
3D엔진만 해도 pv3d, away, alternativa, infinity정도를 기본으로 수많은 엔진이 존재하고, 애니메이션을 위해 tweenMax를 비롯한 수 가지의 트위너들, 물리엔진 역시 유명한 box, wow 등 아마 이 엔진이 범용적이다 라고 불리우려면 20가지 정도의 기존 라이브러리들과 관계를 맺게 됩니다.
이 결과는 역설적으로 전혀 범용적이지 않은 엔진이 된다는 것입니다. 이유는 실제 이 소스를 갖고 컴파일을 하려면, 호스트가 pv3d, tweenMax로 가려고 했으나 위에 열거한 모든 라이브러리를 프로젝트에 추가하지 않으면 컴파일이 되지 않기 때문입니다.
또한 호스트코드 입장에서는 사용하려는 라이브러리가 의존하는 라이브러리를 인지할 수 없고 오직 에러 메세지로만 알게 되죠. 이러한 상황은 매우 일반적이라 이를 알리는 방법은 고작해야 문서화에 명시하는 정도입니다만, 문서화란 여러분들이 어도비나 트윈맥스 정도의 인지도를 갖고 있지 않다면 문서를 사람들이 봐주지 않기 때문에 쓰나 안쓰나 비슷합니다.
따라서 범용적인 라이브러리를 다른 라이브러리들의 코드합체(?)로 구축한다는 것은 호스트 측의 사용성을 생각해보건데 상당히 무리라는 것이죠.
이것이 연계참조의존성이라고 알려져 있는 라이브러리가 다른 라이브러리를 베이스로 구축될 때의 가장 큰 문제점입니다.
Continue reading ‘컴파일 시의 라이브러리 의존성 해결’ »