xecon2015 :: [2-4] 오승현 - chak 서비스 구축기 with xe3
TRANSCRIPT
![Page 1: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/1.jpg)
![Page 2: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/2.jpg)
오승현
• �XE�1�서드파티�개발자�
• �XE�1�Contributor�
• �XECONTEST�2014�수상�
• �CHAK�개발�(15.06�~�)
![Page 3: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/3.jpg)
오승현
• XE�1�서드파티�개발자�
• �XE�1�Contributor�
• �XECONTEST�2014�수상�
• �CHAK�개발�(15.06�~�)
![Page 4: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/4.jpg)
What is CHAK?
4
![Page 5: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/5.jpg)
5
오픈소스�개발자와�사용자간의�커뮤니케이션을�제공
What is CHAK?
![Page 6: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/6.jpg)
What is CHAK?
6
어디에나�포럼,�코멘트�서비스�제공
![Page 7: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/7.jpg)
What is CHAK?
7
쉽고�간단한�설치
![Page 8: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/8.jpg)
What is CHAK?
8
Just�Copy�&�Paste
![Page 9: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/9.jpg)
What is CHAK?
9
소셜�로그인
![Page 10: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/10.jpg)
What is CHAK?
10
Syntax�Highlighting
![Page 11: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/11.jpg)
What is CHAK?
11
파일�업로드
![Page 12: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/12.jpg)
What is CHAK?
12
Web�Hook
![Page 13: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/13.jpg)
How to use?
13착!
![Page 14: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/14.jpg)
How to use?
14착!
![Page 15: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/15.jpg)
15
어때요�참�쉽죠?
![Page 16: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/16.jpg)
16
다른�공간,�같은�커뮤니케이션
![Page 17: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/17.jpg)
Service Preview(서비스�시연)
![Page 18: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/18.jpg)
SHOW CASE(착�적용�사례)
![Page 19: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/19.jpg)
SHOW CASE #1
19
D2�Hello�WorldNAVER�개발자들의�실전�노하우와�지식을�담은�기술�블로그
![Page 20: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/20.jpg)
SHOW CASE #2
20
D2�STARTUP�FACTORYD2�Startup�Factory는�NAVER가�Tech�Startup�생태계�저변�
확대를�위해�만든�Accelerator로,�차별화된�Tech�Startup을�
직접�발굴해�육성하고�있습니다.�
![Page 21: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/21.jpg)
SHOW CASE #3
21
Laravel�Korean�DocsNaverD2�지원으로�작성된��
라라벨�한국어�메뉴얼�깃허브�페이지
![Page 22: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/22.jpg)
SHOW CASE #4
22
XpressEngineXpressEngine은 누구나 쉽고 편하고 자유롭게 콘텐츠를 발행을
할 수 있도록 하기 위한 CMS(Content Management System)
![Page 23: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/23.jpg)
처음 4가지 요구사항(지금은�무한한�∞�요구사항)
![Page 24: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/24.jpg)
CHAK 서비스 기본 요구사항
24
어디에나�착!�붙어야함1
SPA�(Single�Page�Application)2
커뮤니케이션�(댓글,�포럼)3
소셜�로그인�(SNS�Login)4
![Page 25: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/25.jpg)
25
SPA�(Single�Page�Application)
![Page 26: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/26.jpg)
SPA (Single Page Application)
26
- Wikipedia
A single-page application (SPA) is a web application or web site that fits on a single web page with the goal of providing
a more fluid user experience akin to a desktop application
웹 어플리케이션
데스크탑 어플리케이션과 같은 사용자 경험을 제공
![Page 27: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/27.jpg)
SPA (Single Page Application)
27
![Page 28: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/28.jpg)
SPA (Single Page Application)
28
Lots of people use React as the V in MVC. Since React makes no
assumptions about the rest of your technology stack, it's easy to try it out
on a small feature in an existing project.
JUST UIReact abstracts away the DOM from you, giving a simpler programming
model and better performance. React can also render on the server using Node, and it can power native apps
using React Native.
Virtual DOMReact implements one-way reactive data flow which reduces boilerplate and is easier to reason about than
traditional data binding.
DATA FLOW
https://facebook.github.io/react/
![Page 29: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/29.jpg)
SPA (Single Page Application)
29
![Page 30: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/30.jpg)
SPA (Single Page Application)
30
Request
Response
SERVER
![Page 31: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/31.jpg)
31
![Page 32: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/32.jpg)
1,300개 이상의 XE 모듈, 스킨, 애드온 …
32
![Page 33: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/33.jpg)
서비스에 필요한 모듈만 따로 구현
33
+ CHAK SERVICE Module
![Page 34: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/34.jpg)
XpressEngine with React
34
+ CHAK SERVICE LOGIC
Application
Request
Response
![Page 35: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/35.jpg)
XE1 으로 서비스를 만들다보니
35
안되는게�있어?�XE�코어를�수정해!
![Page 36: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/36.jpg)
XE1 으로 서비스를 만들다보니
36
수정하고�나니�업데이트가�불안하다
![Page 37: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/37.jpg)
XE1 으로 서비스를 만들다보니
37
UI�테스트만�믿고�가야하나?
2014 XECON - Selenium for UI Test 오승훈 XE 커뮤니티 개발 그룹
![Page 38: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/38.jpg)
Xpress Engine3로 착 서비스 확장하기(실제�CHAK�서비스에서�활용중인�패키지�소개)
![Page 39: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/39.jpg)
XE3에서 강화된 특징
39
• Modern�PHP�(Autoloading,�Composer,�etc)�
• 라라벨(Laravel)�프레임워크�기반의�오픈소스�CMS�
• 유용한�XE3�Core�Packages�
• Cloud�File�System�
• Testable�(Unit�test)
![Page 40: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/40.jpg)
Autoloading, PSR-4
40
XE1
모듈에서 따로 구현한 클래스는 include 해야함
![Page 41: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/41.jpg)
Michael님의 유튜브(YouTube) 모듈
41
![Page 42: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/42.jpg)
Autoloading, PSR-4
42
XE3
현재 클래스의 네임 스페이스를 지정
필요한 클래스들을 로드
![Page 43: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/43.jpg)
Composer & Packagist
43
Composer is a brilliant dependency manager for PHP. List your project’s dependencies in a composer.json file and, with a few simple commands, Composer will automatically download your project’s dependencies and setup autoloading for you.
There are already a lot of PHP libraries that are compatible with Composer, ready to be used in your project. These “packages” are listed on Packagist, the official repository for Composer-compatible PHP libraries.
composer require phpunit/phpunit
![Page 44: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/44.jpg)
Laravel 프레임워크 기반의 오픈소스 CMS
44
![Page 45: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/45.jpg)
Authentication
Billing
Elixir
Authorization
Cache
Encryption
Events
Helpers
Package Development
Filesystem
Localization
Pagination
Redis Session
Artisan Console
Collections
Errors & Logging
Hashing
Queues
SSH Tasks
Task Scheduling Testing Validation
![Page 46: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/46.jpg)
유용한 XE3 코어 패키지
Xpressengine\Config
Xpressengine\Category
Xpressengine\Interception
Xpressengine\Comment
Xpressengine\Document
Xpressengine\Keygen
Xpressengine\Menu
Xpressengine\Register
Xpressengine\Site
Xpressengine\Permission
Xpressengine\Routing
Xpressengine\Skin
Xpressengine\Tag Xpressengine\Temporary
Xpressengine\Counter
Xpressengine\DynamicField
Xpressengine\Media
Xpressengine\Database
Xpressengine\Http
Xpressengine\Member
Xpressengine\Plugin
Xpressengine\Seo
Xpressengine\Storage
Xpressengine\Presenter
Xpressengine\Settings
Xpressengine\Support
Xpressengine\Theme Xpressengine\ToggleMenu
Xpressengine\Translation Xpressengine\Trash Xpressengine\UIObject Xpressengine\Widget
![Page 47: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/47.jpg)
CHAK with Laravel & XE3
47
![Page 48: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/48.jpg)
Event System with Queued Job
48
Laravel's events provides a simple observer implementation,
allowing you to subscribe and listen for events in your application
Events and Queues
![Page 49: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/49.jpg)
<?php class documentController extends document{ function insertDocument() { // Insert data into the DB $output = executeQuery('document.insertDocument', $obj); if(!$output->toBool()) { $oDB->rollback(); return $output; }
ModuleHandler::triggerCall('document.insertDocument', 'before', $obj); }
Event System (XE 1 Trigger)
49
![Page 50: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/50.jpg)
class DocumentHandler{ public function insertDocument($doc) { $this->insertDoc($doc); Event::fire(new DocumentInserted($doc)); return $doc; }
Event System (Laravel)
50
.
.
.
![Page 51: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/51.jpg)
class EventServiceProvider extends ServiceProvider{ /** * The event listener mappings for the application. * * @var array */ protected $listen = [ ArticleWasDeleted::class => [ DeleteArticleUser::class, RemoveFileFromStorage::class, WebhookQueueSender::class, DeleteArticleCodes::class, DeleteArticleFiles::class, DeleteArticleLinks::class, DeleteArticleTags::class, DeleteArticleVotes::class, DeleteArticleChildren::class ],
Event System (Laravel)
51
웹훅도 날려야하고.. 클라우드서버에서 파일도 삭제해야하고..
자식 댓글도 삭제해야하니.. Recursive하게 다시 파일을 삭제하고..
![Page 52: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/52.jpg)
Event System with Queued Job
52
출처 : 생활코딩
![Page 53: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/53.jpg)
class DeleteArticleFiles implements ShouldQueue{ use InteractsWithQueue; /** @var Log */ private $log; /** @var FileRepositoryInterface */ private $articleFiles;
Event System with Queued Job
53
ShouldQueue 인터페이스 상속만으로 비동기 작업 처리
.
.
.
![Page 54: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/54.jpg)
Event System with Queued Job
54
바로응답
ArtisanListen
출처 : 생활코딩
![Page 55: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/55.jpg)
Cloud File System
55
Filesystem / Cloud Storage
The Laravel Flysystem integration provides simple to use drivers for working with local
filesystems, Amazon S3, and Rackspace Cloud Storage.
![Page 56: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/56.jpg)
Cloud File System
56
Storage::disk('local')->put('file.txt', 'Contents');
![Page 57: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/57.jpg)
Cloud File System (Custom Disk)
57
League/Flysystem/AdapterInterface
![Page 58: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/58.jpg)
XE3 Config with CHAK
58
XE3의 Config 패키지는 XE3 에서 각종 설정 정보를 저장하고 관리하며
Hierarchy 구조로 상위 참조가 가능한 key - value 저장소
Xpressengine\Config
![Page 59: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/59.jpg)
XE3 Config with CHAK
59
사용자 (Naver)
코멘트1
CHAK SERVICE
사용자 (XE)
코멘트2 코멘트3 포럼1 포럼2 포럼3
포럼 혹은 코멘트 인스턴스
인스턴스를 관리할 수 있는 그룹
![Page 60: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/60.jpg)
사용자 (Naver)
코멘트1
CHAK SERVICE
사용자 (XE)
코멘트2 코멘트3 포럼1 포럼2 포럼3
XE3 Config with CHAK
60
착 포럼 인스턴스에 대한 설정(스킨) 정보를 요청
{"skin" : null
}
![Page 61: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/61.jpg)
사용자 (XE)
XE3 Config with CHAK
61
사용자 (Naver)
코멘트1
CHAK SERVICE
코멘트2 코멘트3 포럼1 포럼2 포럼3
{"skin" : null
}
부모(Parent)의 설정 정보를 요청
![Page 62: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/62.jpg)
사용자 (XE)사용자 (Naver)
코멘트1
CHAK SERVICE
코멘트2 코멘트3 포럼1 포럼2 포럼3
XE3 Config with CHAK
62
기본 Default 설정 정보를 요청
{"skin" : "default"
}
![Page 63: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/63.jpg)
XE3 Config with CHAK
63
Cfg::get(‘chak.upgle.1000-0000’);
Instance ID
group ID
CHAK Service
[ . ] 으로 구분되는 구분자(델리미터)를 통해서 설정 정보를 가져올 수 있다.
![Page 64: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/64.jpg)
유용한 XE3 코어 패키지
Xpressengine\Config
Xpressengine\Category
Xpressengine\Interception
Xpressengine\Comment
Xpressengine\Document
Xpressengine\Keygen
Xpressengine\Menu
Xpressengine\Register
Xpressengine\Site
Xpressengine\Permission
Xpressengine\Routing
Xpressengine\Skin
Xpressengine\Tag Xpressengine\Temporary
Xpressengine\Counter
Xpressengine\DynamicField
Xpressengine\Media
Xpressengine\Database
Xpressengine\Http
Xpressengine\Member
Xpressengine\Plugin
Xpressengine\Seo
Xpressengine\Storage
Xpressengine\Presenter
Xpressengine\Settings
Xpressengine\Support
Xpressengine\Theme Xpressengine\ToggleMenu
Xpressengine\Translation Xpressengine\Trash Xpressengine\UIObject Xpressengine\Widget
너무 많아서 다 보여드릴수가 없어요!
![Page 65: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/65.jpg)
Artisan Command 를 통한 서비스 관리
![Page 66: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/66.jpg)
Artisan Command
Artisan Command 를 통한 서비스 관리 (스케쥴링)
Linux Cron Job
http://laravel.com/docs/5.1/scheduling
![Page 67: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/67.jpg)
Unit Testing
$_SESSION 글로벌 변수에 의존하고 있기도 하고…
Testable XE3
![Page 68: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/68.jpg)
Unit Testing (XE1)
$_SESSION 글로벌 변수에 의존하고 있기도 하고…
다른 Class의 인스턴스를 런타임 중에 받아오고
![Page 69: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/69.jpg)
Unit Testing (DI)
class User {public function getCurrentUser() {
$user_id = $_SESSION['user_id'];$user = new User();
$user->select('id', 'username')->where('id', $user_id)->limit(1)->get();
if($user->num_results() > 0){
return $user->all();}return null;
}}
class User {
protected $_db;
public function __construct($db_connection){
$this->_db = $db_connection;}
public function getUser($userId){
$user = $this->_db->select('user')->where('id', $user_id)->limit(1)->get();
if($user->num_results() >0){
return $user->all();}return false;
}}
Non-Testable Code Testable Code
의존성을 생성자에서 주입받는다.
![Page 70: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/70.jpg)
Unit Testing (XE3)
XE3 Test Coverage (76%)
![Page 71: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/71.jpg)
Unit Testing
CHAK Service Unit Test
![Page 72: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/72.jpg)
Unit Testing
72
Cos
t of C
hang
e
0
5
10
15
20
Development Time
XE1 XE3 (TDD Available)
Cost of change vs development time
![Page 73: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/73.jpg)
XE3로 시작하는 웹서비스 장점
73
• �전세계�수�많은�사용자로부터�검증된�프레임워크�기반��오픈�소스�코드�
• 개발�비용�최소화�(XE�패키지�활용,�서비스�개발�기간�단축)�
• 서드�파티�모듈을�활용하여�서비스�자체�컨텐츠에�집중할�수�있다.�
• 테스팅을�통한�안정적인�배포및�서비스�운영�가능하다.
![Page 74: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/74.jpg)
XE3로 멋진 서비스를 만들어주세요!
![Page 75: XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3](https://reader033.vdocuments.net/reader033/viewer/2022042722/589e75df1a28ab300b8b5489/html5/thumbnails/75.jpg)
감사합니다