Laravel Lifecycle

이하루·2024년 7월 21일

Laravel의 전반적인 라이프사이클을 이해하고자 한다.

1. 웹 서버에서 public/index를 실행

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를 클라이언트에 제공

2. HTTP 요청 처리

Laravel은 HTTP, Console요청에 따라 라우팅을 통해 해당 요청을 처리할 컨트롤러 또는 클로저를 결정한다. HTTP요청일 경우, app/Http/kernel.php에 정의된 요청 전에 실행될 미들웨어들을 실행한다.

3. 라우팅 및 컨트롤러 실행

HTTP요청에 따라 route디렉토리 하위의 web.php나 api.php에 정의된 라우터를 찾아 실행하여, 해당 컨트롤러 혹은 클로저를 호출한다.

4. 응답 반환

컨트롤러와 클로저에서 생성된 응답은 요청 후에 실행될 미들웨어를 거친 후 클라이언트에 반환된다.

profile
어제보다 더 나은 하루

0개의 댓글