SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
오승현
• XE 1 서드파티 개발자
• XE 1 Contributor
• XECONTEST 2014 수상
• CHAK 개발 (15.06 ~ )
오승현
• XE 1 서드파티 개발자
• XE 1 Contributor
• XECONTEST 2014 수상
• CHAK 개발 (15.06 ~ )
What is CHAK?
4
5
오픈소스 개발자와 사용자간의 커뮤니케이션을 제공
What is CHAK?
What is CHAK?
6
어디에나 포럼, 코멘트 서비스 제공
What is CHAK?
7
쉽고 간단한 설치
What is CHAK?
8
Just Copy & Paste
What is CHAK?
9
소셜 로그인
What is CHAK?
10
Syntax Highlighting
What is CHAK?
11
파일 업로드
What is CHAK?
12
Web Hook
How to use?
13착!
How to use?
14착!
15
어때요 참 쉽죠?
16
다른 공간, 같은 커뮤니케이션
Service Preview
(서비스 시연)
SHOW CASE
(착 적용 사례)
SHOW CASE #1
19
D2 Hello World
NAVER 개발자들의 실전 노하우와 지식을 담은 기술 블로그
SHOW CASE #2
20
D2 STARTUP
FACTORY
D2 Startup Factory는 NAVER가 Tech Startup 생태계 저변
확대를 위해 만든 Accelerator로, 차별화된 Tech Startup을
직접 발굴해 육성하고 있습니다.
SHOW CASE #3
21
Laravel
Korean Docs
NaverD2 지원으로 작성된
라라벨 한국어 메뉴얼 깃허브 페이지
SHOW CASE #4
22
XpressEngine
XpressEngine은 누구나 쉽고 편하고 자유롭게 콘텐츠를 발행을
할 수 있도록 하기 위한 CMS(Content Management System)
처음 4가지 요구사항
(지금은 무한한 ∞ 요구사항)
CHAK 서비스 기본 요구사항
24
어디에나 착! 붙어야함1
SPA (Single Page Application)2
커뮤니케이션 (댓글, 포럼)3
소셜 로그인 (SNS Login)4
25
SPA (Single Page Application)
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
웹 어플리케이션
데스크탑 어플리케이션과 같은
사용자 경험을 제공
SPA (Single Page Application)
27
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 UI
React 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 DOM
React 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/
SPA (Single Page Application)
29
SPA (Single Page Application)
30
Request
Response
SERVER
31
1,300개 이상의 XE 모듈, 스킨, 애드온 …
32
서비스에 필요한 모듈만 따로 구현
33
+ CHAK
SERVICE Module
XpressEngine with React
34
+ CHAK
SERVICE LOGIC
Application
Request
Response
XE1 으로 서비스를 만들다보니
35
안되는게 있어? XE 코어를 수정해!
XE1 으로 서비스를 만들다보니
36
수정하고 나니 업데이트가 불안하다
XE1 으로 서비스를 만들다보니
37
UI 테스트만 믿고 가야하나?
2014 XECON - Selenium for UI Test

오승훈 XE 커뮤니티 개발 그룹
Xpress Engine3로 착 서비스 확장하기
(실제 CHAK 서비스에서 활용중인 패키지 소개)
XE3에서 강화된 특징
39
• Modern PHP (Autoloading, Composer, etc)
• 라라벨(Laravel) 프레임워크 기반의 오픈소스 CMS
• 유용한 XE3 Core Packages
• Cloud File System
• Testable (Unit test)
Autoloading, PSR-4
40
XE1
모듈에서 따로 구현한 클래스는 include 해야함
Michael님의 유튜브(YouTube) 모듈
41
Autoloading, PSR-4
42
XE3
현재 클래스의 네임 스페이스를 지정
필요한 클래스들을 로드
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
Laravel 프레임워크 기반의 오픈소스 CMS
44
Authentication
Billing
Elixir
Authorization
Cache
Encryption
Events
Helpers
Package Development
Filesystem
Localization
Pagination
Redis Session
Artisan Console
Collections
Errors & Logging
Hashing
Mail
Queues
SSH Tasks
Task Scheduling Testing Validation
유용한 XE3 코어 패키지
XpressengineConfig
XpressengineCategory
XpressengineInterception
XpressengineComment
XpressengineDocument
XpressengineKeygen
XpressengineMenu
XpressengineRegister
XpressengineSite
XpressenginePermission
XpressengineRouting
XpressengineSkin
XpressengineTag XpressengineTemporary
XpressengineCounter
XpressengineDynamicField
XpressengineMedia
XpressengineDatabase
XpressengineHttp
XpressengineMember
XpressenginePlugin
XpressengineSeo
XpressengineStorage
XpressenginePresenter
XpressengineSettings
XpressengineSupport
XpressengineTheme XpressengineToggleMenu
XpressengineTranslation XpressengineTrash XpressengineUIObject XpressengineWidget
CHAK with Laravel & XE3
47
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
<?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


class DocumentHandler

{

public function insertDocument($doc)

{
$this->insertDoc($doc);


Event::fire(new DocumentInserted($doc));



return $doc;

}
Event System (Laravel)
50
.
.
.
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하게 다시 파일을 삭제하고..
Event System with Queued Job
52
출처 : 생활코딩
class DeleteArticleFiles implements ShouldQueue

{

use InteractsWithQueue;



/** @var Log */

private $log;



/** @var FileRepositoryInterface */

private $articleFiles;

Event System with Queued Job
53
ShouldQueue 인터페이스 상속만으로 비동기 작업 처리
.
.
.
Event System with Queued Job
54
바로응답
Artisan
Listen
출처 : 생활코딩
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.
Cloud File System
56
Storage::disk('local')->put('file.txt', 'Contents');
Cloud File System (Custom Disk)
57
League/Flysystem/AdapterInterface
XE3 Config with CHAK
58
XE3의 Config 패키지는 XE3 에서 각종 설정 정보를 저장하고 관리하며
Hierarchy 구조로 상위 참조가 가능한 key - value 저장소
XpressengineConfig
XE3 Config with CHAK
59
사용자 (Naver)
코멘트1
CHAK SERVICE
사용자 (XE)
코멘트2 코멘트3 포럼1 포럼2 포럼3
포럼 혹은 코멘트 인스턴스
인스턴스를 관리할 수 있는 그룹
사용자 (Naver)
코멘트1
CHAK SERVICE
사용자 (XE)
코멘트2 코멘트3 포럼1 포럼2 포럼3
XE3 Config with CHAK
60
착 포럼 인스턴스에 대한 설정(스킨) 정보를 요청
{
"skin" : null
}
사용자 (XE)
XE3 Config with CHAK
61
사용자 (Naver)
코멘트1
CHAK SERVICE
코멘트2 코멘트3 포럼1 포럼2 포럼3
{
"skin" : null
}
부모(Parent)의 설정 정보를 요청
사용자 (XE)사용자 (Naver)
코멘트1
CHAK SERVICE
코멘트2 코멘트3 포럼1 포럼2 포럼3
XE3 Config with CHAK
62
기본 Default 설정 정보를 요청
{
"skin" : "default"
}
XE3 Config with CHAK
63
Cfg::get(‘chak.upgle.1000-0000’);
Instance ID
group ID
CHAK Service
[ . ] 으로 구분되는 구분자(델리미터)를 통해서 설정 정보를 가져올 수 있다.
유용한 XE3 코어 패키지
XpressengineConfig
XpressengineCategory
XpressengineInterception
XpressengineComment
XpressengineDocument
XpressengineKeygen
XpressengineMenu
XpressengineRegister
XpressengineSite
XpressenginePermission
XpressengineRouting
XpressengineSkin
XpressengineTag XpressengineTemporary
XpressengineCounter
XpressengineDynamicField
XpressengineMedia
XpressengineDatabase
XpressengineHttp
XpressengineMember
XpressenginePlugin
XpressengineSeo
XpressengineStorage
XpressenginePresenter
XpressengineSettings
XpressengineSupport
XpressengineTheme XpressengineToggleMenu
XpressengineTranslation XpressengineTrash XpressengineUIObject XpressengineWidget
너무 많아서 다 보여드릴수가 없어요!
Artisan Command 를 통한 서비스 관리
Artisan Command
Artisan Command 를 통한 서비스 관리 (스케쥴링)
Linux
Cron
Job
http://laravel.com/docs/5.1/scheduling
Unit Testing
$_SESSION 글로벌 변수에
의존하고 있기도 하고…
Testable XE3
Unit Testing (XE1)
$_SESSION 글로벌 변수에
의존하고 있기도 하고…
다른 Class의 인스턴스를
런타임 중에 받아오고
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
의존성을 생성자에서 주입받는다.
Unit Testing (XE3)
XE3 Test Coverage (76%)
Unit Testing
CHAK Service Unit Test
Unit Testing
72
CostofChange
0
5
10
15
20
Development Time
XE1 XE3 (TDD Available)
Cost of change vs development time
XE3로 시작하는 웹서비스 장점
73
• 전세계 수 많은 사용자로부터 검증된 프레임워크 기반 오픈 소스 코드
• 개발 비용 최소화 (XE 패키지 활용, 서비스 개발 기간 단축)
• 서드 파티 모듈을 활용하여 서비스 자체 컨텐츠에 집중할 수 있다.
• 테스팅을 통한 안정적인 배포및 서비스 운영 가능하다.
XE3로 멋진 서비스를 만들어주세요!
감사합니다

Mais conteúdo relacionado

Mais procurados

Introduce Docker
Introduce DockerIntroduce Docker
Introduce DockerYongbok Kim
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기raccoony
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google KubernetesYongbok Kim
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문Daniel Seo
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법pyrasis
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집Daegwon Kim
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편Sam Kim
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Tae Young Lee
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 

Mais procurados (20)

Introduce Docker
Introduce DockerIntroduce Docker
Introduce Docker
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 

Destaque

Ppt2010교육[2011.10.25] (4prt)
Ppt2010교육[2011.10.25] (4prt)Ppt2010교육[2011.10.25] (4prt)
Ppt2010교육[2011.10.25] (4prt)Hipertech Inc.
 
21세기 지식혁명을 인도하는 진화론 다윈이 돌아왔다
21세기 지식혁명을 인도하는 진화론   다윈이 돌아왔다21세기 지식혁명을 인도하는 진화론   다윈이 돌아왔다
21세기 지식혁명을 인도하는 진화론 다윈이 돌아왔다Woo-Young Shim
 
1등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 3
1등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 31등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 3
1등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 3Daniel Ha
 
151211케로로팡팡_오라라출시이벤트
151211케로로팡팡_오라라출시이벤트151211케로로팡팡_오라라출시이벤트
151211케로로팡팡_오라라출시이벤트지민 고
 
극동 시베리아 개황__최종_파일
극동 시베리아 개황__최종_파일극동 시베리아 개황__최종_파일
극동 시베리아 개황__최종_파일drtravel
 
2008990048 디지털미디어 설봉엽 10대 뉴스
2008990048 디지털미디어 설봉엽 10대 뉴스2008990048 디지털미디어 설봉엽 10대 뉴스
2008990048 디지털미디어 설봉엽 10대 뉴스HyeongkeunShin
 
해외여행 가서 무선인터넷을 사용하는 4가지 방법
해외여행 가서 무선인터넷을 사용하는 4가지 방법해외여행 가서 무선인터넷을 사용하는 4가지 방법
해외여행 가서 무선인터넷을 사용하는 4가지 방법binssii
 
세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터
세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터
세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터cbs15min
 
[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호
[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호
[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호밀 하
 
[JCLP Season 01] Maker Project Day 1 - 1
[JCLP Season 01] Maker Project Day 1 - 1[JCLP Season 01] Maker Project Day 1 - 1
[JCLP Season 01] Maker Project Day 1 - 1Junhyuk Lee
 
[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬
[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬
[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬Codingclub
 
2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝
2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝
2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝2015 SW마에스트로 100+ 컨퍼런스
 
Sns ws twitter-facebook
Sns ws twitter-facebookSns ws twitter-facebook
Sns ws twitter-facebookYoonwhan Lee
 
INNOVATION: 10 Ways to Innovate for Entrepreneurs and Managers
INNOVATION: 10 Ways to Innovate for Entrepreneurs and ManagersINNOVATION: 10 Ways to Innovate for Entrepreneurs and Managers
INNOVATION: 10 Ways to Innovate for Entrepreneurs and ManagersRishabh Dev
 
2010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%292010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%29drtravel
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST_NHNent
 
Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)
Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)
Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)Sangsu Song
 
학부모.교사대상 Sw교육 세미나
학부모.교사대상 Sw교육 세미나 학부모.교사대상 Sw교육 세미나
학부모.교사대상 Sw교육 세미나 Sangsu Song
 

Destaque (20)

Ppt2010교육[2011.10.25] (4prt)
Ppt2010교육[2011.10.25] (4prt)Ppt2010교육[2011.10.25] (4prt)
Ppt2010교육[2011.10.25] (4prt)
 
21세기 지식혁명을 인도하는 진화론 다윈이 돌아왔다
21세기 지식혁명을 인도하는 진화론   다윈이 돌아왔다21세기 지식혁명을 인도하는 진화론   다윈이 돌아왔다
21세기 지식혁명을 인도하는 진화론 다윈이 돌아왔다
 
1등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 3
1등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 31등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 3
1등 아이폰 애플리케이션의 비밀 출간기념 세미나 Session 3
 
151211케로로팡팡_오라라출시이벤트
151211케로로팡팡_오라라출시이벤트151211케로로팡팡_오라라출시이벤트
151211케로로팡팡_오라라출시이벤트
 
극동 시베리아 개황__최종_파일
극동 시베리아 개황__최종_파일극동 시베리아 개황__최종_파일
극동 시베리아 개황__최종_파일
 
2008990048 디지털미디어 설봉엽 10대 뉴스
2008990048 디지털미디어 설봉엽 10대 뉴스2008990048 디지털미디어 설봉엽 10대 뉴스
2008990048 디지털미디어 설봉엽 10대 뉴스
 
해외여행 가서 무선인터넷을 사용하는 4가지 방법
해외여행 가서 무선인터넷을 사용하는 4가지 방법해외여행 가서 무선인터넷을 사용하는 4가지 방법
해외여행 가서 무선인터넷을 사용하는 4가지 방법
 
세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터
세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터
세바시15분 패션이 인간을 만드는 5가지 방법 - 김홍기 패션큐레이터
 
[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호
[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호
[KGC2013] 문화 콘텐츠로서의 게임 포지셔닝_바이닐랩_조형호
 
[JCLP Season 01] Maker Project Day 1 - 1
[JCLP Season 01] Maker Project Day 1 - 1[JCLP Season 01] Maker Project Day 1 - 1
[JCLP Season 01] Maker Project Day 1 - 1
 
[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬
[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬
[알고리즘 스터디 3주차]기수정렬/계수정렬/버킷정렬
 
2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝
2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝
2015 SW마에스트로 100+ 컨퍼런스_짧았던 스타트업의 시작과 끝
 
Sns ws twitter-facebook
Sns ws twitter-facebookSns ws twitter-facebook
Sns ws twitter-facebook
 
INNOVATION: 10 Ways to Innovate for Entrepreneurs and Managers
INNOVATION: 10 Ways to Innovate for Entrepreneurs and ManagersINNOVATION: 10 Ways to Innovate for Entrepreneurs and Managers
INNOVATION: 10 Ways to Innovate for Entrepreneurs and Managers
 
2010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%292010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%29
 
python and database
python and databasepython and database
python and database
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
4월 온라인 소비동향 & 광고전략 레저스포츠
4월 온라인 소비동향 & 광고전략 레저스포츠4월 온라인 소비동향 & 광고전략 레저스포츠
4월 온라인 소비동향 & 광고전략 레저스포츠
 
Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)
Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)
Creative Computing 교육전략 (소프트웨어 교육/프로그래밍 교육/SW교육)
 
학부모.교사대상 Sw교육 세미나
학부모.교사대상 Sw교육 세미나 학부모.교사대상 Sw교육 세미나
학부모.교사대상 Sw교육 세미나
 

Semelhante a XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3

Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Nativerockplace
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInho Kang
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XpressEngine
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
당근마켓에서 IaC경험
당근마켓에서 IaC경험당근마켓에서 IaC경험
당근마켓에서 IaC경험용진 조
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing SystemOpenStack Korea Community
 
해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack Solution해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack SolutionNalee Jang
 
Developer direct live in 부산
Developer direct live in 부산Developer direct live in 부산
Developer direct live in 부산Humphery Kim
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...Amazon Web Services Korea
 
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개OpenStack Korea Community
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경NAVER Engineering
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 

Semelhante a XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3 (20)

Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Native
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
당근마켓에서 IaC경험
당근마켓에서 IaC경험당근마켓에서 IaC경험
당근마켓에서 IaC경험
 
Subversion Branch
Subversion BranchSubversion Branch
Subversion Branch
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
 
해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack Solution해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack Solution
 
Developer direct live in 부산
Developer direct live in 부산Developer direct live in 부산
Developer direct live in 부산
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
 
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 

Mais de XpressEngine

Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3XpressEngine
 
XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XpressEngine
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXpressEngine
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기XpressEngine
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩XpressEngine
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기XpressEngine
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들XpressEngine
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게XpressEngine
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기XpressEngine
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7XpressEngine
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래XpressEngine
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기XpressEngine
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로XpressEngine
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략XpressEngine
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기XpressEngine
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXpressEngine
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XpressEngine
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XpressEngine
 

Mais de XpressEngine (20)

Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3
 
XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynote
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning Laravel
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 

XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3

  • 1.
  • 2. 오승현 • XE 1 서드파티 개발자 • XE 1 Contributor • XECONTEST 2014 수상 • CHAK 개발 (15.06 ~ )
  • 3. 오승현 • XE 1 서드파티 개발자 • XE 1 Contributor • XECONTEST 2014 수상 • CHAK 개발 (15.06 ~ )
  • 5. 5 오픈소스 개발자와 사용자간의 커뮤니케이션을 제공 What is CHAK?
  • 6. What is CHAK? 6 어디에나 포럼, 코멘트 서비스 제공
  • 7. What is CHAK? 7 쉽고 간단한 설치
  • 8. What is CHAK? 8 Just Copy & Paste
  • 10. What is CHAK? 10 Syntax Highlighting
  • 16. 16 다른 공간, 같은 커뮤니케이션
  • 19. SHOW CASE #1 19 D2 Hello World NAVER 개발자들의 실전 노하우와 지식을 담은 기술 블로그
  • 20. SHOW CASE #2 20 D2 STARTUP FACTORY D2 Startup Factory는 NAVER가 Tech Startup 생태계 저변 확대를 위해 만든 Accelerator로, 차별화된 Tech Startup을 직접 발굴해 육성하고 있습니다.
  • 21. SHOW CASE #3 21 Laravel Korean Docs NaverD2 지원으로 작성된 라라벨 한국어 메뉴얼 깃허브 페이지
  • 22. SHOW CASE #4 22 XpressEngine XpressEngine은 누구나 쉽고 편하고 자유롭게 콘텐츠를 발행을 할 수 있도록 하기 위한 CMS(Content Management System)
  • 23. 처음 4가지 요구사항 (지금은 무한한 ∞ 요구사항)
  • 24. CHAK 서비스 기본 요구사항 24 어디에나 착! 붙어야함1 SPA (Single Page Application)2 커뮤니케이션 (댓글, 포럼)3 소셜 로그인 (SNS Login)4
  • 25. 25 SPA (Single Page Application)
  • 26. 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 웹 어플리케이션 데스크탑 어플리케이션과 같은 사용자 경험을 제공
  • 27. SPA (Single Page Application) 27
  • 28. 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 UI React 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 DOM React 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/
  • 29. SPA (Single Page Application) 29
  • 30. SPA (Single Page Application) 30 Request Response SERVER
  • 31. 31
  • 32. 1,300개 이상의 XE 모듈, 스킨, 애드온 … 32
  • 33. 서비스에 필요한 모듈만 따로 구현 33 + CHAK SERVICE Module
  • 34. XpressEngine with React 34 + CHAK SERVICE LOGIC Application Request Response
  • 35. XE1 으로 서비스를 만들다보니 35 안되는게 있어? XE 코어를 수정해!
  • 36. XE1 으로 서비스를 만들다보니 36 수정하고 나니 업데이트가 불안하다
  • 37. XE1 으로 서비스를 만들다보니 37 UI 테스트만 믿고 가야하나? 2014 XECON - Selenium for UI Test
 오승훈 XE 커뮤니티 개발 그룹
  • 38. Xpress Engine3로 착 서비스 확장하기 (실제 CHAK 서비스에서 활용중인 패키지 소개)
  • 39. XE3에서 강화된 특징 39 • Modern PHP (Autoloading, Composer, etc) • 라라벨(Laravel) 프레임워크 기반의 오픈소스 CMS • 유용한 XE3 Core Packages • Cloud File System • Testable (Unit test)
  • 40. Autoloading, PSR-4 40 XE1 모듈에서 따로 구현한 클래스는 include 해야함
  • 42. Autoloading, PSR-4 42 XE3 현재 클래스의 네임 스페이스를 지정 필요한 클래스들을 로드
  • 43. 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
  • 44. Laravel 프레임워크 기반의 오픈소스 CMS 44
  • 45. Authentication Billing Elixir Authorization Cache Encryption Events Helpers Package Development Filesystem Localization Pagination Redis Session Artisan Console Collections Errors & Logging Hashing Mail Queues SSH Tasks Task Scheduling Testing Validation
  • 46. 유용한 XE3 코어 패키지 XpressengineConfig XpressengineCategory XpressengineInterception XpressengineComment XpressengineDocument XpressengineKeygen XpressengineMenu XpressengineRegister XpressengineSite XpressenginePermission XpressengineRouting XpressengineSkin XpressengineTag XpressengineTemporary XpressengineCounter XpressengineDynamicField XpressengineMedia XpressengineDatabase XpressengineHttp XpressengineMember XpressenginePlugin XpressengineSeo XpressengineStorage XpressenginePresenter XpressengineSettings XpressengineSupport XpressengineTheme XpressengineToggleMenu XpressengineTranslation XpressengineTrash XpressengineUIObject XpressengineWidget
  • 47. CHAK with Laravel & XE3 47
  • 48. 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
  • 49. <?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
  • 50. 
 class DocumentHandler
 {
 public function insertDocument($doc)
 { $this->insertDoc($doc); 
 Event::fire(new DocumentInserted($doc));
 
 return $doc;
 } Event System (Laravel) 50 . . .
  • 51. 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하게 다시 파일을 삭제하고..
  • 52. Event System with Queued Job 52 출처 : 생활코딩
  • 53. class DeleteArticleFiles implements ShouldQueue
 {
 use InteractsWithQueue;
 
 /** @var Log */
 private $log;
 
 /** @var FileRepositoryInterface */
 private $articleFiles;
 Event System with Queued Job 53 ShouldQueue 인터페이스 상속만으로 비동기 작업 처리 . . .
  • 54. Event System with Queued Job 54 바로응답 Artisan Listen 출처 : 생활코딩
  • 55. 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.
  • 57. Cloud File System (Custom Disk) 57 League/Flysystem/AdapterInterface
  • 58. XE3 Config with CHAK 58 XE3의 Config 패키지는 XE3 에서 각종 설정 정보를 저장하고 관리하며 Hierarchy 구조로 상위 참조가 가능한 key - value 저장소 XpressengineConfig
  • 59. XE3 Config with CHAK 59 사용자 (Naver) 코멘트1 CHAK SERVICE 사용자 (XE) 코멘트2 코멘트3 포럼1 포럼2 포럼3 포럼 혹은 코멘트 인스턴스 인스턴스를 관리할 수 있는 그룹
  • 60. 사용자 (Naver) 코멘트1 CHAK SERVICE 사용자 (XE) 코멘트2 코멘트3 포럼1 포럼2 포럼3 XE3 Config with CHAK 60 착 포럼 인스턴스에 대한 설정(스킨) 정보를 요청 { "skin" : null }
  • 61. 사용자 (XE) XE3 Config with CHAK 61 사용자 (Naver) 코멘트1 CHAK SERVICE 코멘트2 코멘트3 포럼1 포럼2 포럼3 { "skin" : null } 부모(Parent)의 설정 정보를 요청
  • 62. 사용자 (XE)사용자 (Naver) 코멘트1 CHAK SERVICE 코멘트2 코멘트3 포럼1 포럼2 포럼3 XE3 Config with CHAK 62 기본 Default 설정 정보를 요청 { "skin" : "default" }
  • 63. XE3 Config with CHAK 63 Cfg::get(‘chak.upgle.1000-0000’); Instance ID group ID CHAK Service [ . ] 으로 구분되는 구분자(델리미터)를 통해서 설정 정보를 가져올 수 있다.
  • 64. 유용한 XE3 코어 패키지 XpressengineConfig XpressengineCategory XpressengineInterception XpressengineComment XpressengineDocument XpressengineKeygen XpressengineMenu XpressengineRegister XpressengineSite XpressenginePermission XpressengineRouting XpressengineSkin XpressengineTag XpressengineTemporary XpressengineCounter XpressengineDynamicField XpressengineMedia XpressengineDatabase XpressengineHttp XpressengineMember XpressenginePlugin XpressengineSeo XpressengineStorage XpressenginePresenter XpressengineSettings XpressengineSupport XpressengineTheme XpressengineToggleMenu XpressengineTranslation XpressengineTrash XpressengineUIObject XpressengineWidget 너무 많아서 다 보여드릴수가 없어요!
  • 65. Artisan Command 를 통한 서비스 관리
  • 66. Artisan Command Artisan Command 를 통한 서비스 관리 (스케쥴링) Linux Cron Job http://laravel.com/docs/5.1/scheduling
  • 67. Unit Testing $_SESSION 글로벌 변수에 의존하고 있기도 하고… Testable XE3
  • 68. Unit Testing (XE1) $_SESSION 글로벌 변수에 의존하고 있기도 하고… 다른 Class의 인스턴스를 런타임 중에 받아오고
  • 69. 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 의존성을 생성자에서 주입받는다.
  • 70. Unit Testing (XE3) XE3 Test Coverage (76%)
  • 72. Unit Testing 72 CostofChange 0 5 10 15 20 Development Time XE1 XE3 (TDD Available) Cost of change vs development time
  • 73. XE3로 시작하는 웹서비스 장점 73 • 전세계 수 많은 사용자로부터 검증된 프레임워크 기반 오픈 소스 코드 • 개발 비용 최소화 (XE 패키지 활용, 서비스 개발 기간 단축) • 서드 파티 모듈을 활용하여 서비스 자체 컨텐츠에 집중할 수 있다. • 테스팅을 통한 안정적인 배포및 서비스 운영 가능하다.
  • 74. XE3로 멋진 서비스를 만들어주세요!