Request 처리
프로세스
- 사용자의 요청이 route로 전달되어 고도몰에서 처리할 준비합니다.
- Application은 솔루션 구동에 필요한 리소스를 준비하고, 요청에 필요한 Controller를 찾아서 실행합니다.
- Controller는 사용자의 Request를 처리하고, 템플릿(View)을 찾아 화면에 보여질 데이터를 전달합니다.
- 템플릿(View)은 Controller에게 받은 데이터를 설정한 뒤, Controller로 HTML 스트링을 반환합니다.
- Controller는 템플릿과 데이터가 처리된 HTML 스트링을 화면에 출력합니다.
Route 프로세스
- 사용자의 request는 route.php에서 받은 뒤 처리됩니다.
- authload.php는 ClassLoader를 이용하여, system 및 user/module 아래의 클래스를 생성하여 로드합니다.
- bootstrap.php는 Application 생성 후 필요한 리소스를 로드합니다.
Application 프로세스
- bootstrap.php에서 Application 객체를 생성합니다.
- 객체가 생성되면, AbstractBootstrap을 상속받은 클래스를 로드하여, 객체를 모두 실행합니다.
- Bootstrap에 필요한 클래스는 객체 생성 후 Application 컨테이너에 주입시킵니다.
- Application 실행 준비가 완료되면 사용자 요청을 처리한 Controller를 찾아서 요청을 처리시킵니다.
View 프로세스
- 컨트롤러에서 호출한 View 엔젠인 Template을 토대로 템플릿 엔진을 구성합니다.
- 템플릿 엔진에는 2종류가 있습니다.
- Template_ 엔진 : 사용자 스킨 처리
- Include 엔진 : 관리자 스킨 처리
Class Loader의 동작
- user module이 없는 경우, system/module 내부의 system/Bundle의 클래스가 사용합니다.
- user module이 있는 경우, user/module 내부의 system/Bundle의 클래스를 사용합니다.
- classloader가 module에서 class를 먼저 검색하고, 없으면 system/src/Bundle에서 검색을 합니다.
- class가 module에서 검색되면, system/src/Bundle의 클래스는 무시됩니다. 단, 상속을 통해서 s(Bundle class)를 확장할 수 있습니다.
고도몰의 구조
고도몰은 크게 user와 system 영역으로 구분됩니다. user 영역은 웹서버에서 사용할 사용자별 홈 디렉토리에 복사하면 됩니다. system 영역은 공유자원이므로 user에서 접근 가능한 위치에 한 개만 복사하면 됩니다. system에는 직접 접근이 불가능하고 user 폴더에만 접근 가능하므로, 개발관리도구에서 작업할 Wrapping class 파일을 복사 후 개발 진행이 가능합니다.
Wrapper Class
기본 타입의 데이터를 객체로 취급해야 하는 경우에, 기본 타입의 데이터를 먼저 객체로 변환해서 사용해야 합니다. 이때 8개의 기본 타입에 해당하는 데이터를 객체로 포장해주는 클래스를 Wrapper Class라고 합니다.
래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니기 때문에, 인스턴스에 저장된 값을 변경할 수 없습니다. 단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고 생성된 인스턴스의 값을 참조하는 것이죠.
Boxing & UnBoxing
기존 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정을 '박싱'이라고 합니다. 그리고 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 '언박싱'이라고 합니다.
기존 소스 수정
요청한 주소에 따라 Controller는 물리적으로 폴더와 파일명이 서로 정확한 위치에 존재해야 합니다.
Request URL : http://gdadmin.example.com/base/layer_schedule_popup.php
Controller : /system/src/Bundle/Controller/Admin/Base/LayerSchedulePopupController.php
url에서는 스네이크 케이스, controller에서는 파스칼 케이스 형태로 네이밍을 하면 됩니다.
참조 링크
고도몰 개발 가이드
Wrapper Class