오토로드


PHP는 라이브러리 파일들은 include 또는 require 명령을 통하여 코드를 결합하게 됩니다.

라이브러리 패키지들의 파일이 한두개면 이 방식으로도 충분히 가능하겠지만, 파일이 많아질 경우 이를 관리하는 것은 매우 힘이 듭니다.

컴포저를 이용하면 외부의 라이브러리를 자유롭게 결합하여 사용을 할 수 있습니다. 컴포저의 라이브러리는 PSR-0,PSR-4를 따르고 있습니다.


03.1 SPL


이전 버전의 PHP의 경우 사용하는 모든 라이브러리를 require, include 형태로 직접 일일이 불러와야 했습니다. 이과정에서 실수로 일부 소스파일에는 라이브러리를 삽입하는 코드가 누락되는 경우가 발생하기도 합니다. 심지어 라이브러리의 폴더 위치를 변경할 경우에는 소스전체를 수정해야 하는 경우도 있습니다.

PHP가 5버전으로 올라오면서 클래스로 작성된 파일들을 자동으로 include 할 수 있도록 도와주는 기능이 추가되었습니다.

새롭게 추가된 spl_autoload_register 는 일일이 개별적으로 등록을 해주어야 하는 클래스들을 자동으로 찾아서 include 하여 줍니다. 이를 오토로드라고 합니다.

요즘에는 라이브러리도 오토로드 기능을 이용하는 경우가 많이 있습니다. 코드 한줄만 가지고도 다양한 클래스 라이브러리를 추가할 수 있습니다. 수많은 클래스 파일들을 자동으로 처리해 주는 오토로드 기능은 개발자에게 매우 유익한기능입니다.

03.1.1 SPL 예제


03.2 include_path Include_path는 PHP 표준함수에서 파일을 검색할 때 유용합니다.

Require(), include(), fopen(), file(), readfile(), file_get_contents()와 같은 함수들을 통하여 파파일 접근할 때 지정한 path에서 검색하게 됩니다.

기본적인 include_path는 php.ini 설정파일에서 설정을 합니다.


03.3 컴포저 오토로드


컴포저는 설치된 페키지들을 자동으로 오토로드 할 수 있도록 별도의 autoload 코드를 생성하여 제공합니다.

또한 페키지를 설치하거나, 제거할 경우 autoload 코드를 재생성하여 제공하기 때문에, 오토로드 때문에 고민할 필요가 없습니다.

컴포저의 오토로드는 clasmap 과 PSR-4 두가지의 방식을 모두 지원합니다.

Classmap은 현재의 프로젝트 내의 클래스를 사용하겠다고 지정을 하는 것입니다. PSR-4는 네임스페이스와 연계되어 자동로더를 사용하겠다고 지정을 하는 것입니다.


03.2.1 classmap vs PSR4장단점


클래스맵의 경우 처리속도 측면에서 PSR-4보다 빠른 속도를 가지집니다. 다만 새로운 파일이 추가될 경우 직접 수정, 추가를 해주어야 하는 단점이 있습니다.

03.2.2 PSR-4


PSR-4의 방식은 클래스의 네임스페이스와 매칭하여 동작을 합니다. 매칭되는 디렉토리를 지정하고 동적으로 클래스, 인터페이스, 추상화, 트레이트를 찾아 처리를 하게 됩니다.

PSR4는 동적으로 런타임 방식으로 로딩합니다. 따라서 클래스맵 처럼 매번 설정 내용을 변경해 주지 않아도 됩니다.

다만 단점으로는 약간 느리게 됩니다.

단점을 보완하기 위해서 실제 서버스에서는 PSR-4 대신에 클래스맵 형태로 변환하여 사용하는 것도 한 방법입니다. 그렇게 되면 좀더 오토로드의 속도를 개선을 할 수 있습니다.

이를 쉽게 하기 위해서 dumpautoload 명령과 -o 옵션을 같이 적용을 하게 되면 클래스맵 형태로 생성이 됩니다. Psr-0, psr-4 용의 오로로드를 덤프하여 클래스맵 형태로 만들어 주게 됩니다.

$ composer dumpautoload -o

하나의 팁이 될 수 있습니다.