관리 메뉴

java,javascript,android,php,sql,공부용,메모용

라라벨 6 - 라이프 사이클 정리, 엔트리포인트 (HTTP요청 기준 내용) 본문

개발/php

라라벨 6 - 라이프 사이클 정리, 엔트리포인트 (HTTP요청 기준 내용)

yy_dd2 2025. 10. 15. 16:34
반응형

라라벨이 어떤 원리로 돌아가는지 설명해주는 내용에 대해서 공부한 내용을 정리했다.

물론 모든 질문은 AI의 도움을 받아 해결했고 정리도 부탁했다.

메모용이면 충분해서 한번 더 볼겸 내용을 정리함.

🟢 라라벨 라이프 사이클 정리 (HTTP 요청 기준)

라라벨 애플리케이션에서 브라우저 요청이 들어오면, 내부적으로 다음과 같은 흐름으로 처리가 됩니다.

[브라우저 요청] → 엔트리포인트(index.php) → HTTP 커널 → 라우터 → 미들웨어 → 컨트롤러/클로저 → HTTP 응답 → 브라우저

 

1️⃣ 엔트리 포인트 (Entry Point)

  • 파일 위치: public/index.php
  • 라라벨 애플리케이션의 시작점
  • 역할:
    1. 오토로딩(Composer autoload)
    2. 프레임워크 초기화
    3. 애플리케이션 실행 및 HTTP 응답 송신
    4. 종료 처리
<?php

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;

// Composer 오토로딩
require __DIR__.'/../vendor/autoload.php';

// 애플리케이션 부트스트랩
$app = require_once __DIR__.'/../bootstrap/app.php';

// HTTP 커널 생성
$kernel = $app->make(Kernel::class);

// 요청 생성
$request = Request::capture();

// 요청 처리 및 응답 반환
$response = $kernel->handle($request);

// 브라우저로 응답 전송
$response->send();

// 종료 처리
$kernel->terminate($request, $response);

 

💡 설명:

  • 여기서 $app->make(Kernel::class)가 HTTP 커널 객체를 만들어서 이후 요청 처리를 위임합니다.
  • Request::capture()는 브라우저 요청 데이터를 수집합니다.
  • terminate()는 미들웨어 중 terminate() 메서드가 있는 경우, 응답 전송 후 후처리를 수행합니다.

 

2️⃣ HTTP 커널 (HTTP Kernel)

  • 파일 위치: app/Http/Kernel.php
  • 역할: 애플리케이션 요청을 처리하는 핵심
  • HTTP 요청을 받고, 미들웨어를 거쳐 라우터로 전달합니다.
public function handle($request)
{
    $this->bootstrap(); // 프레임워크 초기화

    // 미들웨어를 순차적으로 실행
    return $this->sendRequestThroughRouter($request);
}

 

💡 설명:

  • handle() 메서드가 엔트리 포인트에서 호출되며,
    요청을 라우터까지 전달하고 응답을 반환하는 역할을 합니다.
  • bootstrap() → 프레임워크 초기화 (환경 설정, 서비스 등록 등)
  • sendRequestThroughRouter() → 라우터를 통해 컨트롤러/클로저 실행

3️⃣ 라우터 (Router)

  • 파일 위치: routes/web.php
  • 역할: 요청 URL과 실행할 로직을 연결
  • 예시:
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index']);

Route::get('/login', [App\Http\Controllers\LoginController::class, 'index'])
     ->middleware('guest')
     ->name('login');

 

💡 설명:

  • 브라우저 요청 URL이 /home이면 HomeController@index를 실행합니다.
  • middleware('guest')처럼 라우터에서 미들웨어를 지정할 수도 있습니다.

4️⃣ 미들웨어 (Middleware)

  • 역할: 요청과 응답 사이에서 추가 처리를 하는 클래스
  • 예시: 인증 확인, CSRF 검증, 로그 기록 등
  • 미들웨어는 app/Http/Middleware/ 폴더에 위치하며, HTTP 커널에서 글로벌 또는 라우터별로 적용 가능
public function handle($request, Closure $next)
{
    // 예: 로그인 여부 확인
    if (!auth()->check()) {
        return redirect('/login');
    }

    // 다음 단계(라우터/컨트롤러)로 요청 전달
    return $next($request);
}

 

💡 설명:

  • $next($request) → 요청을 다음 미들웨어 또는 최종 컨트롤러로 전달
  • 요청 전/후에 작업을 추가 가능 (ex: 로깅, 세션 관리)

5️⃣ 컨트롤러 / 클로저

  • 라우터에서 지정된 실제 비즈니스 로직을 수행하는 부분
  • 클로저 방식 예시:
Route::get('/', function () {
    return view('welcome');
});

 

  • 컨트롤러 방식 예시:
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index']);

 

💡 설명:

  • 컨트롤러는 요청을 받고, 모델이나 서비스와 상호작용 후 응답(View, JSON 등)을 반환
  • 미들웨어를 거쳐 전달된 요청을 실제로 처리하고 결과를 브라우저에 반환하는 마지막 단계입니다.

✅ 라이프 사이클 요약

단계 역할
엔트리 포인트(index.php) 브라우저 요청 수집, 애플리케이션 시작, HTTP 커널 호출, 응답 전송
HTTP 커널(app/Http/Kernel.php) 요청 초기화, 미들웨어 실행, 라우터 전달
라우터(routes/web.php) URL과 컨트롤러/클로저 연결, 라우팅 결정
미들웨어(app/Http/Middleware) 요청 전/후 처리, 인증·로그·세션 등
컨트롤러/클로저 실제 비즈니스 로직 처리, 응답 반환

 

┌───────────────┐
│ 브라우저 요청 │
└───────┬───────┘
        │
        ▼
┌─────────────────────────┐
│ public/index.php        │
│ - Composer 오토로딩     │
│ - 부트스트랩(app.php)  │
│ - HTTP 커널 생성        │
│ - Request 캡처          │
│ - $kernel->handle()     │
└─────────┬──────────────┘
          │
          ▼
┌─────────────────────────┐
│ app/Http/Kernel.php     │
│ - bootstrap()           │
│ - 미들웨어 실행         │
│ - sendRequestThroughRouter() │
└─────────┬──────────────┘
          │
          ▼
┌─────────────────────────┐
│ routes/web.php           │
│ - URL 매핑               │
│ - 라우터 선택             │
│   (컨트롤러/클로저)      │
└─────────┬──────────────┘
          │
          ▼
┌─────────────────────────┐
│ 미들웨어(app/Http/Middleware) │
│ - 요청 전 처리             │
│   (인증, CSRF, 로그 등)    │
│ - $next($request) 호출     │
│ - 응답 후 처리             │
└─────────┬──────────────┘
          │
          ▼
┌─────────────────────────┐
│ 컨트롤러 / 클로저        │
│ - 요청 처리              │
│ - 모델/서비스 호출       │
│ - 응답 반환(View/JSON)   │
└─────────┬──────────────┘
          │
          ▼
┌───────────────┐
│ HTTP 응답     │
│ 브라우저 전송 │
└───────────────┘
          │
          ▼
┌───────────────┐
│ $kernel->terminate() │
│ 종료 처리           │
└───────────────┘

 

 

💡 설명

  • 각 단계는 실제 코드 파일과 연결되어 있어, 티스토리에서 파일 위치 + 역할을 함께 보여주면 이해가 쉽습니다.
  • 미들웨어는 요청 전/후 처리 가능하므로 화살표로 흐름을 표시했습니다.
  • 마지막 terminate() 단계는 응답 후 후처리(로그 기록, 세션 종료 등)를 수행합니다.

 

 

1️⃣ 라라벨 라이프사이클 (HTTP 요청 기준)

  1. 엔트리 포인트(index.php)
    • 브라우저 요청이 들어오면 가장 먼저 실행되는 곳
    • 애플리케이션 부트스트랩, HTTP 커널 호출, 응답 전송 담당
  2. HTTP 커널(app/Http/Kernel.php)
    • 요청을 초기화하고 미들웨어를 거쳐 라우터로 전달
    • 프레임워크 부팅과 요청 처리 중심
  3. 라우터(routes/web.php)
    • 요청 URL과 실행할 컨트롤러/클로저 연결
    • 요청이 어디로 가야 하는지 결정
  4. 미들웨어(app/Http/Middleware)
    • 요청 전/후 추가 처리 (인증, CSRF, 로그 등)
    • 흐름 제어 및 보안/공통 기능 담당
  5. 컨트롤러 / 클로저
    • 실제 비즈니스 로직 수행
    • 모델/서비스 호출 후 HTTP 응답 반환

💡 핵심 한 문장 요약:

브라우저 요청 → index.php → 커널 → 미들웨어 → 라우터 → 컨트롤러 → 응답

 

🔹 라이프사이클 쉽게 이해

  • index.php → 감독: “영화 시작!”
  • HTTP 커널 → 프로듀서: “촬영 준비 완료, 배우에게 역할 전달”
  • 라우터 → 스태프: “어떤 장면을 찍을지 배정”
  • 미들웨어 → 보조 스태프: “카메라 세팅, 안전 점검, 연기 체크”
  • 컨트롤러 / 클로저 → 배우: “실제 연기 수행 (비즈니스 로직 처리)”
  • 응답 반환 → 상영관: “관객(브라우저)에 결과 보여줌”

💡 한 줄 요약:

요청이 들어오면 감독 → 프로듀서 → 스태프 → 배우 → 상영 순서로 처리된다.

구분역할이해하기 쉬운 비유핵심 요약

라이프사이클 브라우저 요청이 들어와서 응답까지 처리되는 전체 흐름 영화 제작 과정: 시나리오 → 촬영 → 편집 → 상영 요청이 들어오면 index.php → 커널 → 미들웨어 → 라우터 → 컨트롤러 → 응답 순서로 처리
반응형
Comments