Getting Started Architecture
Wednesday, November 2, 2022 1:46 PM고도몰 아키텍쳐
Request 처리 순서
- 사용자의 요청은
route
로 전달 되어 고도몰에서 처리할 준비를 합니다. -
Application
은 솔루션 구동에 필요한 리소스를 준비하고 요청을 처리할Controller
를 찾아서 실행 시킵니다. -
Controller
는 사용자의Request
를 처리하고 템플릿을 찾아 화면에 보여질 데이터를 전달합니다. - 템플릿은
Controller
로 부터 데이터를 전달 받아서 데이터를 설정한 뒤Controller
로 HTML 스트링을 반환합니다. -
Controller
는 템플릿과 데이터가 처리된 HTML 스트링을 화면에 출력합니다.
Route의 동작
- 사용자의 요청은 모두
/_[상점도메인]_/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의 동작
- bootstrap.php에서 Application 객체를 생성합니다.
- Application 객체가 생성되면 AbstractBootstrap을 상속받은 클래스를 로드하여 객체를 모두 실행합니다.
- Bootstrap에 필요한 클래스는 '/system/config/app/bootstrap.php'에 설정된 클래스이며 객체 생성 후 Application 컨테이너에 주입시킵니다.
- Application의 실행 준비가 완료되면 사용자 요청을 처리한 Controller를 찾아서 요청을 처리하도록 합니다.
Controller의 동작
-
Interceptor::preHandle()
가 실행되어 템플릿 레이아웃 설정/글로벌 변수/통계관련 데이트 측정/보안 및 인증과 같은 Global 영역에서 이뤄져야 하는 작업들이 실행됩니다. - 사용자가 작성한
MyController::pre()
메소드가 실행됩니다. - 사용자가 작성한
MyController::index(
메소드가 실행됩니다. - 사용자가 작성한
MyController::postHandle()
메소드가 실행됩니다. - Interceptor::post()가 실행되어 방문자 통계 등의 작업이 실행됩니다.
View의 동작
- 컨트롤러에서 호출한 View 엔진인 Template_를 토대로 템플릿 엔진을 구성합니다.
- 템플릿 엔진의 종류
- Template_ 엔진 :
사용자
스킨 처리 - Include 엔진 :
관리자
스킨 처리
- Template_ 엔진 :
Class Loader의 동작
-
user module이 없는 경우
-
user module이 있는 경우
-
Classloader
가_[상점도메인]_/module
에서class
를 먼저 검색하고, 없으면system/src/Bundle
에서 검색을 합니다. -
class
가_[상점도메인]_/module
에서 검색되면system/src/Bundle
의class
는 무시됩니다. (상속을 통해 system class 사용 가능) - 확장 가능한
class
는 구현class
의 위치가Bundle
일지라도module
에Bundle class
를 확장한Wrapping class
를 만들고 이를 통해 사용할 수 있습니다. (단,user
에서module class
를 생성시 기존 구현체(Bundle class
)를 확장할 수 있습니다)