[PHP | Laravel] Laravel Framework를 이용한 MVC 패턴 구현 - 3. 라라벨의 Request LifeCycle
사실 이번 포스트에서는 서비스 프로바이더 파일에 대해 다뤄보려했는데, 파일 만으로는 동작이나 구조를 유추하기 힘들다고 느꼈다.
라라벨 공식 문서를 읽어보다 보니, 서비스 프로바이더를 이해하기 위해서는 서비스 컨테이너를 이해해야하고, 이를 이해하기 위해서는 라라벨의 Request Lifecycle에 대해 먼저 파악해야 할 것 같다고 느껴 이번 포스팅을 진행했다.
라라벨의 Request LifeCycle
1. index.php
라라벨 애플리케이션에서 모든 요청은 public/index.php 파일로부터 시작된다고 한다.
<?php
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
/*
|--------------------------------------------------------------------------
| Check If The Application Is Under Maintenance
|--------------------------------------------------------------------------
|
| If the application is in maintenance / demo mode via the "down" command
| we will load this file so that any pre-rendered content can be shown
| instead of starting the framework, which could cause an exception.
|
*/
if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
require __DIR__.'/../storage/framework/maintenance.php';
}
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| this application. We just need to utilize it! We'll simply require it
| into the script here so we don't need to manually load our classes.
|
*/
require __DIR__.'/../vendor/autoload.php';
/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request using
| the application's HTTP kernel. Then, we will send the response back
| to this client's browser, allowing them to enjoy our application.
|
*/
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Kernel::class);
$response = tap($kernel->handle(
$request = Request::capture()
))->send();
$kernel->terminate($request, $response);
index.php 파일은 Composer가 생성한 오토로더 정의를 로드한 뒤, bootstrap/app.php 스크립트에서 라라벨 앱의 instace를 가져온다.
라라벨 앱이 실행되면 가장 처음으로 하는 동작이 서비스 컨테이너 인스턴스를 생성하는 것이라고 한다.
2. Http/Console Kernel
index.php는 애플리케이션이 시작된 유형에 따라 요청을 Http 또는 Console의 Kernel로 전달한다. 이번에는 Http/Kernel의 동작에 대해 중점적으로 살펴보겠다.
Kernel들에 대해서는 이전 포스트에서 미리 다루어 보았으므로 게시글을 참고해보아도 좋을것 같다.
[PHP | Laravel] Laravel Framework를 이용한 MVC 패턴 구현 - 2. 프로젝트 구조를 살펴보자.(Kernel, Handler)
이전 게시글 [PHP | Laravel] Laravel Framework를 이용한 MVC 패턴 구현 - 1. 개발환경 구성 이직하는 업체에서 PHP를 익혀오면 좋을 것 같다고 요청해서 간단하게라도 실습을 진행해 보려고 한다. 본인도
dev-err.tistory.com
3. 서비스 프로바이더
커널 부트스트래핑(부팅) 과정에서 가장 중요한 것은 서비스 프로바이더를 로딩하는 것이라고 한다. 이 서비스 프로바이더들은 config/app.php의 provider 배열에 설정되어 있다. 먼저 모든 서비스 프로바이더의 register 메소드가 호출되고 이후에 등록된 모든 서비스 프로바이더의 boot 메소드가 호출된다.
서비스 프로바이더의 동작에 대해서는 다음과 같이 설명하고있다.(라라벨 코리아 제공)
서비스 프로바이더는 프레임워크의 데이터베이스, 큐, validation, 라우팅 컴포넌트와 같은 다양한 컴포넌트의 부트스트래핑(부팅과 같은 기초 작업들)의 처리를 책임집니다. 프레임워크가 제공하는 모든 기능을 초기화 하고 설정하는 것으로, 서비스 프로바이더는 라라벨의 부팅(부트스트래핑) 과정에서 가장 중요한 기능이라고 할 수 있습니다.
서비스 프로바이더에 대해서는 따로 자세히 다루도록하겠다.
4. 요청 처리- 디스패칭
애플리케이션이 부팅되고 모든 서비스 프로바이더가 등록된 후, Request가 Router에 도달하면 라우터는 라우팅 또는 컨트롤러로 Request를 전달 및 특정 라우트에 지정된 미들웨어를 실행한다.
이렇게 라라벨에서 Request의 라이프 사이클에 대해 정리해보았다.
다음은 서비스 컨테이너와 서비스 프로바이더에 대해 알아보겠다.