PHP 에 오토로딩 기능이 포함되었지만 app 개발자는 오토로딩할 클래스를 직접 spl_autoload_register 를 사용하여 일일이 등록해야 하는 번거로움이 있습니다.
컴포저는 사용할 패키지나 클래스가 있을 경우 간단하게 패키지명만 기술하면 자동으로 로딩해 주는 아주 편리하고 훌륭한 기능을 제공하고 있습니다.
이 책에서는 자동으로 클래스나 인터페이스를 로딩해 주는 것을 오토로딩으로 부르며 오토로딩을 수행하는 로더(Loader)를 오토로더(Auto Loader) 라고 호칭합니다.
만약 컴포저를 사용할 수 없는 오래된 프레임워크에서 외부 라이브러리를 사용하고 할 경우 매우 불편하고 귀찮은 작업을 수행해야 합니다.
파일 시스템을 추상화하여 로컬 파일이든 드랍박스에 저장된 파일이든 혹은 아마존 클라우드에 저장된 파일이든 단일한 인터페이스로 손쉽게 다룰 수 있는 유명한 라이브러리인league/flysystem패키지(라라벨 5에는 기본 탑재되어 있습니다.)를 프로젝트에서 사용한다고 가정해 봅시다.
만약 컴포저를 사용할수 없는 환경이라면 이 패키지를 사용하기 위해서는 다음과 같이spl_autoload_register함수에 패키지를 등록해야 사용할 수 있습니다.
하지만 컴포저를 사용한다면 composer require league/flysystem명령을 콘솔에서 실행하거나 다음과 같이composer.json의require 항목에 의존성을 기술하고composer update를 실행하면 오토로더가 생성됩니다.
"require": {
"monolog/monolog":"^1.13",
"nesbot/carbon":"^1.19",
"league/flysystem":"^1.0"
},
오토로더는 classmap 과 psr-4 두 가지 방식을 사용할 수 있습니다. 다음은 composer.json 에 현재 프로젝트내 database 폴더는 classmap 방식의 오토로더를 사용하고 app 폴더는 App 라는 네임스페이스를 쓰는 psr-4 방식의 오토로더를 사용하겠다는 의미로 라라벨 5의 기본 설정입니다.
이제 클래스맵과 psr-4 방식의 차이점에 대해서 알아보도록 하겠습니다.
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\":"app/"
}
},
클래스맵 방식의 오토로더로 설정할 경우 클래스맵에 지정된 폴더내에 모든 php 를 읽어서 다음과 같은 정적 배열을 생성하고 이 파일들을 오토 로딩합니다.
정보를 정적으로 생성후 로딩하므로 클래스맵은 런타임에 처리 속도가 psr-4 보다 빠르지만 새로운 파일이나 폴더가 추가되면 컴포저에게 오토로딩 정보를 갱신해야 한다고 알려줘야 합니다. 이 명령어는 dump-autoload 또는 dumpautoload 명령어이며 vendor/autoload.php 에 새로운 클래스맵 오토로더를 생성합니다.
$ composer dump-autoload
psr-4 방식의 오토로더는 다음과 같이 네임스페이스와 이를 매칭시킬 디렉토리만 지정하게 되며 동적으로 런타임에 요청한 클래스나 인터페이스, 트레이트를 찾게 됩니다.
php.ini 파일을 수정해 주어야 합니다. php.ini 파일 위치는 아까 phpinfo()에서 확인하였습니다. php.ini 파일을 열어서 마지막에 아래 라인을 추가해줍니다. 저장후 php-fpm 을 재시작하고 다시 phpinfo()를 보시면 php에 redis 모듈이 표시되는걸 확인할수 있습니다. 세션 정보도 redis 로 변경합니다.
그누보드5의 common.php 에는 session 설정과 관련된 코드가 들어 있습니다. redis 를 session 저장소로 사용하는 경우 session.save_path 를 수정하면 안됩니다. /common.php 파일 190번 라인에 있는 아래 코드를 주석 처리 합니다.