프로젝트를 진행하면서 공통 부분이나 다른 프로젝트에도 필요할 것 같은 기능은 별도의 라이브러리로 분리하여 개발 및 관리하는 것은 재사용성과 확장성 측면에서 매우 좋은 선택입니다.

또 필요한 기능이 있을 경우 검증된 외부 라이브러리를 사용하는 것은 프로젝트 자체에 집중할 수 있게 해주고 개발 일정 단축 및 품질 향상을 가져오는 경우가 많습니다.


하지만 PHP 로 프로젝트를 할 경우 내/외부 라이브러리를 설치하고 관리하는 것은 쉬운 일이 아니었습니다. 


A 라는 프로젝트는 Hello 라는 라이브러리를 사용하여 개발되고 있습니다. Hello 는 Foo 와 World 라는 라이브러리를 사용하고 있고 이 라이브러리들은 또 다른 라이브러리를 사용하고 있습니다. 

A 프로젝트를 디플로이하려면 Hello 외에 5개의 라이브러리를 더 설치해야 합니다. 여러 라이브러리를 그나마 손쉽게 설치할 수 있는 방법중 하나는 라이브러리를 zip 이나 tar 등으로 묶은 후에 FTP등으로 서버에 올려서 압축을 해제하는 것입니다.

서버가 여러 대라면 동일한 작업을 여러 서버에서 반복 수행해야 하며 개발이나 운영중에 Hello 를 업데이트 해야 할 경우 똑같은 작업을 여러 번 반복해야 합니다.

만약 여러 가지 이유로 예전 버전의 라이브러리로 다운그레이드해야 할 경우가 발생하면 설치/업데이트와 마찬가지로 번거롭고 실수할 여지가 많은 단순 반복 작업을 서버 대수만큼 수행해야 했습니다.


설치나 업데이트가 자동화되어 있지 않고 단순 압축 해제이므로 제대로 반영되었는지 확인이 어려웠고 현재 쓰고 있는 라이브러리의 버전이 무엇인지 파악하려면 직접 소스를 열어서 버전 지정 부분을 확인해 보아야 했습니다.


추가로 새로운 B 프로젝트를 수행할 경우 사용하는 기술이나 라이브러리의 버전이 다를수 있으므로 A 프로젝트와는 동일하지만 버전이 다른 라이브러리를 묶고 배포하는 어려움도 있었습니다.