XE 코어 구조론
써드파티 개발자를 위한 XE 의 각 구성요소와 역할	

& 개발에 필요한 코어 이해
XE 코어란?
• 코어란?	

• 흔히 쓰이는 정의 : Xpressengine 사이트에서 배포되는 XE 배포본	

• 우리가 오늘 다루고자 하는 정의 : 기본적으로 포함된 모듈을 제외한 실제 코어	

• 예 ) XE 1.7.4를 보면 document 모듈을 사용하는 board 모듈이 포함되어있지만, 이경
우 board 모듈과, document 모듈은 기본 배포되는 모듈로 코어라고 정의하지 않음. 	

• 코어란? XE 기반 모듈, 애드온, 위젯등이 돌아갈수 있도록 만들어둔 기본 골격
XE 의 구조의 기본
• XE의 모든 요청은 index.php 에서 처리한다.	

• 모든 HTML 페이지는 모듈의View 를 통해서 만들어진다. 	

• XE 코어의 기본 기능도 기본적으로 제공되는 모듈의
View 등을 통해서 페이지를 출력시킴
XE 의 구성 요소
• 모듈	

• 스킨, 템플릿	

• 위젯	

• 레이아웃	

• 애드온
모듈
• 모듈이란?	

• XE 기반에서 돌아가는 프로그램. 	

• XE 의 모든 요청은 모듈을 기반으로 되어있다. 	

• 한번에 한개의 모듈을 실행한다. 단 트리거등으로 다른 모듈이 끼
어들어서 특정 함수를 실행시킬수 있다.
MVC 패턴에 대한 간략한 소개
• MVC 패턴이란?	

• Model : 데이터를 처리하고 기타 필요한 공용 로직	

• View : 출력을 담당하는 부분	

• Controller : 특정 행동을 취하는 부분	

• MVC 를 반드시 준수할 필요는 없다. 필요하다면 자신들의 클래스를 추가해서 사용해도 된다	

• 예 ) document 모듈은 문서 각각을 하나의 객체로 처리하며, 해당부분을 document.item.class.php 에서 DocumentItem이라는 항목으
로 사용. 	

• 하지만 View 와 controller 는 확실히 구별해두어야 한다.
트리거
• 모듈에서 특정 시점에 끼어들어서 함수를 실행시켜주기 위한 장치	

• 예 ) 포인트 모듈에서 글을 작성하면 포인트를 주는경우, 포인트 모듈은 글이 작성되는 시점에 끼어
들어서 포인트를 주는 과정을 수행한다.	

• 트리거가 끼어들수 있는 시점은 트리거용으로 선언한 부분에 끼어들수 있다.	

• $trigger_output = ModuleHandler::triggerCall(‘모듈.트리거이름',‘시점(before, after)’, $넘길 변수);	

• 넘길 변수를 가지고서 체크해서 별도의 루틴을 사용하거나, 참조된 변수를 이용해서 데이터를 변조
하는등의 역할을 수행할수 있다.
스킨, 템플릿
• 모듈의 view 의 데이터 출력을 특정 HTML출력으로 바꿔주는 부분	

• 모듈 아래에 있는 skins 와 tpl 부분은 차이가 없다. 	

• 단 모듈의 관리 부분에서 스킨을 설정이 가능해서 치환이 가능한것이 skins, 그렇지 않은것
이 tpl 로 편의로 나누어져있을뿐.	

• XE문법을 PHP코드로 변환한뒤에 수행하기때문에 {@ }로 넣은 소스와 <?php ?> 로 넣은
소스는 동일하게 작동하지 않는다.	

• 예를들면, {$board_title}은 php로 변환되면 <?=Context::get(‘board_title’)?>이 된다.
위젯
• 위젯은 분리해서 사용할수 있는 작은View 의 역할이다. 	

• 모델에서 view 의 역할 : 데이터를 처리해서 출력해줌	

• 위젯 : 데이터를 처리해서 출력해줌	

• XE 에서는 모듈의 view 가 한번의 리퀘스트에 한개만 지정되기때문에 다양한 view를 동시에 보여줄수 없으므로,
위젯을 사용한다. 	

• 위젯도 스킨을 사용하나 이것도 마찬가지로, 결국 모듈의 view의 스킨, 템플릿과 동일하다.	

• 위젯은 특정 HTML 코드로 로드해서 사용하며, 해당 코드는 템플릿 컴파일 과정에서 특정 함수로 바뀌게 된다. 	

• 템플릿 컴파일을 통하지 않고 위젯 내용을 불러올수도 있다. (widget 모듈의 controller 의 excute 함수)
레이아웃
• 레이아웃이란?	

• 사이트의 전체적인 틀.	

• $content 변수를 통해서 모듈의View 를 출력.	

• 혹은 위젯을 출력가능 (위젯코드 사용)	

• 최종적으로 완성된 레이아웃은 /common/tpl/common_layout.html 의 파일 안쪽
에 들어가게 된다.
COMMON LAYOUT
• 기본 HTML 헤더와, JS, CSS 를 로딩한다.	

• 관리자일경우 Admin Bar 를 최 상단에 생성한다.	

• javascript 에서 쓰일 기본적인 언어셋을 정의한다.	

• favicon 등 설정된 내역을 출력한다.	

• 이러한 처리를 해주는 기본 레이아웃이 있기떄문에 XE 의 레이아웃에서는
HTML 구조를 생성하지 않고 <body>태그 안쪽에 들어갈 내용만 작성하게 된다
애드온
• 특정 시점에서 호출되서 실행되는 코드	

• 예 ) before_module_init : 모듈 실행전

before_display_content : 결과물 호출전	

• 실제로 특정 시점에서 특정 애드온을 호출하는게 아니라 ‘모든 애드온’을 호
출하기때문에 애드온 상단에 호출 시점을 체크하는것이 필요.	

• 코어를 수정하지 않고, 입력값을 수정하거나 특정 시점에서 끼어들기 위한것.
트리거VS 애드온
• 둘의 기능은 유사하나 차이점도 있다. 	

• 트리거는 변수를 전달받아서 처리 가능한 반면에 애드온은 특정 변
수를 넘겨받을수는 없다. 전역변수의 수정만 가능하다.	

• 트리거는 DB 에서 트리거 목록을 가지고 특정 시점에서 해당 트리
거만 처리하는 반면에 애드온은 모든 애드온을 체크하므로, 애드온
이 많아지게되면 성능 저하가 있을수 있다.|
XE 의 실행과정
Request
index.php 로 GET / POST 방식으로 요청
Context Initialize
Context 클래스를 초기화 / 언어 / 로그인 정보등 확인
Module Initialize
어떤 모듈을 불러오는지 결정한후 실행 준비
Module
모듈을 실행하고 화면 출력할 내용을 준비
Display content
정해진 규격에 따라서 내용을 출력
CONTEXT 클래스 초기화
• INDEX.PHP 로 초기 리퀘스트가 들어오면 실행	

• 요청된 방식을 확인(HTML, XML,JSON)	

• GET 이나 POST로 들어온 요청값들을 정리	

• /files/config/db.config.php 의 db 정보를 불러옴	

• 사이트의 기본 모듈정보와 같은 사이트 기본 세팅정보를 불러옴	

• 사용할 언어를 확정하고 해당 언어를 불러옴	

• 해당 세션을 확인해서 로그인 여부를 확인하고 로그인 정보를 저장해둠.
• 기본적으로 최종적인 모든 모듈 수행이 종료된뒤 출력되는
데이터는 입력되는 데이터와 같은 종류로 출력되게 된다.	

• 이러한 출력데이터는 Context::setRespondMethod 함수를
통해서 설정하던가, HTTP 리퀘스트의 헤더를 조작해서 자
신이 얻고자 하는 데이터를 얻을수 있다. 	

• HTML(GET/POST), JSON, XML이든 어느 방식으로 접근
해도 Context::getRequestVars()를 통해서 얻어낼수 있다.
모듈 준비 단계
• 요청값에서 모듈을 찾아내기 위한 값들을 추출

(module, act, mid, document_srl, module_srl ..)	

• XSS 방어, SSL 적용여부 체크	

• 트리거 호출 (moduleHandler.init (before & after))	

• 실행할 모듈을 찾음
모듈 실행 단계	

!
• 모듈 실행전 실행할 모듈의 action 을 지정하고, 필요한 자원을 불러오는 과정. 	

• 모듈 실행을 수행하고, 접근 권한을 체크, 해당 모듈의 act 함수 실행 : $this-
>{$this->act}();	

• 모듈 처리 시점에서 트리거 작동	

• 모듈의 action 은 xml파일에서 설정을 가져와서 실행되게 됨
• 요청된 act 가 없을경우 xml 상에 정의된 index act 를 사용.	

• xml데이터를 비교하여, ruleset 적용, standalone 체크	

• admin 이 들어간 act 인경우 관리자가 아니면 실행되지 않
도록 권한 체크	

• 모듈의 init() - 초기화 함수 실행	

• 모듈 설정값 load
화면 출력 단계	

• 모듈 실행의 결과를 출력하는 단계, HTML이냐, JSON이나 XML이냐
에 따라서 출력 방법이 달라짐.	

• 레이아웃, common_html등과 합쳐진 템플릿을 컴파일 후에 출력	

• json이나 xml 일 경우 주어진 데이터를 스킨 컴파일 과정을 통하지 않
고 해당 데이터를 바로 출력.	

• 트리거 실행
• 출력 방법이 HTML 인 경우	

• 템플릿으로 지정된 부분을 컴파일한뒤 HTML을 만들어서 최종 반환한다. 이후 레이
아웃, 기본 레이아웃등과 합쳐지는 HTML 출력 과정을 거친다.	

• 출력 방법이 XML/JSON 인 경우	

• 해당 모듈 Instance 에 추가된 변수들을 직렬화 시켜서, XML, JSON 형태로 출력시
킨다. 이경우 레이아웃을 거치지 않는다.	

• ex) board 모듈의 board.api.php (XML, JSON등일경우 별도로 실행되는 API클래
스) 의 문서 목록을 가져오는 함수의 경우, $oModule-
>add(‘document_list’,$document_list); 와 같이 모듈 정보에 document_list 자체를
넣어둔다.
코어의 구성 클래스
• Cache, Context, DB, Display, Extravar, File, FrontendFile,
HttpRequest, Mail, Module 등등의 기본 클래스 존재	

• 오늘 알아볼것은, 서드파티 개발에서 참조해서 사용할수
있는 몇가지 클래스들의 유용한 사용법. 역할에 대해서
알아봄
DB 클래스
• 데이터베이스에 접근하는 클래스	

• DB::getInstance() 를 통해서 DB 인스턴스의 생성 가능.	

• 해당 인스턴스 생성후 _query() 함수를 통해서 XML 쿼리문이 아닌 SQL 자체의 사용도 가능	

• 단 해당 방식의 경우 DB 호환성이 문제가 될수있고, table_prefix 등이 문제가 될수있기 때문에 그점을
고려해서 XML쿼리가 지원되지 않는 형식의 쿼리를 쓸때에 한정해서 table_prefix 값을 가져와서 사용
하도록 하는것이 필요하다.	

• _fetch 된 값은 1개일경우, Object 로, 여러개일경우 Object 의 배열로 리턴된다, 그것을 모두 배열로
처리시키기 위해서는 _fetch($query, 0) 식으로 하나의 변수를 더 넘겨주면 된다.
CACHE 클래스	

• XE 의 캐시를 처리할수 있는 클래스	

• Cachehandler::getInstance()로 캐시 클래스를 가져와서. get, put, delete, 등으로 캐시 클래스의
처리 가능	

• GroupKey 개념 사용. GroupKey 는 특정 부분의 그룹의 캐시들이 업데이트가 필요할경우 캐시
를 제거하기 위한 방법	

• 예 ) document list 에 관련된 캐시들의 경우 새로운 document 가 추가되면 모두 새롭게 캐시
를 생성해야한다. 이경우 documentList 의 그룹키를 갱신해서 모든 캐시가 새롭게 가져오도록
설정.
FILE 클래스
• FILE 을 처리하는 클래스	

• 디렉토리를 복사하거나, 파일을 쓸때 경로가 구축되어있지
않을경우 디렉토리도 생성해주는등 편리한 함수가 많다. 	

• /classes/file/FileHandler.class.php
• FileHandler::removeFilesInDir - 디렉토리 내부에 있는 파일 삭
제	

• FileHandler::filesize - 파일사이즈 반환(KB, MB등으로 표시)	

• FileHander::getRemoteResource - 원격 파일 읽어오기	

• FileHandler::getRemoteFile - 원격 파일을 지정된 곳에 다운받기	

• 그외 사용에 편리한 다양한 함수들이 있으니, 직접 확인해보시기
바랍니다.
MAIL 클래스
• PHPMailer 를 이용해서 메일 발송	

• Google SMTP 를 이용해서도 메일의 발송이 가능하다.	

• useGmailAccount($account_name, $account_passwd) 함수 사
용	

• 메일에 파일을 첨부하는등의 처리를 자동으로 처리해준다.
XE 개발 디버깅 방법
• debugPrint()를 통한 디버깅 방법	

• debugPrint() 함수를 통해서 전달되고있는 변수, 해당 시점이 실행되는지 등의 여부를
테스트 할수 있다. 	

• debugPrint() 로 인해서 출력된 내용은 firephp, HTML 하단, 별도의 디버깅용 파일에
쓰여짐 중의 한 방식으로 출력할수 있다. 	

• 보통 print_r 이나 var_dump 같은걸로 디버깅을 하는 경우가 많지만, controller 등의
경우 그것을 사용하기 어렵기때문에, debugPrint()를 사용하는것을 강하게 추천한다.
Q & A
• 수고하셨습니다.	

• 강의 내용이 아니더라도, 궁금하셨던 점이 있다면 질
문해주세요

Xe 구조에 대한 이해

  • 1.
    XE 코어 구조론 써드파티개발자를 위한 XE 의 각 구성요소와 역할 & 개발에 필요한 코어 이해
  • 2.
    XE 코어란? • 코어란? •흔히 쓰이는 정의 : Xpressengine 사이트에서 배포되는 XE 배포본 • 우리가 오늘 다루고자 하는 정의 : 기본적으로 포함된 모듈을 제외한 실제 코어 • 예 ) XE 1.7.4를 보면 document 모듈을 사용하는 board 모듈이 포함되어있지만, 이경 우 board 모듈과, document 모듈은 기본 배포되는 모듈로 코어라고 정의하지 않음. • 코어란? XE 기반 모듈, 애드온, 위젯등이 돌아갈수 있도록 만들어둔 기본 골격
  • 3.
    XE 의 구조의기본 • XE의 모든 요청은 index.php 에서 처리한다. • 모든 HTML 페이지는 모듈의View 를 통해서 만들어진다. • XE 코어의 기본 기능도 기본적으로 제공되는 모듈의 View 등을 통해서 페이지를 출력시킴
  • 4.
    XE 의 구성요소 • 모듈 • 스킨, 템플릿 • 위젯 • 레이아웃 • 애드온
  • 5.
    모듈 • 모듈이란? • XE기반에서 돌아가는 프로그램. • XE 의 모든 요청은 모듈을 기반으로 되어있다. • 한번에 한개의 모듈을 실행한다. 단 트리거등으로 다른 모듈이 끼 어들어서 특정 함수를 실행시킬수 있다.
  • 6.
    MVC 패턴에 대한간략한 소개 • MVC 패턴이란? • Model : 데이터를 처리하고 기타 필요한 공용 로직 • View : 출력을 담당하는 부분 • Controller : 특정 행동을 취하는 부분 • MVC 를 반드시 준수할 필요는 없다. 필요하다면 자신들의 클래스를 추가해서 사용해도 된다 • 예 ) document 모듈은 문서 각각을 하나의 객체로 처리하며, 해당부분을 document.item.class.php 에서 DocumentItem이라는 항목으 로 사용. • 하지만 View 와 controller 는 확실히 구별해두어야 한다.
  • 7.
    트리거 • 모듈에서 특정시점에 끼어들어서 함수를 실행시켜주기 위한 장치 • 예 ) 포인트 모듈에서 글을 작성하면 포인트를 주는경우, 포인트 모듈은 글이 작성되는 시점에 끼어 들어서 포인트를 주는 과정을 수행한다. • 트리거가 끼어들수 있는 시점은 트리거용으로 선언한 부분에 끼어들수 있다. • $trigger_output = ModuleHandler::triggerCall(‘모듈.트리거이름',‘시점(before, after)’, $넘길 변수); • 넘길 변수를 가지고서 체크해서 별도의 루틴을 사용하거나, 참조된 변수를 이용해서 데이터를 변조 하는등의 역할을 수행할수 있다.
  • 8.
    스킨, 템플릿 • 모듈의view 의 데이터 출력을 특정 HTML출력으로 바꿔주는 부분 • 모듈 아래에 있는 skins 와 tpl 부분은 차이가 없다. • 단 모듈의 관리 부분에서 스킨을 설정이 가능해서 치환이 가능한것이 skins, 그렇지 않은것 이 tpl 로 편의로 나누어져있을뿐. • XE문법을 PHP코드로 변환한뒤에 수행하기때문에 {@ }로 넣은 소스와 <?php ?> 로 넣은 소스는 동일하게 작동하지 않는다. • 예를들면, {$board_title}은 php로 변환되면 <?=Context::get(‘board_title’)?>이 된다.
  • 9.
    위젯 • 위젯은 분리해서사용할수 있는 작은View 의 역할이다. • 모델에서 view 의 역할 : 데이터를 처리해서 출력해줌 • 위젯 : 데이터를 처리해서 출력해줌 • XE 에서는 모듈의 view 가 한번의 리퀘스트에 한개만 지정되기때문에 다양한 view를 동시에 보여줄수 없으므로, 위젯을 사용한다. • 위젯도 스킨을 사용하나 이것도 마찬가지로, 결국 모듈의 view의 스킨, 템플릿과 동일하다. • 위젯은 특정 HTML 코드로 로드해서 사용하며, 해당 코드는 템플릿 컴파일 과정에서 특정 함수로 바뀌게 된다. • 템플릿 컴파일을 통하지 않고 위젯 내용을 불러올수도 있다. (widget 모듈의 controller 의 excute 함수)
  • 10.
    레이아웃 • 레이아웃이란? • 사이트의전체적인 틀. • $content 변수를 통해서 모듈의View 를 출력. • 혹은 위젯을 출력가능 (위젯코드 사용) • 최종적으로 완성된 레이아웃은 /common/tpl/common_layout.html 의 파일 안쪽 에 들어가게 된다.
  • 11.
    COMMON LAYOUT • 기본HTML 헤더와, JS, CSS 를 로딩한다. • 관리자일경우 Admin Bar 를 최 상단에 생성한다. • javascript 에서 쓰일 기본적인 언어셋을 정의한다. • favicon 등 설정된 내역을 출력한다. • 이러한 처리를 해주는 기본 레이아웃이 있기떄문에 XE 의 레이아웃에서는 HTML 구조를 생성하지 않고 <body>태그 안쪽에 들어갈 내용만 작성하게 된다
  • 12.
    애드온 • 특정 시점에서호출되서 실행되는 코드 • 예 ) before_module_init : 모듈 실행전
 before_display_content : 결과물 호출전 • 실제로 특정 시점에서 특정 애드온을 호출하는게 아니라 ‘모든 애드온’을 호 출하기때문에 애드온 상단에 호출 시점을 체크하는것이 필요. • 코어를 수정하지 않고, 입력값을 수정하거나 특정 시점에서 끼어들기 위한것.
  • 13.
    트리거VS 애드온 • 둘의기능은 유사하나 차이점도 있다. • 트리거는 변수를 전달받아서 처리 가능한 반면에 애드온은 특정 변 수를 넘겨받을수는 없다. 전역변수의 수정만 가능하다. • 트리거는 DB 에서 트리거 목록을 가지고 특정 시점에서 해당 트리 거만 처리하는 반면에 애드온은 모든 애드온을 체크하므로, 애드온 이 많아지게되면 성능 저하가 있을수 있다.|
  • 14.
    XE 의 실행과정 Request index.php로 GET / POST 방식으로 요청 Context Initialize Context 클래스를 초기화 / 언어 / 로그인 정보등 확인 Module Initialize 어떤 모듈을 불러오는지 결정한후 실행 준비 Module 모듈을 실행하고 화면 출력할 내용을 준비 Display content 정해진 규격에 따라서 내용을 출력
  • 15.
    CONTEXT 클래스 초기화 •INDEX.PHP 로 초기 리퀘스트가 들어오면 실행 • 요청된 방식을 확인(HTML, XML,JSON) • GET 이나 POST로 들어온 요청값들을 정리 • /files/config/db.config.php 의 db 정보를 불러옴 • 사이트의 기본 모듈정보와 같은 사이트 기본 세팅정보를 불러옴 • 사용할 언어를 확정하고 해당 언어를 불러옴 • 해당 세션을 확인해서 로그인 여부를 확인하고 로그인 정보를 저장해둠.
  • 16.
    • 기본적으로 최종적인모든 모듈 수행이 종료된뒤 출력되는 데이터는 입력되는 데이터와 같은 종류로 출력되게 된다. • 이러한 출력데이터는 Context::setRespondMethod 함수를 통해서 설정하던가, HTTP 리퀘스트의 헤더를 조작해서 자 신이 얻고자 하는 데이터를 얻을수 있다. • HTML(GET/POST), JSON, XML이든 어느 방식으로 접근 해도 Context::getRequestVars()를 통해서 얻어낼수 있다.
  • 17.
    모듈 준비 단계 •요청값에서 모듈을 찾아내기 위한 값들을 추출
 (module, act, mid, document_srl, module_srl ..) • XSS 방어, SSL 적용여부 체크 • 트리거 호출 (moduleHandler.init (before & after)) • 실행할 모듈을 찾음
  • 18.
    모듈 실행 단계 ! •모듈 실행전 실행할 모듈의 action 을 지정하고, 필요한 자원을 불러오는 과정. • 모듈 실행을 수행하고, 접근 권한을 체크, 해당 모듈의 act 함수 실행 : $this- >{$this->act}(); • 모듈 처리 시점에서 트리거 작동 • 모듈의 action 은 xml파일에서 설정을 가져와서 실행되게 됨
  • 19.
    • 요청된 act가 없을경우 xml 상에 정의된 index act 를 사용. • xml데이터를 비교하여, ruleset 적용, standalone 체크 • admin 이 들어간 act 인경우 관리자가 아니면 실행되지 않 도록 권한 체크 • 모듈의 init() - 초기화 함수 실행 • 모듈 설정값 load
  • 20.
    화면 출력 단계 •모듈 실행의 결과를 출력하는 단계, HTML이냐, JSON이나 XML이냐 에 따라서 출력 방법이 달라짐. • 레이아웃, common_html등과 합쳐진 템플릿을 컴파일 후에 출력 • json이나 xml 일 경우 주어진 데이터를 스킨 컴파일 과정을 통하지 않 고 해당 데이터를 바로 출력. • 트리거 실행
  • 21.
    • 출력 방법이HTML 인 경우 • 템플릿으로 지정된 부분을 컴파일한뒤 HTML을 만들어서 최종 반환한다. 이후 레이 아웃, 기본 레이아웃등과 합쳐지는 HTML 출력 과정을 거친다. • 출력 방법이 XML/JSON 인 경우 • 해당 모듈 Instance 에 추가된 변수들을 직렬화 시켜서, XML, JSON 형태로 출력시 킨다. 이경우 레이아웃을 거치지 않는다. • ex) board 모듈의 board.api.php (XML, JSON등일경우 별도로 실행되는 API클래 스) 의 문서 목록을 가져오는 함수의 경우, $oModule- >add(‘document_list’,$document_list); 와 같이 모듈 정보에 document_list 자체를 넣어둔다.
  • 22.
    코어의 구성 클래스 •Cache, Context, DB, Display, Extravar, File, FrontendFile, HttpRequest, Mail, Module 등등의 기본 클래스 존재 • 오늘 알아볼것은, 서드파티 개발에서 참조해서 사용할수 있는 몇가지 클래스들의 유용한 사용법. 역할에 대해서 알아봄
  • 23.
    DB 클래스 • 데이터베이스에접근하는 클래스 • DB::getInstance() 를 통해서 DB 인스턴스의 생성 가능. • 해당 인스턴스 생성후 _query() 함수를 통해서 XML 쿼리문이 아닌 SQL 자체의 사용도 가능 • 단 해당 방식의 경우 DB 호환성이 문제가 될수있고, table_prefix 등이 문제가 될수있기 때문에 그점을 고려해서 XML쿼리가 지원되지 않는 형식의 쿼리를 쓸때에 한정해서 table_prefix 값을 가져와서 사용 하도록 하는것이 필요하다. • _fetch 된 값은 1개일경우, Object 로, 여러개일경우 Object 의 배열로 리턴된다, 그것을 모두 배열로 처리시키기 위해서는 _fetch($query, 0) 식으로 하나의 변수를 더 넘겨주면 된다.
  • 24.
    CACHE 클래스 • XE의 캐시를 처리할수 있는 클래스 • Cachehandler::getInstance()로 캐시 클래스를 가져와서. get, put, delete, 등으로 캐시 클래스의 처리 가능 • GroupKey 개념 사용. GroupKey 는 특정 부분의 그룹의 캐시들이 업데이트가 필요할경우 캐시 를 제거하기 위한 방법 • 예 ) document list 에 관련된 캐시들의 경우 새로운 document 가 추가되면 모두 새롭게 캐시 를 생성해야한다. 이경우 documentList 의 그룹키를 갱신해서 모든 캐시가 새롭게 가져오도록 설정.
  • 25.
    FILE 클래스 • FILE을 처리하는 클래스 • 디렉토리를 복사하거나, 파일을 쓸때 경로가 구축되어있지 않을경우 디렉토리도 생성해주는등 편리한 함수가 많다. • /classes/file/FileHandler.class.php
  • 26.
    • FileHandler::removeFilesInDir -디렉토리 내부에 있는 파일 삭 제 • FileHandler::filesize - 파일사이즈 반환(KB, MB등으로 표시) • FileHander::getRemoteResource - 원격 파일 읽어오기 • FileHandler::getRemoteFile - 원격 파일을 지정된 곳에 다운받기 • 그외 사용에 편리한 다양한 함수들이 있으니, 직접 확인해보시기 바랍니다.
  • 27.
    MAIL 클래스 • PHPMailer를 이용해서 메일 발송 • Google SMTP 를 이용해서도 메일의 발송이 가능하다. • useGmailAccount($account_name, $account_passwd) 함수 사 용 • 메일에 파일을 첨부하는등의 처리를 자동으로 처리해준다.
  • 28.
    XE 개발 디버깅방법 • debugPrint()를 통한 디버깅 방법 • debugPrint() 함수를 통해서 전달되고있는 변수, 해당 시점이 실행되는지 등의 여부를 테스트 할수 있다. • debugPrint() 로 인해서 출력된 내용은 firephp, HTML 하단, 별도의 디버깅용 파일에 쓰여짐 중의 한 방식으로 출력할수 있다. • 보통 print_r 이나 var_dump 같은걸로 디버깅을 하는 경우가 많지만, controller 등의 경우 그것을 사용하기 어렵기때문에, debugPrint()를 사용하는것을 강하게 추천한다.
  • 29.
    Q & A •수고하셨습니다. • 강의 내용이 아니더라도, 궁금하셨던 점이 있다면 질 문해주세요