PHP 개발을 위한 Composer 설치 및 설정

 

최근 PHP로 만들어진 CMS나 모듈을 다루다 보면 의존성 관리를 위해서 Composer를 사용하는 경우가 많아졌습니다. node.js의 npm과 같은 패키지매니저와 비슷한 역할을 하고 있습니다.

설치

Linux/Unix/Mac OS에서 설치

먼저 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.json 파일 설정

패키지의 목록을 가지고 있는 파일입니다. 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';

Troubleshooting

 Failed to open stream: Permission denied

만일 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" %*

 

sean's picture

Language

Get in touch with us

"If you would thoroughly know anything, teach it to other."
- Tryon Edwards -