[Laravel 기초] 3. Request LifeCycle

이전 포스팅까지 우리는 라라벨 프레임워크의 디렉토리 구조에 대해 알아보았습니다. 이번 포스팅에서는 Requeset LifeCycle에 대해 알아보도록하겠습니다.

1. Application

Application – Request LifeCyle

어플리케이션을 설계하고 구성하는 일을 하려는 시작점에 있습니다. 어플리케이션이 동작하는 플로우를 다시 한번 생각해 볼 필요가 있습니다. 사용자는 얻고자 하는 무언가를 요청을 전달하고 요청에 대한 반응을 다시 사용자에게 전달합니다. 요청에 대한 결과가 사용자에게 가치있는 것 일수록 좋은 어플리케이션이라고 평가받게 될 것입니다. 우리는 이 어플리케이션을 Laravel 프레임 워크 환경에서 만들려고 합니다. 그리고 이 것을 좀 더 쉽고 빠르게 구성하고자, 요청에 대한 가치를 높이는데 집중하고자 Laravel 이라는 도구를 선택하였습니다. 사용자 요청이 Laravel 에서는 어떻게 처리되는 지 작동 원리를 알 수 있다면 좀 더 가치있는 어플리케이션을 만들 수 있을 겁니다.

2. Request LifeCycle

Laravel – Request life Cycle

2-1. 시작 (public/index.php)

라라벨 어플리케이션에서 모든 요청은 public/index.php 파일에서 시작합니다. 이 파일의 역할은 Composer 가 생성한 오토로더를 정의하며 Boostrap/app.php 스크립트를 참고해 라라벨 어플리케이션의 인스턴스를 가져오며 Service Container를 생성합니다. 이렇게 생성된 Service Container 에서 의존성 주입을 관리, 실행하며 다음 단계로 진행합니다. (Service Container 에 대해서는 다음 포스팅에 자세히 다루겠습니다.) 라라벨 공식 문서에서는 public/index.php은 시작점의 파일이기에 코드 양이 적게 유지되는 것을 권장하며 코드 양이 많아지는 경우 웹 서버가 느려지는 결과를 초래한다고 합니다.

2-2. Http Kernel / Console Kernel

다음 단계에는 요청이 맞는 커널로 분배하게 됩니다. 일반적으로 WEB 요청 처리를 위해 Http 커널, 커맨드 명령 처리를 위해 Console 커널로 요청이 분배됩니다. Http 커널에서는 요청이 처리 되기전에 수행되어야하는 Bootstrap 배열을 가지고 있으며 이 배열 정보에는 환경 변수, 각종 설정, 로깅, 에러 핸들러 등 정보들이 담겨 있습니다. 또한 미들웨어 정보들을 정의하고 있습니다. 미들웨어는 요청과 응답 사이의 브릿지 역할을 한다고 생각하시면됩니다.

Http 커널을 다루는 방법은 간단합니다. ‘Feed it HTTP requests and it will return HTTP responses’ 요청을 주고 응답을 돌려받으면 됩니다.

2-3. Service Provider

커널 부트스트래핑의 핵심은 서비스 프로바이더에 있습니다. 서비스 프로바인더는 데이베이스, 큐, 유효성 검사, 라우팅 등 다양한 컴포넌트의 부트스트래핑을 담당하고 있습니다. 모든 서비스 프로바이더는 config/app.php에서 확인 가능합니다. Register 메소드를 통해 모든 프로바이더를 호출하고 등록한 뒤 Boot 메소드를 통해 호출하는 과정을 거쳐 서비스 컨테이너에 바인딩뒵니다. 라라벨에서는 Providers/AppServiceProvider 클래스를 비워두었습니다. 이 곳에서 커스텀 된 부스트랩과 서비스 컨테이너를 바인딩하라고 권장하고 있으며 규모가 큰 어플리케이션의 경우에는 서비스 프로바이더를 직접 사용할 수 있다고 합니다.

서비스 프로바이더의 부트가 끝난 뒤에는 전역 미들웨어를 통과한 Request를 라우터(route/web.php)로 전송하고 해당 라우터에 설정되어 있는 미들웨어에 통과시킵니다. 그러면 Request는 컨트롤러에 도착하게 되며 알맞는 요청을 처리한 뒤 view 를 사용자에게 응답해 줄 수 있습니다.

마침

라라벨 Request LifeCyle 에 대해 알아보았습니다. 저 같은 경우에는 프레임 워크나 시스템을 공부할 경우 그림을 그려보는 것으로 이해하고 있는지 판단하곤 합니다. 공식 문서를 참고하여 텍스트로만 이해하는 것보다는 한 눈에 들어 오기에 이해하기 쉽습니다. 그리고 라라벨 외 프레임 워크에 경험이 있으신 분들은 다른 프레임 워크와 비교하여 보시면 이해가 쉬울 것이라고 생각합니다. 또한 이전 포스팅에서 익힌 디렉토리 구조에서 각 단계의 파일 위치와 소스 코드를 참고하면서 익히면 라라벨 어플리케이션의 플로우를 읽히는데 많은 도움이 될 것입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다