고도몰5 아키텍쳐

Request 처리 순서

사용자 요청 처리 순서

  1. 사용자의 요청은 route로 전달 되어 고도몰5에서 처리할 준비를 합니다.
  2. Application은 솔루션 구동에 필요한 리소스를 준비하고 요청을 처리할 Controller를 찾아서 실행 시킵니다.
  3. Controller는 사용자의 Request를 처리하고 템플릿을 찾아 화면에 보여질 데이터를 전달합니다.
  4. 템플릿은 Controller로 부터 데이터를 전달 받아서 데이터를 설정한 뒤 Controller로 HTML 스트링을 반환합니다.
  5. Controller는 템플릿과 데이터가 처리된 HTML 스트링을 화면에 출력합니다.

Route의 동작

Route.php의 동작

  • 사용자의 요청은 모두 /_[상점도메인]_/route.php 에서 받은 뒤 처리됩니다.
  • autoload.php는 ClassLoader를 이용하여 /system//user/module 아래의 클래스를 생성하여 로드합니다.
  • bootstrap.php는 Application 생성 후 필요한 리소스(DB, Session, Cookie, ExceptionHandler, LicenseValidate, Logger, GlobalFunction, Cache, ControllerNameResolver, File, Message, Security, UserFilePathResolver, Language)를 로드합니다.

Aplication의 동작

Application의 동작

  • bootstrap.php에서 Application 객체를 생성합니다.
  • Application 객체가 생성되면 AbstractBootstrap을 상속받은 클래스를 로드하여 객체를 모두 실행합니다.
  • Bootstrap에 필요한 클래스는 '/system/config/app/bootstrap.php'에 설정된 클래스이며 객체 생성 후 Application 컨테이너에 주입시킵니다.
  • Application의 실행 준비가 완료되면 사용자 요청을 처리한 Controller를 찾아서 요청을 처리하도록 합니다.

Controller의 동작

Controller의 동작

  • Interceptor::preHandle()가 실행되어 템플릿 레이아웃 설정/글로벌 변수/통계관련 데이트 측정/보안 및 인증과 같은 Global 영역에서 이뤄져야 하는 작업들이 실행됩니다.
  • 사용자가 작성한 MyController::pre() 메소드가 실행됩니다.
  • 사용자가 작성한 MyController::index( 메소드가 실행됩니다.
  • 사용자가 작성한 MyController::postHandle() 메소드가 실행됩니다.
  • Interceptor::post()가 실행되어 방문자 통계 등의 작업이 실행됩니다.

View의 동작

View의 동작

  • 컨트롤러에서 호출한 View 엔진인 Template_를 토대로 템플릿 엔진을 구성합니다.
  • 템플릿 엔진의 종류
    1. Template_ 엔진 : 사용자 스킨 처리
    2. Include 엔진 : 관리자 스킨 처리

Class Loader의 동작

  • user module이 없는 경우 classloader의 기본 동작

  • user module이 있는 경우 classloader의 확장 후 동작

  1. Classloader_[상점도메인]_/module에서 class를 먼저 검색하고, 없으면 system/src/Bundle에서 검색을 합니다.
  2. class_[상점도메인]_/module에서 검색되면 system/src/Bundleclass는 무시됩니다. (상속을 통해 system class 사용 가능)
  3. 확장 가능한 class는 구현 class의 위치가 Bundle일지라도 moduleBundle class를 확장한 Wrapping class를 만들고 이를 통해 사용할 수 있습니다. (단, user에서 module class를 생성시 기존 구현체(Bundle class)를 확장할 수 있습니다)