Laravel의 전반적인 라이프사이클을 이해하고자 한다.
Laravel의 entry point인 public/inde.php 파일이 가장 처음 로드된다.
우선 Composer에서 관리되는 라이브러리를 읽어오는 파일인 vendor/autoload.php가 우선 로드된다.
require __DIR__.'/../vendor/autoload.php';
다음으로 라라벨 기동에 필요한 클래스를 인스턴스화 시키는 파일인 bootstrap/app.php가 로드된다.
$app = require_once __DIR__.'/../bootstrap/app.php';
bootstrap/app.php 내부에서 각각의 Laravel 인터페이스에 바인딩한다.
// 설정된 미들웨어 바인딩
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
// 커스텀 artisan명령어 바인딩
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
// 에러 발생시 처리 설정 바인딩
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
※ 커널의 역할
・사용자의 요청을 미들웨어로 전달 및 예외 처리를 담당.
・closure, controller에 반환되는 최종 response를 클라이언트에 제공
Laravel은 HTTP, Console요청에 따라 라우팅을 통해 해당 요청을 처리할 컨트롤러 또는 클로저를 결정한다. HTTP요청일 경우, app/Http/kernel.php에 정의된 요청 전에 실행될 미들웨어들을 실행한다.
HTTP요청에 따라 route디렉토리 하위의 web.php나 api.php에 정의된 라우터를 찾아 실행하여, 해당 컨트롤러 혹은 클로저를 호출한다.
컨트롤러와 클로저에서 생성된 응답은 요청 후에 실행될 미들웨어를 거친 후 클라이언트에 반환된다.