컴퓨터

Composer가 왜 자주 등장하지?

PHP를 이용하여 Invoice 출력을 위한 PDF 변환 패키지를 찾던 중, 이 패키지 설치 과정에서 Composer가 필요하다는 것을 알게 되었습니다. Composer에 공부할 시간은 없고, 대신 다른 WORD 변환 패키지로 대신 찾던 중, 역시 거기도 Composer가 어김없이 등장하였습니다.

아, 요새는 Composer가 대세인가? 피해 갈 수 없겠군

이란 생각이 들어, 여기서 한번 배운 걸 정리해보았습니다.

PHP 의존성 관리 도구 Composer

Composer

컴포저는 PHP로 프로젝트를 개발할 때에 다양한 패키지나 라이브러리를 관리하기 편하게 해주는 도구입니다.

예를 들어 A 프로젝트는 1년 전에 작성하였고 B 프로젝트는 최근에 작성하였는데, 같은 패키지라도 A는 패키지 1.0판에서만 작동하고 B는 패키지 2.0판에서만 작동한다면, 패키지를 도저히 전역적으로 설치해서 관리하기 힘듭니다.

컴포저를 사용하기 전에는 user_lib 이라는 폴더에 여러 가지 패키지를 몰아넣고, 같은 패키지라도 판별로 넣어두고 사용했지만, 컴포저가 있다면 이제는 프로젝트의 composer.json에 미리 선언만 해두면 프로젝트 내의 하위 폴더 (ex.)vendor)에 자동으로 설치되고 관리되며, 다른 서버로 배포되거나 이동되더라도 이미 선언된 패키지의 버전만 자동으로 설치됩니다.

어떻게 사용하지?

4줄 요약

  • 서버에 Composer를 먼저 설치해 놓자
  • 개발하고 있는 프로젝트에, composer.json 파일을 만들어서 거기다가 사용할 여러 패키지를 선언해둔다.
  • 선언해 두면, Composer가 알아서 개발하고 있는 프로젝트 폴더에 vendor 란 하위 폴더가 만들면서, 선언해 둔 패키지들이 자동으로 내려받아 진다.
  • 개발하는 page에 require '/vendor/autoload.php'; 를 삽입한다.

Composer 설치하기

컴포저 홈페이지

사용환경 : PHP 5.3.2+ 이상

설치방법은 위의 컴포저 홈페이지에 나와 있지만, 간단히 설명해 드리면,

  • 윈도우인 경우 : Composer-Setup.exe 를 내려받아 실행
  • 리눅스인 경우는 putty.exe 등으로 터미널로 들어가서 :
    php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
    php -r "if (hash('SHA384', file_get_contents('composer-setup.php')) === 'fd26ce67e3b237fffd5e5544b45b0d92c41a4afe3e3f778e942e43ce6be197b9cdc7c251dcde6e2a52297ea269370680') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }" 
    php composer-setup.php 
    php -r "unlink('composer-setup.php');"
    

    4줄을 실행하면 putty에서 4줄 명령어를 실행한 그 위치에 composer.phar 파일이 생성됩니다.

    mv composer.phar /usr/local/bin/composer

    이렇게 하면 설치가 완료.

composer.json 만들기

저 같은 경우 invoice 프로젝트를 만들고 있는데 /bill 폴더에서 작업하고 있습니다. putty로 접속하여 /home/www/board/bill 경로에서

composer require mikehaertl/phpwkhtmltopdf

이렇게 선언하면 /bill 폴더에 Vendor란 폴더가 생기면서 선언된 패키지가 자동으로 내려받아 지고, /bill 폴더에 composer.json 파일이 생기게 됩니다. composer.json을 열어보면

{
    "require": {
        "mikehaertl/phpwkhtmltopdf": "^2.1",
    }
}

이렇게 내용이 작성됩니다.

만약 다른 패키지를 또 선언한다면

composer require phpoffice/phpword

역시 /bill 폴더의 Vendor에 다른 패키지가 자동으로 내려받아 지고, composer.json에도 추가로 등록됩니다.

{
    "require": {
        "mikehaertl/phpwkhtmltopdf": "^2.1",
        "phpoffice/phpword": "^0.12.1"
    }
}

이렇게 추가됩니다.

개발하고 있는 프로젝트 파일에 autoload 선언하고 사용하면 끝

제 프로젝트 파일은 bill00.php인데, 상단에 autoload를 추가하면 됩니다.

require __DIR__ . '/vendor/autoload.php';

이후에는 추가한 패키지의 홈페이지에서 알려주는 설치방법대로 사용하면 됩니다.

설치한 패키지를 모두 지우고 싶다고요? 그냥 composer.json 파일과 vendor 폴더를 지워버리면 됩니다.

남은 이야기

우연히 PHP WkHtmlToPdf를 판올림하다가 Composer 없이는 설치할 방법이 없게 되어서 부득이 배우게 되었습니다. 마찬가지로 Phpword 또한 Composer 설치로 바뀌어서, 이제는 composer 추세가 된 듯합니다. 제 프로젝트는 아직 개발 중이지만, 앞으로 필요한 메일 구성이나 템플릿 관련 패키지도 뭐가 있는지 구글로 눈요기하면서 composer를 이용해 설치해볼 생각입니다.^^