컴포저 (소프트웨어)
1. 개요
컴포저는 PHP용 의존성 관리 도구이다. composer.json 파일을 사용하여 프로젝트에서 사용하는 라이브러리와 버전을 관리하며, PSR-4 자동 로딩 표준을 지원한다. 주요 명령어로는 require, install, update, remove 등이 있으며, 다양한 버전 지정 방식을 통해 라이브러리 버전을 유연하게 관리할 수 있다. 심포니, 라라벨, 코드이그나이터 등 여러 PHP 프레임워크에서 널리 사용된다.
이미지 준비중입니다.
| 개발자 | 닐스 아데르만, 조르디 보지아노 |
|---|---|
| 출시일 | 2012년 3월 1일 |
| 최신 안정화 버전 | 2.6.6 |
| 최신 안정화 버전 출시일 | 2023년 12월 9일 |
| 상태 | 활발 |
| 운영 체제 | 크로스 플랫폼 |
| 프로그래밍 언어 | PHP |
| 장르 | 패키지 관리자 |
| 라이선스 | MIT 허가서 |
| 웹사이트 | Composer 공식 웹사이트 |
-
PHP 소프트웨어 -
핵 (프로그래밍 언어)
Hack은 페이스북에서 개발한 프로그래밍 언어이며, PHP와 상호 운용되도록 설계되었고, 정적 타이핑을 도입하여 타입 힌트를 확장하며 PHP 7에도 영향을 미쳤다. -
PHP 소프트웨어 -
HHVM
HHVM은 페이스북에서 개발한 PHP 및 Hack 언어 실행 엔진으로, JIT 컴파일을 통해 높은 성능을 제공하며 웹 개발 분야에 새로운 가능성을 제시했다. -
PHP로 작성된 자유 소프트웨어 -
드루팔
드루팔은 드리스 바이테르트가 개발하여 2001년 공개된 PHP 기반의 오픈 소스 콘텐츠 관리 시스템으로, 모듈과 테마를 통해 기능 확장이 가능하며 다양한 기관에서 활용되고 활발한 커뮤니티를 가지고 있다. -
PHP로 작성된 자유 소프트웨어 -
워드프레스
워드프레스는 PHP로 작성된 자유-오픈 소스 콘텐츠 관리 시스템으로, 테마와 플러그인을 통해 디자인 변경 및 기능 확장이 용이하며, 다양한 웹사이트 구축 및 관리를 지원하는 설치형/가입형 플랫폼이다. -
자유 패키지 관리 시스템 -
F-Droid
F-Droid는 2010년 키어런 걸트니엑스가 설립한 안드로이드용 자유 소프트웨어 앱 저장소로, 구글 플레이 스토어에 없는 자유/오픈 소스 소프트웨어 앱을 제공하며 감시, 검열 저항, 개인 정보 보호에 중점을 둔 클라이언트 앱, 저장소 관리 도구, 웹사이트 생성기 등의 하위 프로젝트로 구성된다. -
자유 패키지 관리 시스템 -
어드밴스트 패키징 툴
어드밴스트 패키징 툴(APT)은 데비안 계열 리눅스 배포판에서 패키지를 관리하는 도구 모음으로, 패키지 설치, 삭제, 업데이트, 업그레이드 기능을 제공하며, 특히 패키지 간 의존성을 자동 관리하는 특징을 가진다.
2. 문법
컴포저는 `composer.json` 파일을 기반으로 작동하며, 이 파일에는 프로젝트에서 사용하는 라이브러리 목록과 버전 정보 등이 JSON 형식으로 저장된다.
`composer require monolog/monolog` 명령어를 실행하면 아래와 같은 `composer.json` 파일이 생성된다.
```javascript
{
"require": {
"monolog/monolog": "1.2.*"
}
}
```
PHP-FIG가 제공하는 코딩 규약 "PSR-4"에 준하는 자동 로딩을 위한 `composer.json` 파일은 아래와 같다. `MyApp` 네임스페이스를 사용하여 코딩해야 한다.
```json
{
"autoload" : {
"psr-4" : {
"MyApp\\" : "folder/"
}
}
}
```
샘플 코드는 다음과 같다.
```php
namespace MyApp;
class ClassName
{
..
}
2.1. 명령어
컴포저는 라이브러리 관리를 효율적으로 수행하기 위해 다음과 같은 여러 명령어들을 제공한다.
* `require`: composer.json 파일에 라이브러리를 추가하고 설치한다.
* `install`: composer.json 파일에 명시된 모든 라이브러리를 설치한다. PHP 저장소 의존성을 다운로드할 때 사용한다.
* `update`: composer.json 파일에 명시된 모든 라이브러리를 허용된 버전에 따라 업데이트한다.
* `remove`: 라이브러리를 제거하고 composer.json 파일에서 해당 라이브러리 관련 내용을 삭제한다.
다음은 `composer require monolog/monolog` 명령으로 생성된 composer.json 파일의 예시이다.
```javascript
{
"require": {
"monolog/monolog": "1.2.*"
}
}
2.2. 라이브러리 버전 관리
컴포저는 라이브러리의 버전을 유연하게 관리할 수 있도록 다양한 버전 지정 방식을 제공한다.
| 기호 | 역할 (버전 번호 앞에 위치) | 예시 |
|---|---|---|
| >= | 숫자를 확장할 수 있다. 또한 >, <, <=를 사용할 수 있다. | "php": ">=5.5.9"는 PHP 7을 포함한다. |
| != | 버전을 제외한다. | |
| - | 버전 범위를 정의한다. | |
| * | 모든 하위 버전까지 확장한다. | "symfony/symfony": "3.1.*"는 3.1.1을 포함한다. |
| ~ | 동일 레벨의 다음 버전까지 확장한다. | "doctrine/orm": "~2.5"는 2.6도 포함하지만 2.4 또는 3.0은 포함하지 않는다. |
| ^ | 하위 호환성이 있는 경우에만 물결표와 동일하다. |
3. 지원되는 프레임워크
컴포저는 다양한 PHP 프레임워크에서 널리 사용되고 있다.
4. composer.json 예시
`composer.json` 파일은 프로젝트의 의존성을 정의하고, 클래스 자동 로딩(autoloader) 설정을 포함할 수 있다. 다음은 PSR-4 표준에 따라 `MyApp` 네임스페이스를 사용하는 예시이다.
```json
{
"autoload" : {
"psr-4" : {
"MyApp\\" : "folder/"
}
}
}
```
다음은 샘플 코드이다.
```php
namespace MyApp;
class ClassName
{
..
}