본문 바로가기
Framework/Laravel Framework

[Laravel] Request LifeCycle (1)

by 사용자 원동호 2021. 7. 9.

간략하게 순서도로 표현하면 위와 같다.

 

라라벨 Application에 대한 모든 요청의 시작은 public/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.
|
*/
// Composer에서 생성한 autoload.php 파일을 정의 한다고 한다.
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.php 스크립트를 참고해 인스턴스를 가져온다.(서비스 컨테이너)
$app = require_once __DIR__.'/../bootstrap/app.php';
// 애플리케이션 인스턴스가 생성되면 들어오는 요청은 커널에서 처리된다. 
$kernel = $app->make(Kernel::class);

$response = tap($kernel->handle(
    $request = Request::capture()
))->send();

$kernel->terminate($request, $response);

 

정리해보면

 

require __DIR__.'/../vendor/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

라라벨 Application에 대한 모든 요청의 시작은 public/index.php 파일이다. 해당 파일의 역할은 Composer(패키지 관리)가 생성한 Autoloader를 정의하고 Boostrap/app.php 스크립트를 참고하여 라라벨 애플리케이션의 인스턴스를 가져오며 Service Container를 생성한다. 가장 중요한 bootstrapping 작업 중 하나는 라라벨 애플리케이션에 대한 Service Provider를 로드하는것이다. 모든 Service Provider은 config/app.php 파일의 providers 배열에 구성된다.

 

$kernel = $app->make(Kernel::class);
$response = tap($kernel->handle(
    $request = Request::capture()
))->send();

다음으로 들어오는 요청은 애플리케이션에 들어오는 요청에 따라 해당하는 커널로 분배된다.

Http Kernel은 요청이 실행되기 전에 수행되어야 할 Illuminate\Foundation\Http\Kernel을 확장하여 bootstrappers 배열을 정의한다. 해당 배열 정보에는 환경 변수, 로깅, 에러 처리, 미들 웨어 정보 등의 정보가 담겨 있다. Http Kernel의 handle() method는 매우 간단하며 요청을 받으면 응답을 반환하면된다.

 

다음 포스팅에서는 Composer의 autoloading에 대해서 알아 보겠다!

 

댓글0