티스토리 뷰

Micro 라이프 사이클

  • \Phalcon\Mvc\Micro 오브젝트는 HTTP 요청을 파이프라인에 따라 순차적으로 실행하는 라이프 사이클을 가진다. 크게 before → map, get, post, put, patch, head, delete, options → after → finish의 흐름으로 각각의 핸들러를 호출한다.

  • before($handler), after($handler), finish($handler)에서 호출되는 핸들러 function를 특별히 미들웨어라고 부르는데 JavaFilter, SpringInterceptor와 동일한 개념으로 이해하면 된다.

  • 가장 마지막 파이프라인에 위치한 finish($handler)가 종료되면 라이프 사이클 동안 가공된 \Phalcon\Http\Response 오브젝트가 클라이언트에게 전송된다. 자동으로 진행되므로 개발자는 send()를 호출해서는 안된다. (단, 예외적으로 밑에 설명할 before($handler)에서만 send()를 호출할 수 있다.)

Before

  • HTTP 요청을 제일 먼저 가로채어 처리하는 것은 before($handler)이다. 주로 클라이언트 인증, 권한 등의 유효성 검사 로직을 작성하기에 적절하다. 복수개의 핸들러 function을 등록하여 파이프라인으로 동작하게 할 수 있다.


  • Before Middleware 기능을 하는 function은 유효성 검사 후 false를 리턴할 수 있다. 이 경우 제어권이 다음 파이프라인으로 전달되지 않고 바로 로직을 종료하므로 직접 \Phalcon\Http\Response 오브젝트의 send()를 호출하여 응답을 전송해야 한다. 문제가 없을 경우 true를 리턴하면 다음 파이프라인에게 제어권이 전달된다.

Route

  • Before Middleware에서 false를 리턴하지 않았을 경우 다음으로 진행되는 파이프라인은 실제 라우트를 처리하는 map(), get(), post(), put(), patch(), head(), delete(), options()이 실행된다. 정의된 패턴을 만족할 경우 지정된 $handler function에게 제어권을 전달한다.


  • 라우트의 $handler 기능을 하는 function\Phalcon\Http\Response 오브젝트를 리턴해야 한다. 비즈니스 로직에 따라 적절한 Response 오브젝트를 가공하여 리턴 후 다음 파이프라인인 after($handler)에게 제어권을 넘긴다.

After

  • 라우트 핸들러가 종료되면 파이프라인에 따라 after($handler)가 실행된다. Response 오브젝트를 클라이언트에게 전송하기 전 실행될 로직을 작성할 수 있다. Before Middleware에서와 같이 After Middleware 또한 Response 오브젝트 전송을 명시적으로 작성할 수 있다.
댓글
댓글쓰기 폼