Min's dev-log
[Laravel] 라라벨 라이프 사이클 본문
사용자의 요청이 라라벨에서 어떻게 처리되는지 살펴보자.
1. 시작
라라벨 애플리케이션에서 모든 요청은 index.php 파일에서 시작한다.
이 파일은 컴포저가 생성한 오토로더를 정의하며 bootstrap/app.php 스크립트를 참고하여
라라벨 애플리케이션의 인스턴트를 가져오며 서비스 컨테이너를 생성한다.
서비스 컨테이너에서 의존성 주입을 관리, 실행하며 다음 단계로 진행한다.
index.php 파일은 시작점이기 때문에 코드 양이 적게 유지되는 것을 권장한다!
2. Console Kernel과 Http Kernel
일반적으로 web 요청 처리를 위해 Http Kernel, 커맨드 명령 처리를 위해Console Kernel로 요청이 분배된다.
Http Kerel에서는 요청이 처리 되기전에 수행되어야 하는 Bootstrap 배열을 가지고 있다.
이 배열에는 환경 변수, 각종 설정, 로깅, 에러 핸들러 등 정보들이 담겨 있다. 또한 미들웨어 정보들을 정의한다.
미들웨어는 요청을 필터링하는, 요청과 응답 사이의 브릿지 역할이라고 보면 된다.
3. Service Provider
서비스 컨테이너에 적재되며 커널 부트스트래핑의 핵심이다.
부트스트래핑이란 필요한 서비스 등록(서비스 컨테이너에 의존성 주입을 위해 필요), '.env' 파일의 변수들을
환경 변수에 등록, 필요한 설정 로드 및 적용, 기본적인 에러 핸들러 등록, 컴포저 패키지 로드 등을 한다.
register 메서드를 통해 모든 프로바이더를 호출하고 등록한 뒤 boot 메서드를 통해 호출하는 과정을 거쳐
서비스 컨테이너에 바인딩된다.
* 모든 서비스 프로바이더는 config/app.php에서 확인 가능하며 providers 배열을 볼 수 있다.
배열안에 있는 모든 서비스 프로바이더 클래스가 애플리케이션에 로드된다.
대부분의 프로바이더는 '지연된 (deferred)' 프로바이더다.
이 말은 모든 요청에 대해서 반드시 로드되지 않고 실제로 필요할 때에 로드 된다는 것이다.
4. 요청처리
서비스 프로바이더의 부트가 끝난 뒤에는 전역 미들웨어를 통과한 요청을 라우터로 전송하고
해당 라우터에 설정되어 있는 미들웨어에 통과시킨다. 이후에 요청은 컨트롤러에 도착하게 되며
알맞은 요청을 처리한 뒤 뷰로 데이터를 전달하고 응답을 생성한다. 생성된 응답은 Http Kernel를
거쳐 클라이언트에게 반환된다.
(이때의 Http Kernel에는 응답에 대한 미들웨어와 전역 미들웨어가 포함될 수 있음)
▼ 간단하게 순서를 정리해보자면
요청 > Http Kernel이 요청 처리 > 전역 미들웨어 실행 > 요청에 대한 적절한 라우트 호출 >
해당 라우트 미들웨어 실행 > 라우트에 정의된 컨트롤러 실행 > 컨트롤러는 라우트에 정의된 action 수행 >
반환된 응답 Http Kernel을 거쳐 클라이언트에 반환
'Framework > Laravel' 카테고리의 다른 글
[Laravel] 패키지 관리 도구 컴포저 (0) | 2024.01.22 |
---|---|
[Laravel] 라라벨과 디렉토리 구조 (0) | 2023.05.20 |