본문 바로가기

Web/개발 환경

Composer란 무엇일까? - 설치 및 사용법

개요
# Composer란 무엇일까?
    Composer 설명
    Dependency Manager(의존성 관리 도구)란?
# Composer 설치하기
    macOS
        Locally(지역)
        Globally(전역)
# Composer를 이용한 패키지 관리
    외부 패키지를 설치하는 방법
        초기화
        설치
        갱신
        추가
        삭제
References

 

 

 

개요


이번 글에서는 Composer에 대한 소개와 설치 방법 및 사용법에 대해 소개하겠습니다.

 

# Composer란 무엇일까?


Composer 설명

 

Composer(이하 ‘컴포저’)는 PHP의 의존성 관리 도구로, 패키지를 관리하고 자동으로 로드해주는 도구입니다.
PHP 개발에서 외부 라이브러리나 프레임워크를 사용할 때, 컴포저를 통해 이러한 패키지들을 쉽게 설치하고 관리할 수 있습니다.

Dependency Manager(의존성 관리 도구)란?

간단히 설명하자면, 프로젝트를 진행하는 도중 외부 라이브러리를 필요로 할 때 사용하는 도구입니다.

 

과거에는 외부 라이브러리를 다운로드하고 압축을 푼 후 프로젝트에 수동으로 추가했습니다. 이후 라이브러리가 업데이트되면 다시 다운로드하고 업데이트하는 번거로운 과정이 필요했습니다.

 

이런 방식에는 여러 문제가 있었습니다.

  • 라이브러리를 설치하기 위해 내 환경에 맞는 버전을 찾아야 했습니다.
  • 종속성으로 인해 추가적인 라이브러리를 설치해야 했습니다.
  • 버전을 기록하지 않아 나중에 혼란이 있었습니다.
  • 버전 업데이트 시 오류가 발생할 수 있었습니다.
  • 이러한 문제는 PHP 뿐만 아니라 다른 개발 상황에서도 발생할 수 있습니다.

위와 같은 문제를 해결하기 위해 PHP에서는 Composer, Node.js에서는 npm, Python에서는 pipenv 등의 의존성 관리 도구들이 등장했습니다.

 

# Composer 설치하기


컴포저는 PHP로 작성되었기 때문에 사용하기 위해서는 PHP가 설치되어 있어야 합니다.

 

공식 홈페이지

 

컴포저는 Locally와 Globally 두 가지 설치 방법이 있습니다.

Locally는 프로젝트에 컴포저 바이너리 프로그램을 직접 다운로드하여 설치하는 방법입니다.
이 방법은 자신의 프로젝트 안에 컴포저 프로그램, 즉 패키지 관리자를 포함하는 것입니다.

Globally는 운영체제에 전체에서 사용할 수 있는 방법입니다.

 

각각의 방법은 장단점이 있습니다.

Locally를 사용하면 프로젝트가 다른 곳에 배포되어도 별도의 컴포저 설치가 필요하지 않습니다. 프로젝트 내에 포함된 컴포저를 통해 패키지 관리를 할 수 있습니다.

반면에 Globally는 자신의 컴퓨터에서 여러 프로젝트를 수행할 때, 각각의 프로젝트에 컴포저를 별도로 설치하지 않아도 사용할 수 있습니다.

macOS

Locally(지역)

현재 작업 중인 프로젝트의 최상위 디렉토리에서 다음 명령어를 실행합니다.

# 설치파일 설치
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# 설치파일 실행
php composer-setup.php
# 설치파일 삭제
php -r "unlink('composer-setup.php');"

명령어를 실행한 후에 현재 위치에 composer.phar 파일이 생성된 것을 확인할 수 있습니다.

 

다음 명령어를 입력하여 컴포저 설치를 확인합니다.

# 컴포저 옵션 도움말 확인
php composer.phar

Globally(전역)

# 전역 설치
sudo mv composer.phar /usr/local/bin/composer

 

# Composer를 이용한 패키지 관리


외부 패키지를 설치하기

Packagist는 컴포저의 패키지 메인 저장소입니다. 이곳에서 다양한 패키지를 검색할 수 있습니다.

 

Packagist


초기화

프로젝트에서 컴포저를 사용하여 패키지를 관리하려면 처음에 한 번 초기화 과정을 거쳐야 합니다.

이 과정은 init 명령어를 사용하여 진행합니다.

# init
composer init

 

명령어를 실행하면 초기화 옵션을 설정해야합니다.

저는 다음과 같이 설정하겠습니다.

# 패키지 이름
Package name (<vendor>/<name>) [sehan/composer-test]: composer_test/package
# 패키지 설명
Description []: 컴포저 테스트를 위한 패키지 관리 
# 패키지 제작자
Author [LeeSehan <dltpgks711@naver.com>, n to skip]: n
# 패키지 안정성
Minimum Stability []: 
# 패키지 타입 (기본값: libray)
Package Type (e.g. library, project, metapackage, composer-plugin) []: libray
# 라이센스
License []:

 

이 부분은 현재 의존성 패키지를 설정할 것인지 묻는 질문입니다. 나중에 설정할 것이므로 스킵하겠습니다.

require는 실제 프로젝트에서 사용되는 의존성 패키지를 말하고,

require-dev는 개발 중에 사용되는 (실 서비스에서는 사용되지 않을) 의존성 패키지를 말합니다.

Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n

 

컴포저에 설치된 패키지들을 자동으로 로드할 수 있도록 별도의 autoload를 제공하는데 classmap과 PSR-4 두 가지 방식을 모두 지원합니다.

이 부분은 그 중 PSR-4에 대한 설정을 할 것인지 묻는 질문입니다. 스킵하겠습니다.

Add PSR-4 autoload mapping? Maps namespace "ComposerTest\Package" to the entered relative path. [src/, n to skip]: n

 

패키지 옵션을 확인하고 완료합니다.

Do you confirm generation [yes]? y

 

초기화를 마치면 composer.json 파일이 생성된 것을 확인할 수 있습니다. composer.json 파일은 해당 프로젝트에서 사용하는 패키지에 대한 정보를 JSON 형식으로 담고 있습니다.

 

composer.json 파일에서 사용 가능한 항목


설치

composer.json 파일을 읽고, vendor 디렉토리에 해당 패키지들을 설치합니다.

이 과정은 install 명령어를 사용하여 진행합니다.

composer install

 

 

인스톨을 완료하면 vendor 디렉토리와 composer.lock 파일이 생성됩니다.

 

vendor 디렉토리는 json 파일에 기재된 패키지들의 실제 소스 코드를 디렉토리별로 담고 있습니다. 이 디렉토리의 바로 하위에 autoload.php 파일이 있으며, 프로젝트에서는 이 파일을 require()로 포함시켜주면 디렉토리로 나뉜 모든 패키지가 자동으로 포함되도록 구성됩니다.

 

composer.lock 파일은 현재 설치된 라이브러리를 이용하기 위해서 필요한 선행 라이브러리들의 항목과 정확한 버전이 기술되어 있습니다. 일종의 스냅샷으로 현재 상태를 기록해둔 것입니다. 컴포저 인스토를 진행했을 때 이 파일이 존재한다면 컴포저는 이 파일에 기술된 라이브러리와 다른 버전의 라이브러리만 설치합니다.

 

composer.lock 파일은 현재 설치된 라이브러리를 이용하기 위해 필요한 선행 라이브러리들의 항목과 정확한 버전이 기록되어 있습니다. 이 파일은 현재 상태를 스냅샷으로 기록하는 역할을 합니다. 컴포저 인스톨을 진행할 때 이 파일이 존재한다면, 컴포저는 해당 파일에 기록된 라이브러리와 버전만 설치합니다.


갱신

composer.lock 파일을 갱신하기 위해서는 update 명령어를 사용합니다. 이 명령어는 설정한 패키지를 확인하고 composer.lock 파일에 정확한 버전을 기록합니다.

php composer update

 

만약 전체 패키지가 아닌 특정 패키지만 갱신하길 원한다면, 다음과 같이 할 수 있습니다.

php composer.phar update vendor/패키지1 vendor/패키지2

추가

새로운 패키지를 composer.json 파일에 추가할 때는 require 명령어를 사용합니다. 특정 버전을 추가하려면 다음과 같이 할 수 있습니다.

# 패키지 추가
composer require 패키지
# 패키지 추가 - 버전 지정
composer require 패키지:2.0.0

삭제

composer.json 파일에서 패키지를 제거할 때는 remove 명령어를 사용합니다.

# 패키지 삭제
composer remove 패키지

 

 

References


[1] https://xpressengine.github.io/Composer-korean-docs/

[2] https://opentutorials.org/course/62/5221

[3] https://nam24.tistory.com/23

'Web > 개발 환경' 카테고리의 다른 글

Windows 10 LAMP 설치 방법 (2)  (2) 2020.12.01
Windows 10 LAMP 설치 방법 (1)  (2) 2020.11.30