일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 맥 mysql
- 객체지향
- 한글입력 안됨
- 맥 아파치
- 객체
- 제이펍 출판
- 한글입력 오류
- 자바스크립트 객체 만들기
- 자바스크립트 class
- 배열 분해 할당
- 한글입력 잘림
- 생활코딩
- 블록 스코프
- 황반석 옮김
- 자바스크립트 객체
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 제이쿼리연결
- 비주얼스튜디오 코드
- SwiftUI 기반의 iOS 프로그래밍
- max apache
- 한글입력 씹힘
- jquery 사용하기
- python tkinter 인터페이스
- 기획자랑 사이좋게 지내고 싶다
- 닐 스미스 지음
- max MySQL
- python GUI 사용하기
- 자바스크립트 배열 할당
- 자바스크립트
- 한글잘림
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 맥 mysql
- 객체지향
- 한글입력 안됨
- 맥 아파치
- 객체
- 제이펍 출판
- 한글입력 오류
- 자바스크립트 객체 만들기
- 자바스크립트 class
- 배열 분해 할당
- 한글입력 잘림
- 생활코딩
- 블록 스코프
- 황반석 옮김
- 자바스크립트 객체
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 제이쿼리연결
- 비주얼스튜디오 코드
- SwiftUI 기반의 iOS 프로그래밍
- max apache
- 한글입력 씹힘
- jquery 사용하기
- python tkinter 인터페이스
- 기획자랑 사이좋게 지내고 싶다
- 닐 스미스 지음
- max MySQL
- python GUI 사용하기
- 자바스크립트 배열 할당
- 자바스크립트
- 한글잘림
Archives
- Today
- Total
java,javascript,android,php,sql,공부용,메모용
라라벨 6 - 라이프 사이클 정리, 엔트리포인트 (HTTP요청 기준 내용) 본문
반응형
라라벨이 어떤 원리로 돌아가는지 설명해주는 내용에 대해서 공부한 내용을 정리했다.
물론 모든 질문은 AI의 도움을 받아 해결했고 정리도 부탁했다.
메모용이면 충분해서 한번 더 볼겸 내용을 정리함.
🟢 라라벨 라이프 사이클 정리 (HTTP 요청 기준)
라라벨 애플리케이션에서 브라우저 요청이 들어오면, 내부적으로 다음과 같은 흐름으로 처리가 됩니다.
[브라우저 요청] → 엔트리포인트(index.php) → HTTP 커널 → 라우터 → 미들웨어 → 컨트롤러/클로저 → HTTP 응답 → 브라우저
1️⃣ 엔트리 포인트 (Entry Point)
- 파일 위치: public/index.php
- 라라벨 애플리케이션의 시작점
- 역할:
- 오토로딩(Composer autoload)
- 프레임워크 초기화
- 애플리케이션 실행 및 HTTP 응답 송신
- 종료 처리
<?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 요청 기준)
- 엔트리 포인트(index.php)
- 브라우저 요청이 들어오면 가장 먼저 실행되는 곳
- 애플리케이션 부트스트랩, HTTP 커널 호출, 응답 전송 담당
- HTTP 커널(app/Http/Kernel.php)
- 요청을 초기화하고 미들웨어를 거쳐 라우터로 전달
- 프레임워크 부팅과 요청 처리 중심
- 라우터(routes/web.php)
- 요청 URL과 실행할 컨트롤러/클로저 연결
- 요청이 어디로 가야 하는지 결정
- 미들웨어(app/Http/Middleware)
- 요청 전/후 추가 처리 (인증, CSRF, 로그 등)
- 흐름 제어 및 보안/공통 기능 담당
- 컨트롤러 / 클로저
- 실제 비즈니스 로직 수행
- 모델/서비스 호출 후 HTTP 응답 반환
💡 핵심 한 문장 요약:
브라우저 요청 → index.php → 커널 → 미들웨어 → 라우터 → 컨트롤러 → 응답
🔹 라이프사이클 쉽게 이해
- index.php → 감독: “영화 시작!”
- HTTP 커널 → 프로듀서: “촬영 준비 완료, 배우에게 역할 전달”
- 라우터 → 스태프: “어떤 장면을 찍을지 배정”
- 미들웨어 → 보조 스태프: “카메라 세팅, 안전 점검, 연기 체크”
- 컨트롤러 / 클로저 → 배우: “실제 연기 수행 (비즈니스 로직 처리)”
- 응답 반환 → 상영관: “관객(브라우저)에 결과 보여줌”
💡 한 줄 요약:
요청이 들어오면 감독 → 프로듀서 → 스태프 → 배우 → 상영 순서로 처리된다.
구분역할이해하기 쉬운 비유핵심 요약
라이프사이클 | 브라우저 요청이 들어와서 응답까지 처리되는 전체 흐름 | 영화 제작 과정: 시나리오 → 촬영 → 편집 → 상영 | 요청이 들어오면 index.php → 커널 → 미들웨어 → 라우터 → 컨트롤러 → 응답 순서로 처리 |
반응형
'개발 > php' 카테고리의 다른 글
라라벨7 - 서비스 컨테이너, 바인드와 리졸브 (0) | 2025.10.15 |
---|---|
라라벨 5 - 메인(홈) 화면, 회원가입, 로그인, 로그아웃, 메일보내기 (0) | 2025.10.10 |
라라벨4 app/Providers 폴더 안에 내용이 없음 관련 (0) | 2025.09.30 |
맥북 Mac Homestead 환경: SSH 키 생성 → Vagrant 실행 → SSH 접속 (0) | 2025.09.15 |
라라벨 3 - 맥북 라라벨 개발 환경 구축: Sail & Homestead 설치 가이드 메모 (0) | 2025.09.15 |
Comments