php

composer

컴포저

composer 는 php 를 개발하는데 있어서 패키지간의 의존성을 관리하는 의존성 관리자입니다.
node.js 의 npm, ruby의 bundle과 같은 역할을 수행합니다.

  • 사용 이점
    • 컴포넌트 관리 자동화
    • 개발/운영 동일한 의존성을 사용, 버전 불일치 등의 문제 발생을 피할 수 있다.
    • 오토로드 지원
    • 컴포저 컴포넌트(vendor)는 버전관리 되지 않아 코드공간을 줄일 수 있다.

패키지의 검색

composer 를 통해서 설치할 수 있는 수많은 패키지들을 packagist를 에서 키워드나 패키지명, 벤더의 이름을 기반으로 검색하여 원하는 패키지를 손쉽게 찾을 수 있다.

1. 로컬 컴포넌트 레지스트리 둘러보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
"require": { // 의존 컴포넌트
"php": ">=5.6.4",
"laravel/framework": "5.3.*",
"guzzlehttp/guzzle": "5.3.*",
}
"require-dev": { // 개발시에만 필요한 컴포넌트 목록
}
```
## 2. 명령어
```shell
- composer require 벤더/페키지
선언 설치 한번에 하기
- composer require 벤더/패키지 --dev
- 개발 의존성 설치
- composer require 벤더/패키지 --no-dev
- 운영서버에서 개발 의존성
- composer install
- 프로젝트가 의존하는 컴포넌트 버전을 그래도 설치할 때
- composer.lock에 정의된 컴포넌트 버전을 그대로 설치 할때
- composer update
- 설치된 컴포넌트 업데이트
- pomposert.lock

3. 문제해결

  • 버전 출돌이 발생했을때
    • composer.json 파일을 열어 충돌하는 컴포넌트의 버전확인
    • 계속해서 충돌이 발생할때 composer.lock과 vendor를 지우고 재설치 한다.(composer install)

4. 오토로드

컴포저는 vendor 디렉터리 아래에 자신이 참조할 데이터베이스를 미리 만들어 놓는다.
이 데이터베이스는 클래스 이름과 파일 경로 간 매핑을 담고 있다.
vendor/autoload.php 를 이용해 데이터베이스를 메모리로 올린다.

composer.json 의 autoload 설정을 통해서도 할 수 있습니다.

1
2
3
4
5
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}

오토로딩은 네임스페이스에 대한 디렉토리 매핑을 정의한다.
src 디렉토리는 vendor 디렉토리와 마찬가지로 프로젝트 루트 디렉토리에 존재한다.
src/Foo.php 파일은 Acme\Foo 클래스를 의미 한다.

autoload.php 파일을 include 하게 되면 인스턴스를 리턴받을 수 있고, 이를 이용해 추가적인 네임스페이스를 지정할 수도 있다.

1
2
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

4.1 동작 순서

public/index.php -> bootstrap/autoload.php -> vendor/autoload.php

4.2 원리

어떤 클래스가 동작할 때 다른 클래스를 참조하면, 메모리에 적제된 정보를 이용해 매핑된 파일을 찾아서 자동으로 require를 수행한다.

한글 매뉴얼 Composer-korean-docs

Share