개발정리를 위한 개발로그, 발로그!

PHP로 Datetime 익스텐션을 만들고 있었는데, 아래에도 언급하였지만 Github에도 등록을 하는 게 나을꺼 같아, Github에 등록된 다른 라이브러리를 찾아보다 묘한 파일을 하나 발견하게 되었다.



composer.json  


거의 모든 PHP 라이브러리가 해당 파일을 포함하고 있었다. 뭔가해서 다시 구글링을 해보니 아래의 사이트를 발견!


나도 왠지 이아이를 반드시 써야할 것 같은 의무감이 들어 Getting Started를 클릭하여 하나하나씩 읽어보았다.


1. Dependency management 

- 컴포저는 프로젝트 베이스로 패키지 또는 라이브러리를 관리한다.  

- npm, bundler 에서 영감을 받았다. (개념적으로 이해하기 어려운 분들은 컴포저(composer)가 npm,bundler와 비슷한 역할을 한다고 생각하시면 될듯)

- 컴포저를 통해 특정 라이브러리의 디펜던시 문제를 해결할 수 있다. 

( 간단히 정리해보면 A라이브러리가 있고, A가 B라이브러리에 디펜던시가 있을때 개발자는 A만 INCLUDE해도 컴포져를 통해 발생할 수 있는 문제를 해결할 수 있다. 컴포져가 알아서 디펜던시가 있는 라이브러리 혹은 프로젝트를 다운받아 설치해준다.  )


2. Declaring dependencies

- 위에서 컴포저의 개념에 관해 간단히 설명했고 이제 어떻게 사용하는지 알아보자!

Sample : 

- monolog 라는 라이브러리를 사용해야 하는 경우 , 프로젝트 내에 composer.json를 생성하고 아래와 같이 파일을 생성한다.

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}

https://github.com/Seldaek/monolog

monolog/monolog <- 라이브러리 이름 

1.2.* <- 필요한 라이브러리 버전 


이렇게 composer.json 파일을 생성하고,  composer가 설치되어있다는 가정하에

php composer.phar install

쉘에서 위와 같이 입력하면 

해당 프로젝트 내에 vendor/monlog/monolog 로 관련 파일들이 추가 된다.


이제 monolog를 작업 중인 프로젝트 내에 포함하려면 

require 'vendor/autoload.php';

요렇게 기재하면 된다. 이제 해당 라이브러리를 php내에서 사용할 수 있다.


이 정도까지 알아보니, 왜 github의 php 라이브러리들이 composer.json을 작성하여 업데이트 하는지 이해가 된다. json 포맷이나 어떤식으로 디펜던시를 찾아서 처리하는지 궁금한 부분이 있지만 일단 오늘은 여기까지.


3. System Requirements 

- 컴포저는 PHP 5.3.2 이상에서 동작함!

- 컴포저는 윈도우, 리눅스, OSX에서 원활히 돌아감.



설치 방법은 굉장히 쉽기 때문에 링크로 대체! 

https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx


--


확실히 PHP는 특정 라이브러리 INCLUDE 나 REQUIRE 과정이 한번 꼬여버리면 답도 없어서 npm같은 프로그램이 있었으면 했는데, 이미 있었구나.. ㅋ


composer, 한번 잘 써 봅시다!