2014.11.08 Session 2-4 XECon + PHPFest 2014 
PHP Library들의 지휘자 
Composer 
조정현 
XE Community Development Group
What is Composer 
Composer Is a tool 
for dependency management in 
PHP
출처 
: 
http://benramsey.com/blog/2013/11/the-fall-of-pear-and-the-rise-of-composer/ 
지는 PEAR, 뜨는 Composer
등장배경 
1. PEAR 의 문제 
• 선택의 여지가 없다. 
• 기여되는 패치에 대한 의구심 
2. PEAR2, Pyrus 의 등장 
• 느린 성장, 발전 속도
등장배경 
Turning Point 
• “PHP 프로젝트의 표준을 만들자” - David Coallier 
• PHP Framework Interop Group (PHP-FIG) 
http://www.php-fig.org/ 
• PHP5.3 Release (namespace)
Composer의 등장(with Packagist)
유사한 기능을 가지는 많은 라이브러리 
my mailer 
her maile 
r 
another 
mailer 
your mailer 
his mailer
라이브러리 선택의 민주화 
More Powerful + More Completeness
코드의 표준화 
• 강제하지 않아도 표준을 따름 
• Unit Test 을 통한 품질 강화
PSR 
(PHP Specification Request) 
PSR
PSR-0 Autoloading Standard www.php-fig.org 
1. 일반 
• FooBarBaz 
=> project/path/vendor/Foo/Bar/Baz.php 
2. Underscore 
• NamespacePackageClass_Name 
=> 
project/path/vendor/Namespace/Package/Class/Name.php 
• NamespacePackage_NameClass_Name 
=> 
project/path/vendor/Namespace/Package_Name/Class/Name.p 
hp
PSR-0 Autoloading Standard www.php-fig.org 
1. 일반 
• FooBarBaz 
=> project/path/vendor/Foo/Bar/Baz.php 
2. Underscore 
• NamespacePackageClass_Name 
=> 
project/path/vendor/Namespace/Package/Class/Name.php 
• NamespacePackage_NameClass_Name 
=> 
project/path/vendor/Namespace/Package_Name/Class/Name.p 
hp
PSR-1 Basic Coding Standard www.php-fig.org 
• PHP시작태그 “<?php” or “<?=” 만 사용 
• 파일 인코딩은 UTF-8 
• Class 이름은 “StudlyCaps” 
• Method 이름은 “camelCase” 
• Class 상수는 대문자와 Underscore 만 사용
PSR-2 Coding Style Guide www.php-fig.org 
• 들여쓰기는 space 4회 
• 한줄에 문자는 최대 120자 
• namespace 와 use 사이는 한칸 띄움 
• Class 와 Method 여는 중괄호는 다음 줄에 
• 제어구조문의 여는 중괄호는 같은 줄에 
• 기타 등등…
PSR-3 Logger Interface www.php-fig.org 
• 8가지 Method 를 포함 
(debug, info, notice, warning, error, critical, alert, 
emergency) 
• 9번째 Method “log” 의 첫 인자는 Log의 레벨 
• 정의되지 않은 Method 호출시 
“PsrLogInvalidArgumentException” 으로 예외처리 
• 정의된 8가지 레벨이외의 레벨은 사용하지 않음
PSR-4 Improved Autoloading www.php-fig.org 
• eg. PSR-0 
AcmeLogWriterFile_Writer 
=> /Acme/Log/Writer/File/Writer.php 
• eg. PSR-4 
AcmeLogWriterFile_Writer 
=> /acme-log-writer/File_Writer.php
PSR ing….
Why Composer?
프로젝트에 로깅 작업이 필요 
Monolog 라이브러리 사용 결정 
Monolog 검색 및 프로젝트내 copy 
Monolog의 dependency 라이브러 
리 Psr/log검색 및 프로젝트내 
copy 
Scenario - Unused
Code - Unused
Code - Unused
Code - Unused 
Change?
Require > Source Code
프로젝트에 로깅 작업이 필요 
Monolog 라이브러리 사용 결정 
composer.json 내용 작성 
$ composer install 
Scenario - Used
Code - Used
Code - composer.json
당신의 선택은? 
노가다 vs Composer
Schema
Schema – Information section
Schema – Core section
Schema – Etc section
Schema – Repositories(vcs)
Schema – Repositories(package)
=> Composer 저장소
Packagist – Public https://packagist.org
Packagist – Private http://wpackagist.org
나만의 Packagist 만들기!!
Server 설정 
Only 
packages.json
Server 설정 
• /host/server/document/root/packages.json
Client 설정 
• /your/project/root/composer.json
Packagist 구축 라이브러리 - Satis 
• URL - https://github.com/composer/satis
Packagist 구축 라이브러리 - Satis 
• URL - https://github.com/composer/satis 
Is not project-root/composer.json
Packagist 구축 라이브러리 - Satis 
• satis.json
Packagist 구축 라이브러리 - Satis 
Execute!! 
Then
xecon-phpfest2014composer

xecon-phpfest2014composer

Editor's Notes

  • #6 2009년
  • #26 spl_autoload, spl 이 뭔지? - 상품
  • #30 project, library, metapackage, composer-plugin
  • #44 tip : composer 를 /usr/bin/ 위치