Composer
조정현, XE Team
Composer?
• Composer 란 PHP Library 의존성 관리 도구 입니다.
의존성?
• 의존성(dependency)이란 어떤 행위를 하는데 반드시
필요한 요소들을 말합니다.
의존성?
• 예를 들어면 이런겁니다.
• ‘A’라는 사람이 날짜 포멧을 변경하는 라이브러리를 만들었습니다.
• 당신은 ‘A’라는 사람이 만든 날짜 포멧 라이브러리를 이용해서 날
짜를 멋지게 표현하는 프로젝트를 완성했습니다.
• 자 그럼 당신이 만든 프로젝트는 ‘A’ 가 만든 날짜 포멧 라이브러리
가 반드시 필요하죠? 없으면 정상적으로 기능이 수행되지 않겠죠?
• 이것을 의존성이라고 말합니다.
Summary
• Composer는 앞서 말한 바와 같이 쉽게 의존성을 관리
해주는 도구입니다.
• Composer는 composer.json파일을 읽고 관련된 의
존성을 가지는 라이브러리를 모두 설치해줍니다.
• packagist.org를 저장소로 이용하여 의존성 정보를 수
집, 설치를 도와줍니다.
Install
• 커맨드 라인에서 다음 명령어를 실행합니다.
!
!
• Windows 환경일 경우
!
$ curl -sS https://getcomposer.org/installer | php
!
/* curl 이 없을경우 */
$ php -r “readfile(‘https://getcomposer.org/installer);” | php
c:bin>php -r “readfile(‘https://getcomposer.org/installer);” | php
!
/* windows 실행파일 생성 */
c:bin>echo @php “%~dp0composer.phar” %*>composer.bat
Install
• Install이 되면 composer.phar 파일이 생성 되어있을
겁니다.
• 이 파일이 Composer 실행 파일입니다.
• 사용의 편의성을 위해 “/usr/local/bin” 으로 이동시키
거나 alias 를 잡아두면 편하겠죠?
자 한번 사용해 봅시다!
디렉토리를 하나 만드세요.
그리고 그 디렉토리로 이동하여 composer.json파일을 생성합니다.
파일에 다음과 같이 작성해보세요.
{
“require”: {
“psr/log”: “1.0.0”
}
}
저장하시고 커맨드 라인에서 다음 명령어를 입력합니다
$ composer install
그러면 Composer는 “psr/log” 라이브러리를
여러분이 생성한 디렉토리에 설치하게 됩니다.
!
해당 라이브러리는 “vendor/psr/log” 에서 확인하실 수 있습니다.
여러분은 지금 “psr”이 제공한 “log” 라이브러리를
설치하는데 성공하신겁니다.
WOW!!
composer.json
composer.json을 구성하는 요소들을 살펴보겠습니다.
구성요소는 크게 다음과 같이 분류할 수 있습니다.
1. 기본정보
2. 의존성 관리
3. Auto Loading
4. Hook
5. 설정
6. 저장소
1. 기본정보
해당 패키지에 대한 정보들을 표시 합니다.
패키지명, 설명, 저자, 라이센스등의 정보를 담습니다.
2. 의존성 관리
가장 중요한 부분입니다. 현재 패키지가 정상적인 기능을 하기 위해
필요한 라이브러리들을 명시합니다.
!
• require
형식은 다음과 같습니다.
“require”: {
“xmen/wolverine”: “1.0.0”,
“xmen/cycops”: “1.0.1”,
“xmen/storm”: “1.2.0”
}
버전의 표기의 의미는 다음과 같습니다.
// 1.0 버전대의 최신 버전
“xmen/gambit”: “1.0.*”
!
// 1.0.0 버전보다 상위 버전만
“xmen/gambit”: “>1.0.0”
!
// 1.0.0 버전보다 하위 버전만
“xmen/gambit”: “<1.0.0”
!
// 1.0.0 버전 이거나 상위 버전인 것만
“xmen/gambit”: “=>1.0.0”
!
// 1.0.0 버전 이거나 하위 버전인 것만
“xmen/gambit”: “=<1.0.0”
!
// 1.0.0 버전보다 상위 버전이면서 1.0.2 버전보다 하위 버전
“xmen/gambit”: “>1.0.0,<1.0.2”
!
// >=1.1.2, <1.2 와 같은 의미
“xmen/gambit”: “~1.1.2”
!
// >=1.2, <2.0 과 같은 의미
“xmen/gambit”: “~1.2”
• require-dev
“require” 와 형식은 같습니다.
개발시에 필요한 라이브러리들을 명시합니다.
없어도 실제 기능에는 아무런 문제는 없습니다.
• conflict
“require” 와 형식은 같습니다.
기능상의 충돌등의 문제로 같이 존재해서는 안되는 라이브러리들을
명시합니다. 의존된 라이브러리에서 의존하는 경우 설치되지 않습니다.
3. Auto Loading
Auto Loding 해야하는 파일 또는 디렉토리에 대한 내용을 명시합니다.
“autoload”: {
// 파일을 직접 지정
“files”: [
“path/to/my/firstfile.php”,
“path/to/my/secondfile.php”
],
// 디렉토리를 지정
“classmap”: [
“src/Models”,
“src/Controllers”
],
// psr-0 룰에 맞추어 경로를 재 지정
“psr-0”: [
“SuperHappyFunTime”: “src/“
]
}
psr-0에 대한 내용은
http://www.php-fig.org/psr/psr-0/ 에서 확인 하실 수 있습니다.
4. Hook
Composer에 의해 명령이 실행되는 동안 수행할 명령어들을
작성할 수 있습니다.
“script”: {
“pre-install-cmd”: [
“php first command”,
“php second command”
]
}
Hook 처리하는 시점
• install 커맨드 실행 전, 후
• update 커맨드 실행 전, 후
• status 커맨드 실행 전, 후
• package Install, Uninstall 전, 후
• autoloader 에 dump 되기 전, 후
• root package 가 install 된 후
• archive 커맨드 실행 전, 후
• create-project 커맨드 실행 후
5. 설정
Composer 설정 입니다.
timeout 이나 cache 등의 설정정보를 변경할 수 있습니다.
하지만 대채로 기본값을 사용하므로 변경할 요소가 크지 않습니다.
6. 저장소
Composer는 기본적으로 packagist.org에서 라이브러리를
찾고 다운로드 받아 설치 합니다.
하지만 사용자가 저장소를 지정하여 해당 저장소 라이브러리를 설치하게끔
할 수도 있습니다.
“repositories”: [
{
“type”: “vcs”,
“url”: “http://github.com/xpressengine/xe-core”
},
{
“type”: “package”,
“package”: {
“name”: “xpressengine/xe-core”,
“version”: “1.8.0”,
“dist”: {
“type”: “zip”,
“url”: “https://github.com/xpressengine/xe-core/archive/master.zip”
}
}
}
]
참고사항
• install 이 실행되고 나면 composer.lock 파일이 생성
됩니다. 이 파일은 install 되어진 정보를 담고 있어 다음
composer 실행시 참고사항이 됩니다.
• composer.json 파일의 autoload 항목을 변경하면
autoload 갱신을 수행해야합니다.
$ composer dump-autoload
• getcomposer.org 에 방문하시면 더 많은 내용을 확인 할
수 있습니다.
사설 저장소
구성요소중 “repositories” 항목을 이용하여 packagist.org 와 같은 저장
소를 구축할수 있습니다.
개요는 다음과 같습니다.
• 사설저장소로 사용될 서버가 필요합니다.
(사설저장소는 “xepackagist.org” 로 표현하겠습니다.)
• root 위치에 “packages.json” 파일이 반드시 있어야 합니다.
• 개별 프로젝트 root 에 존재하는 “composer.json” 파일에
“xepackagist.org”가 저장소로 명시 되어야 합니다.
• 저장소에는 라이브러리 패키지가 실제로 존재 하지 않아도 상관 없습니다.
1. 서버 설정
서버의 document root 위치에 packages.json 파일을 작성합니다.
// 패키지의 정보 목록
{
“packages”: {
“vendor/package1”: {
“1.0.0”: {
“name”: “vendor/package1”,
“version”: “1.0.0”,
“dist”: {
“type”: “zip”,
“url”: “http://your_domain/path/to/file.zip”,
},
“source”: {
“type”: “git”,
“url”: “http://github.com/vendor/packages1.git”
}
}
},
“vendor/package2”: {
…………
}
}
}
• “name”, “version”, “dist” 나 “source” 는 패키지 정보를 구성
하는 필수 요소입니다.
• “dist”와 “source”요소는 두가지가 함께 명시되지 않아도 상관
없지만 반드시 하나는 명시되어야 합니다
• 명시된 패키지가 의존성이 있다면 “require” 항목으로 의존되는
패키지 정보를 포함하고 있어야 합니다.
• composer에서 제공하는 사설저장소 생성모듈인 “Satis”를 참
고 하시면 좋을 것 같습니다.
• https://github.com/composer/satis
2. 개별 프로젝트 설정
프로젝트 root 위치에 composer.json 파일에 저장소를 추가합니다.
!
{
"name": "my/project",
"description": “repositories test project.”,
“repositories”: [
{
“type”: “composer”,
“url”: “http://xepackagist.org”
}
],
// 사설저장소에 명시된 패키지중 사용할 패키지를 선택하여 포함시킵니다.
"require": {
“xe/package1": “1.0.*”
}
}
3. 기타
!
• 사설 저장소를 사용하는 곳으로는 대표적으로 wordpress 가 있습니
다.(http://wpackagist.org)
• packagist.org 의 패키지를 사용하고 싶지 않다면 repositories 항목
에 다음 처럼 작성하시면 됩니다.
!
“repositories”: [
{
“packagist”: false
}
]
축하합니다.
이제 여러분도 자신만의 저장소를 가지게 되었습니다!
End.
감사합니다.

Composer

  • 1.
  • 2.
    Composer? • Composer 란PHP Library 의존성 관리 도구 입니다.
  • 3.
    의존성? • 의존성(dependency)이란 어떤행위를 하는데 반드시 필요한 요소들을 말합니다.
  • 4.
    의존성? • 예를 들어면이런겁니다. • ‘A’라는 사람이 날짜 포멧을 변경하는 라이브러리를 만들었습니다. • 당신은 ‘A’라는 사람이 만든 날짜 포멧 라이브러리를 이용해서 날 짜를 멋지게 표현하는 프로젝트를 완성했습니다. • 자 그럼 당신이 만든 프로젝트는 ‘A’ 가 만든 날짜 포멧 라이브러리 가 반드시 필요하죠? 없으면 정상적으로 기능이 수행되지 않겠죠? • 이것을 의존성이라고 말합니다.
  • 5.
    Summary • Composer는 앞서말한 바와 같이 쉽게 의존성을 관리 해주는 도구입니다. • Composer는 composer.json파일을 읽고 관련된 의 존성을 가지는 라이브러리를 모두 설치해줍니다. • packagist.org를 저장소로 이용하여 의존성 정보를 수 집, 설치를 도와줍니다.
  • 6.
    Install • 커맨드 라인에서다음 명령어를 실행합니다. ! ! • Windows 환경일 경우 ! $ curl -sS https://getcomposer.org/installer | php ! /* curl 이 없을경우 */ $ php -r “readfile(‘https://getcomposer.org/installer);” | php c:bin>php -r “readfile(‘https://getcomposer.org/installer);” | php ! /* windows 실행파일 생성 */ c:bin>echo @php “%~dp0composer.phar” %*>composer.bat
  • 7.
    Install • Install이 되면composer.phar 파일이 생성 되어있을 겁니다. • 이 파일이 Composer 실행 파일입니다. • 사용의 편의성을 위해 “/usr/local/bin” 으로 이동시키 거나 alias 를 잡아두면 편하겠죠?
  • 8.
  • 9.
    디렉토리를 하나 만드세요. 그리고그 디렉토리로 이동하여 composer.json파일을 생성합니다. 파일에 다음과 같이 작성해보세요. { “require”: { “psr/log”: “1.0.0” } } 저장하시고 커맨드 라인에서 다음 명령어를 입력합니다 $ composer install
  • 10.
    그러면 Composer는 “psr/log”라이브러리를 여러분이 생성한 디렉토리에 설치하게 됩니다. ! 해당 라이브러리는 “vendor/psr/log” 에서 확인하실 수 있습니다.
  • 11.
    여러분은 지금 “psr”이제공한 “log” 라이브러리를 설치하는데 성공하신겁니다. WOW!!
  • 12.
    composer.json composer.json을 구성하는 요소들을살펴보겠습니다. 구성요소는 크게 다음과 같이 분류할 수 있습니다. 1. 기본정보 2. 의존성 관리 3. Auto Loading 4. Hook 5. 설정 6. 저장소
  • 13.
    1. 기본정보 해당 패키지에대한 정보들을 표시 합니다. 패키지명, 설명, 저자, 라이센스등의 정보를 담습니다. 2. 의존성 관리 가장 중요한 부분입니다. 현재 패키지가 정상적인 기능을 하기 위해 필요한 라이브러리들을 명시합니다. ! • require 형식은 다음과 같습니다. “require”: { “xmen/wolverine”: “1.0.0”, “xmen/cycops”: “1.0.1”, “xmen/storm”: “1.2.0” }
  • 14.
    버전의 표기의 의미는다음과 같습니다. // 1.0 버전대의 최신 버전 “xmen/gambit”: “1.0.*” ! // 1.0.0 버전보다 상위 버전만 “xmen/gambit”: “>1.0.0” ! // 1.0.0 버전보다 하위 버전만 “xmen/gambit”: “<1.0.0” ! // 1.0.0 버전 이거나 상위 버전인 것만 “xmen/gambit”: “=>1.0.0” ! // 1.0.0 버전 이거나 하위 버전인 것만 “xmen/gambit”: “=<1.0.0” ! // 1.0.0 버전보다 상위 버전이면서 1.0.2 버전보다 하위 버전 “xmen/gambit”: “>1.0.0,<1.0.2” ! // >=1.1.2, <1.2 와 같은 의미 “xmen/gambit”: “~1.1.2” ! // >=1.2, <2.0 과 같은 의미 “xmen/gambit”: “~1.2”
  • 15.
    • require-dev “require” 와형식은 같습니다. 개발시에 필요한 라이브러리들을 명시합니다. 없어도 실제 기능에는 아무런 문제는 없습니다. • conflict “require” 와 형식은 같습니다. 기능상의 충돌등의 문제로 같이 존재해서는 안되는 라이브러리들을 명시합니다. 의존된 라이브러리에서 의존하는 경우 설치되지 않습니다.
  • 16.
    3. Auto Loading AutoLoding 해야하는 파일 또는 디렉토리에 대한 내용을 명시합니다. “autoload”: { // 파일을 직접 지정 “files”: [ “path/to/my/firstfile.php”, “path/to/my/secondfile.php” ], // 디렉토리를 지정 “classmap”: [ “src/Models”, “src/Controllers” ], // psr-0 룰에 맞추어 경로를 재 지정 “psr-0”: [ “SuperHappyFunTime”: “src/“ ] } psr-0에 대한 내용은 http://www.php-fig.org/psr/psr-0/ 에서 확인 하실 수 있습니다.
  • 17.
    4. Hook Composer에 의해명령이 실행되는 동안 수행할 명령어들을 작성할 수 있습니다. “script”: { “pre-install-cmd”: [ “php first command”, “php second command” ] } Hook 처리하는 시점 • install 커맨드 실행 전, 후 • update 커맨드 실행 전, 후 • status 커맨드 실행 전, 후 • package Install, Uninstall 전, 후 • autoloader 에 dump 되기 전, 후 • root package 가 install 된 후 • archive 커맨드 실행 전, 후 • create-project 커맨드 실행 후
  • 18.
    5. 설정 Composer 설정입니다. timeout 이나 cache 등의 설정정보를 변경할 수 있습니다. 하지만 대채로 기본값을 사용하므로 변경할 요소가 크지 않습니다. 6. 저장소 Composer는 기본적으로 packagist.org에서 라이브러리를 찾고 다운로드 받아 설치 합니다. 하지만 사용자가 저장소를 지정하여 해당 저장소 라이브러리를 설치하게끔 할 수도 있습니다. “repositories”: [ { “type”: “vcs”, “url”: “http://github.com/xpressengine/xe-core” }, { “type”: “package”, “package”: { “name”: “xpressengine/xe-core”, “version”: “1.8.0”, “dist”: { “type”: “zip”, “url”: “https://github.com/xpressengine/xe-core/archive/master.zip” } } } ]
  • 19.
    참고사항 • install 이실행되고 나면 composer.lock 파일이 생성 됩니다. 이 파일은 install 되어진 정보를 담고 있어 다음 composer 실행시 참고사항이 됩니다. • composer.json 파일의 autoload 항목을 변경하면 autoload 갱신을 수행해야합니다. $ composer dump-autoload • getcomposer.org 에 방문하시면 더 많은 내용을 확인 할 수 있습니다.
  • 20.
    사설 저장소 구성요소중 “repositories”항목을 이용하여 packagist.org 와 같은 저장 소를 구축할수 있습니다. 개요는 다음과 같습니다. • 사설저장소로 사용될 서버가 필요합니다. (사설저장소는 “xepackagist.org” 로 표현하겠습니다.) • root 위치에 “packages.json” 파일이 반드시 있어야 합니다. • 개별 프로젝트 root 에 존재하는 “composer.json” 파일에 “xepackagist.org”가 저장소로 명시 되어야 합니다. • 저장소에는 라이브러리 패키지가 실제로 존재 하지 않아도 상관 없습니다.
  • 21.
    1. 서버 설정 서버의document root 위치에 packages.json 파일을 작성합니다. // 패키지의 정보 목록 { “packages”: { “vendor/package1”: { “1.0.0”: { “name”: “vendor/package1”, “version”: “1.0.0”, “dist”: { “type”: “zip”, “url”: “http://your_domain/path/to/file.zip”, }, “source”: { “type”: “git”, “url”: “http://github.com/vendor/packages1.git” } } }, “vendor/package2”: { ………… } } }
  • 22.
    • “name”, “version”,“dist” 나 “source” 는 패키지 정보를 구성 하는 필수 요소입니다. • “dist”와 “source”요소는 두가지가 함께 명시되지 않아도 상관 없지만 반드시 하나는 명시되어야 합니다 • 명시된 패키지가 의존성이 있다면 “require” 항목으로 의존되는 패키지 정보를 포함하고 있어야 합니다. • composer에서 제공하는 사설저장소 생성모듈인 “Satis”를 참 고 하시면 좋을 것 같습니다. • https://github.com/composer/satis
  • 23.
    2. 개별 프로젝트설정 프로젝트 root 위치에 composer.json 파일에 저장소를 추가합니다. ! { "name": "my/project", "description": “repositories test project.”, “repositories”: [ { “type”: “composer”, “url”: “http://xepackagist.org” } ], // 사설저장소에 명시된 패키지중 사용할 패키지를 선택하여 포함시킵니다. "require": { “xe/package1": “1.0.*” } }
  • 24.
    3. 기타 ! • 사설저장소를 사용하는 곳으로는 대표적으로 wordpress 가 있습니 다.(http://wpackagist.org) • packagist.org 의 패키지를 사용하고 싶지 않다면 repositories 항목 에 다음 처럼 작성하시면 됩니다. ! “repositories”: [ { “packagist”: false } ]
  • 25.
    축하합니다. 이제 여러분도 자신만의저장소를 가지게 되었습니다!
  • 26.