composer 를 도입하고 사용하는데 꼭 필요한 부분만을 나름 정리해서 쉽게 풀어 써 보았다. 혹시 필요하신 분들이 있으면 조금이나마 도움이 되었으면 좋겠다.
'의존성 관리'가 무엇이고 왜 필요할까?
오래전에는 코딩을 하다가 개발 언어가 기본적으로 지원하지 않거나, 기본적인 내용을 합쳐서 새로운 기능을 구현해야 한다거나 하는 상황을 만나게 되면 두 가지 방법 이외에는 없었다.
구글링을 통해 직접 오랜 시간을 들여 구현하거나, 남이 구현한 것을 어떻게든 찾아서 접붙이기(...)를 하거나.
운 좋게 소스코드를 찾더라도, 내 코드랑 접붙이는 것 또한 난감한 경우도 많았다.
시간은 얼마 없는데, 기능을 구현하자니 막막하고..
언제부터인가 사람들이 필요할만한 - 대부분 필요한 것들이 다 비슷비슷했기 때문에 - 그런 라이브러리들이 떨어져 나와 언어별로 한 곳에 모여서 관리가 되기 시작했고, 개발자들이 그러한 코드들을 함께 공유하기 시작했다.
이런 라이브러리들이 내 프로젝트에 사용되면, 나의 프로젝트는 해당 라이브러리를 의존해야 정상적으로 실행이 되는 '의존성'이 생기기 시작한다.
하지만 이 라이브러리들은 그냥 그대로 프로젝트에 포함되면서 끝이 아니라, 버전이 올라가면서 더 높은 버전의 개발 언어를 지원한다던가, 이 라이브러리 자체가 다른 라이브러리에 의존성을 가지고 있어서 이를 또 관리해야 한다던가, 기능이 추가되거나 사라진다던가, 지원하던 언어 버전이 변경된다던가 등등등.. 각각 자기만의 라이프사이클을 갖게 된다.
'나는 이것만 짜 놓으면 앞으로 영원히 손댈 일이 없어'
라고 100% 확신할 수 있다면 의존성 관리를 할 필요는 없겠지만, 구구단 같은 프로그램을 작성하는 것이 아닌 이상 그럴 확률은 아주 희박하다.
그래서 이 '의존성'이 생긴 라이브러리들에 대해 내 프로젝트에서 관리가 필요하게 된다.
Composer - PHP의 의존성 관리도구
Python 에는 PIP가 존재하고 node.js 에는 npm 이 있듯이 (다른 도구들도 있다)
PHP진영에서는 바로 Composer 가 그러한 의존성을 관리해주는 (유일한) 도구이다.
(나중에 검색해보면 알겠지만, 라이브러리 뿐 아니라 하나의 프로젝트 단위, 프레임워크 등도 이 안에서 관리된다.)
가 composer 의 홈페이지이다. 여기서 공식 문서와 composer 다운로드등을 할 수 있다.
Composer 의 최소 필요조건
composer 를 사용하기 위해서는 최소 PHP 5.3.2 이상의 버전을 사용해야만 한다.
즉, 낮은 버전의 레가시를 아직 사용하고 있다면 사용이 불가한데, 만일 가능하다면 최소 5.6까지는 올릴것을 권장하고 싶다. (요즘은 5.6으로도 설치가 안되는 패키지들이 많아서.. 사실은 7.x 이상으로 올려야 한다)
계속 유지보수를 해야 하는 코드라면, 버전을 올리는 수고가 헛되지 않을 것이라 생각한다.
System Requirements#Composer requires PHP 5.3.2+ to run. A few sensitive php settings and compile flags are also required, but when using the installer you will be warned about any incompatibilities. To install packages from sources instead of simple zip archives, you will need git, svn, fossil or hg depending on how the package is version-controlled. Composer is multi-platform and we strive to make it run equally well on Windows, Linux and macOS. |
Packagist - Composer 의 공개 패키지 저장소
패키지스트는 composer 에서 관리할 수 있는 무수히 많은 의존성 패키지들이 공개적으로 모여있는 곳이다.
물론 당신도 여기에 자작 라이브러리를 업로드 할 수 있으며, 모두 공개이다.
무언가 필요한 패키지/라이브러리가 있으면 여기 검색창에서 입력해 보면, 등록된 관련 패키지들이 나온다.
내가 curl을 사용하여 다른 서버와 통신해야 한다고 가정하고, curl 로 검색해 본다면,
다음과 같이 해당 기능이 구현된 패키지들이 쏟아져 나온다.
너무 많아서 뭘 써야할지 모르겠다면, 보통은 다운로드가 가장 많고 별을 가장 많이 받은 것이 가장 많이 쓰인다는 의미이므로, 그것을 쓰면 보통은 별 문제가 없다.
위의 경우 guzzlehttp/guzzle 패키지가 이에 해당될 것이다.
package 이름 보기
반드시 string/string 형식을 띄고 있는데,
앞의 문자열은 만든이 혹은 만든 회사/그룹 등을 표현하는 문장이고, 뒤의 문자열이 패키지의 이름이다.
이 둘을 합쳐 하나의 패키지로 본다.
아래 스크린샷을 보면 이해가 바로 될 것이다.
package 들의 사용방법
각각의 패키지들은 각각 자기만의 사용 방법이 정해져 있어서, 별도의 패키지 별 문서들을 보고 사용방법을 익혀야 한다. 수많은 패키지들이 자기만의 개발개념을 가지고 자기만의 사용방법을 가지고 있기 때문에, 처음에는 막막하게 느껴질 수도 있지만, 굳이 억지로 외울 필요 없이 문서들이나 구글링해서 찾은 글들을 보고도 구현이 가능한 경우가 많기 때문에 크게 부담가질 필요는 없다. 그리고 대부분 의존성 관리도구를 사용해야만 하는 현대의 개발방식에서는 패키지별로 공부해야만 하는 숙명을 피할 방법도 없다.
Private Packages
Packagist 는 우리 팀이나 아는 사람들만 사용할 수 있도록 하는 Private Packagist 도 지원하고 있다.
다만, 이쪽은 유료이다.
설치형 사설 저장소도 구성이 가능한 것으로 알고 있는데, 예전에 잠깐 살펴보고 지나가 버려서 잊어버렸..
다음글
대략적으로 왜 의존성 관리도구가 필요하게 되었고 이와 관련된 주제들을 간략히 소개하였으니, 이제 직접 설치해보고 생성된 파일을이 뭘 의미하는지를 알아보자.
'PHP' 카테고리의 다른 글
composer (6) 추천 패키지 소개 (0) | 2020.05.30 |
---|---|
composer (5) composer.json (0) | 2020.05.29 |
composer (4) 자주 사용하는 커맨드 와 composer.json, composer.lock (0) | 2020.05.24 |
composer (3) 첫 사용 (0) | 2020.05.23 |
composer (2) 설치 (0) | 2020.05.23 |