최근 PHP로 만들어진 CMS나 모듈을 다루다 보면 의존성 관리를 위해서 Composer를 사용하는 경우가 많아졌습니다. node.js의 npm과 같은 패키지매니저와 비슷한 역할을 하고 있습니다.
먼저 PHP가 없다면 다음과 같이 설치해 줍니다. (Ubuntu)
sudo apt-get update
sudo apt-get install php
sudo apt-get install php-curl php-json php-mbstring php-mysql php-xml php-zip
그다음 다음과 같이 composer를 가져와 설치할 수 있습니다.
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin/
사용하기 쉽게 바로가기를 만들어 둡니다.
sudo ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
composer --version
composer config --list ## 설정보기
composer global config --list ## Global 설정보기
단순히 https://getcomposer.org/Composer-Setup.exe 에서 파일을 받아서 설치하면 됩니다.
패키지의 목록을 가지고 있는 파일입니다. composer init 명령을 통해 생성할 수도 있습니다. require에 의존성 패키지를 기술합니다.
"소유자/패키지명" : "버전명"
예는 다음과 같습니다.
{
"name": "...",
"require": {
"composer/installers": "^1.9",
"drupal/core-composer-scaffold": "^9",
"drupal/core-project-message": "^9",
"drupal/core-recommended": "^9",
...
이제 패키지를 설치하거나 갱신할 수 있습니다.
composer install
composer update
composer를 사용한 라이브러리들은 autoload.php에 등록되기 때문에 코드에서 일일이 해당 패키지명을 지정하지 않아도 다음과 같이 하나만 적어주면 해당 패키지의 라이브러리를 사용할 수 있게 됩니다.
require 'vendor/autoload.php';
만일 failed to open stream: Permission denied와 같은 에러를 본다면 다음과 같이 소유자를 변경합니다.
sudo chown -R $USER ~/.composer/
보기에도 무서운 Fatal 에러. 😠 최근 Composer는 1.5G 정도의 많은 메모리를 요구합니다. 다음과 같이 설정해서 메모리 제한을 없앨 수 있습니다.
PHP Fatal error: Allowed memory size of...
먼저 PHP의 메모리 제한을 php.ini
파일을 수정해 조정할 수 있습니다.
; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1
Composer에 정의된 환경변수 COMPOSER_MEMORY_LIMIT
를 사용해 명령을 내릴 수도 있죠.
COMPOSER_MEMORY_LIMIT=-1 composer install <package:version>
아니면 다음과 같이 PHP 명령 조합으로 구동할 수 있습니다.
php -d memory_limit=-1 composer ...
물론 자주 사용될 경우에는 which composer를 통해 해당 위치에 있는 실행 스크립트를 다음과 같이 바꿉니다.
#!/bin/sh
...
php -d memory_limit=-1 "${dir}/composer.phar" "$@"
윈도우라면 composer.bat파일에서 다음과 같이 바꿀 수 있습니다.
@echo OFF
:: in case DelayedExpansion is on and a path contains !
setlocal DISABLEDELAYEDEXPANSION
php -d memory_limit=-1 "%~dp0composer.phar" %*
"어떤 것을 완전히 알려거든 그것을 다른 이에게 가르쳐라."
- Tryon Edwards -