본문 바로가기
PHP/생활코딩

6/1 생활코딩 - PHP 기본 수업 - 컴포저

by SKim입니다 2020. 6. 1.

34. 컴포저 - 1. 소개

컴포저: 패키지 매니저라는 카테고리에 속하는 SW

 

 

 

34. 컴포저 - 2. 설치

https://getcomposer.org/

 

Composer

A Dependency Manager for PHP Latest: 1.10.6 Getting Started Download Documentation Browse Packages Issues GitHub

getcomposer.org

 

 

 

 

C:\Bitnami\wampstack-7.4.6-1\php\php.exe

 

 

Win+R -> cmd 실행

composer 엔터 쳤을 때 이런 화면이 뜨면 설치에 성공한 것이다.

 

 

34. 컴포저 - 3. 기본 사용법

컴포저는 어떤 프로젝트에 있어서 php 파트에 대한 관리자 역할을 한다.

프로젝트를 지배하는 SW.

 

특정 디렉토리를 어떤 프로젝트의 홈 디렉토리로 컴포저를 통해서 관리하고 싶다면

cmd에서 그 디렉토리로 들어간 후에

composer init 엔터

형식에 따라서 패키지 이름을 정한다.

(노란색은 추천)

벤더는 조직이나 닉네임 (대문자x)

 

나머지는 다 그냥 엔터쳐도 된다.

 

 

 

이렇게하면 지정한 그 디렉토리에

composer.json이라는 파일이 생성된다.

 

그 파일의 내용은 이렇다.

즉 컴포저가 프로젝트를 관리할 때 사용할 정보들이 저장되어 있다.

 

require는 의존성을 알아야 한다.

의존성이란?

 

예를 들어 우리가 만들려고 하는 SW가 a라는 라이브러리를 사용한다고 하자.

그러면 우리가 만들고 있는 SW는 a라는 라이브러리에 의존하는 관계이다.

 

즉 우리가 만들고 있는 SW가 어떠한 라이브러리에 의존하고 있는지를

require라는 키워드 안에 기술해주면 된다.

= 우리의 SW는 어떠한 라이브러리를 요구(require)하는가

 

여기에 직접 적어도 되지만, 컴포저의 명령을 이용하는 것이 더 권장되는 방식이다.

 

그러면 우리가 의존하고 싶은 라이브러리는 어디서 찾을 수 있을까?

 

https://packagist.org/

 

Packagist

Define Your Package Put a file named composer.json at the root of your package's repository, containing this information: { "name": "your-vendor-name/package-name", "description": "A short description of what your package does", "require": { "php": "^7.2",

packagist.org

여기서 검색하면 된다.

ex) monolog

 

여기 나오는 것들이 우리의 프로젝트의 부품으로 사용할 수 있는 패키지이다.

 

모노로그는 어떠한 라이브러리들에 의존하고 있는지

 

버전은 dev 딱지가 없는 것이 안정된 버전이다.

 

 

 

사용법

이것을 cmd에 입력한다.

 

require에 코드가 생겼다.

모노로그라는 벤더가 만든

모노로그라는 패키지 + 버전

 

composer.lock이라는 파일과

vendor라는 폴더가 생겼다.

 

 

34. 컴포저 - 4. 의존성

index.php 파일을 만들었다.

이 파일에 모노로그를 포함시켜보겠다.

 

모노로그는 로깅을 하는 툴이다.

로깅이란?

$a에 뭐가 있는지 찍어보는 것을 로깅한다고 한다.

 

이 프로젝터에서는 Monolog의 Logger라는 클래스를 사용한다라고

네임스페이스가 지정되어 있다.

 

동시에 StreamHandler라는 클래스도 사용한다고 되어 있다.

 

실제로 사용할 때는

여기서 사용하고 있는 것이다.

 

 

logger.php가 있다.

 

이렇게 하면 이론적으로는 되는데 다른 애가 오류를 발생시킨다.

 

 

 

이렇게 할 필요 없고,

 

컴포저에서 제공하는 단 하나의 파일만 우리의 프로젝트에 포함시키면 된다.

verdor 밑에 autoload.php가 있다.

__DIR__은 index.php 파일이 위치하고 있는 경로를 알려주는 상수이다.

 

이렇게만 써주면 주석처리한 것 같은 인클루드를

컴포저가 알아서 해준다.

 

회색으로 선택한 부분은

Logger라는 클래스의 로깅 정보를 어디에 저장할 것인가를 지정하는 부분이다.

 

에러가 뜨고,

리로드를 했을 때 app.log라는 파일이 생성되면 잘 된 것이다.

 

tail -f는 app.log라는 텍스트 파일에 추가된 정보들을 실시간으로 계속 보여준다.

(윈도우에서는 안 된다.)

 

리로드하면

 

 

 

 

34. 컴포저 - 5. 오토로드

이번 시간에는 우리가 직접 만든 라이브러리를

컴포저의 오토로드 기능을 이용해서 자동으로 로딩하는 것을 살펴보겠다.

 

먼저 새로운 라이브러리를 만들어 보겠다.

 

 

이 new Hi를 여기서 호출하는 것이 아니라,

composerApp/main.php 파일을 만들어서

여기에서 실행되도록 해보자.

 

에러가 뜨므로 require를 해보자.

 

 

 

 

 

이렇게 할 수도 있지만 클래스가 많을 경우에는

오토로딩하는 것이 훨씬 편할 것이다.

 

 

일단 이렇게 하면 에러가 뜬다.

 

왜냐하면 우리가 만든 Hi라는 클래스는

컴포저를 통해서 관리되고 있지 않기 때문이다.

 

https://getcomposer.org/doc/01-basic-usage.md#autoloading

 

Basic usage - Composer

Basic usage# Introduction# For our basic usage introduction, we will be installing monolog/monolog, a logging library. If you have not yet installed Composer, refer to the Intro chapter. Note: for the sake of simplicity, this introduction will assume you h

getcomposer.org

이 코드를 카피해서 

composer.json 파일에 붙여넣기를 하고

 

이렇게 바꾸고

Greeting.php를 src 폴더 밑으로 옮겼다.

 

 

그러면 컴포저는 Greeting이라는 네임스페이스가 나타나게 되면

우리 대신에 src\Greeting 디렉토리 밑에서

네임스페이스의 이름을 이용해서

필요한 우리가 직접 만든 라이브러리를 로딩해준다.

 

 

그리고 나서 컴포저에게

우리가 오토로드 정보를 변경했다는 사실을 알려줘야 한다.

 

composer install 하고 엔터를 치면

노란색으로 표시된 두 개의 파일이 바뀌었다.

들어가보면 Greeting이라는 라이브러리를 인식하도록 바뀌어져 있다.

'PHP > 생활코딩' 카테고리의 다른 글

6/1(3) 생활코딩 - PHP 기본수업 - Interface  (0) 2020.06.01
6/1(2) 생활코딩 - PHP 기본수업 - 상속  (0) 2020.06.01
5/31(5) 생활코딩  (0) 2020.05.31
5/31(3) 생활코딩  (0) 2020.05.31
5/31 생활코딩  (0) 2020.05.31

댓글