SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
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.
감사합니다.

Contenu connexe

Tendances

XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XpressEngine
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1성일 한
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기
XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기
XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기승훈 오
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Eunbee Song
 
[Xe con2016] 오승훈 xe3로 웹사이트 만들기
[Xe con2016] 오승훈 xe3로 웹사이트 만들기[Xe con2016] 오승훈 xe3로 웹사이트 만들기
[Xe con2016] 오승훈 xe3로 웹사이트 만들기승훈 오
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다KWON JUNHYEOK
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기Young D
 
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기XpressEngine
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP동현 조
 
Eclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekEclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekTaewoo Kim
 
파이어베이스 스터디
파이어베이스 스터디파이어베이스 스터디
파이어베이스 스터디성일 한
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장sung ki choi
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chromeJi Hun Kim
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기KwangSeob Jeong
 

Tendances (20)

XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
 
Learning Laravel
Learning LaravelLearning Laravel
Learning Laravel
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기
XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기
XE3 a부터 z까지(1) xe3 구조와 간단한 페이지 만들기
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)
 
[Xe con2016] 오승훈 xe3로 웹사이트 만들기
[Xe con2016] 오승훈 xe3로 웹사이트 만들기[Xe con2016] 오승훈 xe3로 웹사이트 만들기
[Xe con2016] 오승훈 xe3로 웹사이트 만들기
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기
 
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP
 
Eclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekEclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd Week
 
파이어베이스 스터디
파이어베이스 스터디파이어베이스 스터디
파이어베이스 스터디
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기
 

Similaire à Composer

도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱Jong Wook Kim
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드수정 김
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
 
코드잇-타스-특강.pdf
코드잇-타스-특강.pdf코드잇-타스-특강.pdf
코드잇-타스-특강.pdf이정환
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료Ji-Woong Choi
 
cross compile
cross compilecross compile
cross compilehe4722
 
오픈소스가이드 win,c++
오픈소스가이드 win,c++오픈소스가이드 win,c++
오픈소스가이드 win,c++jdo
 

Similaire à Composer (20)

도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
Final report201101
Final report201101Final report201101
Final report201101
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
 
코드잇-타스-특강.pdf
코드잇-타스-특강.pdf코드잇-타스-특강.pdf
코드잇-타스-특강.pdf
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료
 
cross compile
cross compilecross compile
cross compile
 
오픈소스가이드 win,c++
오픈소스가이드 win,c++오픈소스가이드 win,c++
오픈소스가이드 win,c++
 

Composer

  • 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 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/ 에서 확인 하실 수 있습니다.
  • 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. 축하합니다. 이제 여러분도 자신만의 저장소를 가지게 되었습니다!