SlideShare a Scribd company logo
1 of 197
Download to read offline
실시간 웹 협업도구 만들기

홍영택

Sunday, October 13, 13
실시간 웹 협업도구 만들기

홍영택

Sunday, October 13, 13
실시간 웹 협업도구 만들기

홍영택

Sunday, October 13, 13
About Me

Sunday, October 13, 13
About Me
Javascript

Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
https://github.com/HackerWins/summernote

Sunday, October 13, 13
https://github.com/HackerWins/summernote

Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
실시간 웹 협업도구 만들기

Sunday, October 13, 13
Collaboration
is everything

Sunday, October 13, 13
Sunday, October 13, 13
팀원 B: “아인슈타인은 내친구”
조장A: “제길 내가 조장 ㅠ”

팀원 C: “대학은 술먹는 곳”

Sunday, October 13, 13
Email based Collaboration

Sunday, October 13, 13
조장A: 템플릿 받으셈

Sunday, October 13, 13
팀원 B: “E=mc^2”

조장A:나도 내부분
작성

팀원 C: “지식인에서 C & P”

Sunday, October 13, 13
팀원 C: “난 한글 없어서 HWP 파일 편
집 못해”

Sunday, October 13, 13
조장 A: “다했으면 보내주셈”

Sunday, October 13, 13
조장A: 취합 취합

Sunday, October 13, 13
조장 A: “이거 다시보내 주셈”

Sunday, October 13, 13
팀원 C: “지식인에서 C & P”

Sunday, October 13, 13
조장 A: “제대로 고쳤나?”

Sunday, October 13, 13
조장A: “취합 취합 (파일이
많아졌어...)”

Sunday, October 13, 13
조장A: “취합 취합
(죽겠네...)”

Sunday, October 13, 13
첨부파일을 이용한 이메일 기반 협업
로컬 컴퓨터에 편집기가 설치되어 있어야함
리비전 관리가 어려움

Sunday, October 13, 13
조장A: “문서 링크
받으셈”

http://wiki.ooo.com

Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
http://wiki.ooo.com

Sunday, October 13, 13
Lock, Save

Sunday, October 13, 13
Lock & Save

Sunday, October 13, 13
사용자 C: “Blah Blah”

Sunday, October 13, 13
사용자 B: “문서에 락걸렸네”

Sunday, October 13, 13
사용자 C: “저장!”

Sunday, October 13, 13
사용자 B: “이제 편집된다.”

Sunday, October 13, 13
사용자 B: “몽창 날라갔다.ㅠ”

Sunday, October 13, 13
Lock & Save 협업 도구
페이지 락을 기다리는 불편함이 있음
네트워크가 끊어질 경우 데이터 손실의 위험이 있음

Sunday, October 13, 13
real-time collaboration

Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
사용자 B: “Blah Blah”

조장A: “취합이 필요없군”

사용자 C: “Blah Blah”

Sunday, October 13, 13
웹 협업
첨부파일을 이용한 이메일 기반 협업
Lock & Save 협업 도구
실시간 협업 도구

Sunday, October 13, 13
웹 협업
첨부파일을 이용한 이메일 기반 협업
Lock & Save 협업 도구
실시간 협업 도구

Sunday, October 13, 13
편집기 만들기

Sunday, October 13, 13
입력

출력

Sunday, October 13, 13
이벤트 핸들러

Sunday, October 13, 13
이벤트 핸들러

Sunday, October 13, 13
이벤트 핸들러

도큐먼트 모델

Sunday, October 13, 13
이벤트 핸들러

도큐먼트 모델

렌더러

Sunday, October 13, 13
이벤트 핸들러

도큐먼트 모델

렌더러

Sunday, October 13, 13

코드가 많아
‘가’
이벤트 핸들러

도큐먼트 모델

렌더러

Sunday, October 13, 13
‘가’

doc.addText(‘가’)
이벤트 핸들러

도큐먼트 모델

렌더러

Sunday, October 13, 13
‘가’

doc.addText(‘가’)
이벤트 핸들러

도큐먼트 모델

렌더러

Sunday, October 13, 13

renderer.paint(para)
‘가’

doc.addText(‘가’)
이벤트 핸들러

도큐먼트 모델

<P>가</P>
{HTML}

렌더러

Sunday, October 13, 13

renderer.paint(para)
학기말 과제 작성중...

‘node cookbook’
번역중...

난 그냥 들어와 봤어...

Sunday, October 13, 13
‘node cookbook’
번역중...

나도 껴줘~!!!

Sunday, October 13, 13
Sunday, October 13, 13
‘가’

Sunday, October 13, 13
‘가’

Sunday, October 13, 13

doc.addText(‘가’)
‘가’

doc.addText(‘가’)

update(doc)

Sunday, October 13, 13
‘가’

doc.addText(‘가’)

update(doc)

change(doc)

Sunday, October 13, 13
‘가’

doc.addText(‘가’)

update(doc)

renderer.paint(para)

change(doc)

renderer.paint(doc)

Sunday, October 13, 13
‘가’

doc.addText(‘가’)

update(doc)

<P>가</P>

renderer.paint(para)

{HTML}

change(doc)

<P>가</P>
{HTML}

Sunday, October 13, 13

renderer.paint(doc)
‘가’

doc.addText(‘가’)

update(doc)

<P>가</P>

renderer.paint(para)

{HTML}

동일한 결과~!!!
<P>가</P>
{HTML}

Sunday, October 13, 13

renderer.paint(doc)

change(doc)
‘가’

doc.addText(‘가’)

update(doc)

<P>가</P>

renderer.paint(para)

{HTML}

하지만 문서를 전송해서
느리다~!!!

change(doc)

<P>가</P>
{HTML}

Sunday, October 13, 13

renderer.paint(doc)
‘가’

‘나’

Sunday, October 13, 13
‘가’

‘나’

Sunday, October 13, 13

doc.addText(‘가’)

doc.addText(‘나’)
‘가’

doc.addText(‘가’)

update(doc)

‘나’

doc.addText(‘나’)

update(doc)

Sunday, October 13, 13
‘가’

doc.addText(‘가’)

update(doc)

‘나’

doc.addText(‘나’)

update(doc)

Conflict!
동시편집은 무리
Sunday, October 13, 13
실시간 협업 에디터 만들기
문서 전체 전송으로 Network 사용량이 많음
동시 편집시 충돌 발생

Sunday, October 13, 13
실시간 협업 에디터 만들기
문서 전체 전송으로 Network 사용량이 많음
동시 편집시 충돌 발생

Sunday, October 13, 13
실시간 협업 에디터 만들기
문서 전체 전송으로 Network 사용량이 많음
동시 편집시 충돌 발생

Sunday, October 13, 13
실시간 협업 에디터 만들기
문서 전체 전송으로 Network 사용량이 많음
동시 편집시 충돌 발생

Sunday, October 13, 13
실시간 협업 에디터 만들기
문서 전체 전송으로 Network 사용량이 많음
동시 편집시 충돌 발생
스타크래프트 마린부대는
이동중 모든 좌표를 전송할까?

Sunday, October 13, 13
OT

(Operational
 Transformation)

Sunday, October 13, 13
OT
 (wikipedia)

• Operational transformation(OT) is a

technology for supporting a range of
collaboration functionalities in advanced
collaborative software systems.

Sunday, October 13, 13
OT
 (wikipedia)

• Operational transformation(OT) is a

technology for supporting a range of
collaboration functionalities in advanced
collaborative software systems.

Sunday, October 13, 13
“OT is like
real-time Git”
- Joseph Gentle(ShareJS, ex google wave...)

Sunday, October 13, 13
OT
 (basic)

• Data Model
• Operation Model
• OT Function

Sunday, October 13, 13
OT
 (basic)

• Data Model
• Operation Model
• OT Function

Sunday, October 13, 13
OT
 (basic)

• Data Model
• Operation Model
• OT Function

Sunday, October 13, 13
OT
 (basic)

• Data Model
• Operation Model
• OT Function

Sunday, October 13, 13
기억하세요?
‘가’

doc.addText(‘가’)
이벤트 핸들러

도큐먼트 모델

P가/P
{HTML}

렌더러

Sunday, October 13, 13

renderer.paint(para)
replicated
 architecture
 for
 shared
 documents

Sunday, October 13, 13
replicated
 architecture
 for
 shared
 documents

Operation 실행

Sunday, October 13, 13
replicated
 architecture
 for
 shared
 documents

Operation 전송

Sunday, October 13, 13
replicated
 architecture
 for
 shared
 documents

Operation 변환

Sunday, October 13, 13
OT Function
replicated
 architecture
 for
 shared
 documents

Operation 변환

Sunday, October 13, 13
replicated
 architecture
 for
 shared
 documents

Operation 실행

Sunday, October 13, 13
OT(Function)
Client 1
“APL”

Time

Sunday, October 13, 13

Client 2
“APL”
OT(Function)
Client 1
“APL”

O1 = INS(1, ‘P’)

“APPL”
Time

Sunday, October 13, 13

Client 2
“APL”
O1 = INS(1, ‘P’)

Sunday, October 13, 13
INSERT : 삽입

O1 = INS(1, ‘P’)

Sunday, October 13, 13
글자의 삽입 위치

O1 = INS(1, ‘P’)
삽입 문자

Sunday, October 13, 13
O1 = INS(1, ‘P’)
“APL”

Sunday, October 13, 13

?
O1 = INS(1, ‘P’)
“APL”

Sunday, October 13, 13

“APPL”
OT(Function)
Client 1
“APL”

O1 = INS(1, ‘P’)

“APPL”
Time

Sunday, October 13, 13

Client 2
“APL”
OT(Function)
Client 1

Client 2

“APL”

O1 = INS(1, ‘P’)

Sunday, October 13, 13

O2 = INS(3, ‘E’)

“APPL”
Time

“APL”

“APLE”
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O1 = INS(1, ‘P’)

“APPLE”

Sunday, October 13, 13
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O2 = INS(3, ‘E’)

“APPEL”

Sunday, October 13, 13

O1 = INS(1, ‘P’)

“APPLE”
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O2 = INS(3, ‘E’)

“APPEL”

Sunday, October 13, 13

O1 = INS(1, ‘P’)

APPEL ≠ APPLE

“APPLE”
OT(Function)
Client 1
“APL”

Time

Sunday, October 13, 13

Client 2
“APL”
OT(Function)
Client 1
“APL”

O1 = INS(1, ‘P’)

“APPL”
Time

Sunday, October 13, 13

Client 2
“APL”
OT(Function)
Client 1

Client 2

“APL”

O1 = INS(1, ‘P’)

Sunday, October 13, 13

O2 = INS(3, ‘E’)

“APPL”
Time

“APL”

“APLE”
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O1’ = INS(1, ‘P’)

“APPLE”

Sunday, October 13, 13
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O2’ = INS(4, ‘E’)

“APPLE”

Sunday, October 13, 13

O1’ = INS(1, ‘P’)

“APPLE”
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O2’ : index++
O2’ = INS(4, ‘E’)

“APPLE”

Sunday, October 13, 13

O1’ = INS(1, ‘P’)

“APPLE”
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O2’ = INS(4, ‘E’)

“APPLE”

Sunday, October 13, 13

O1’ = INS(1, ‘P’)

APPLE = APPLE

“APPLE”
OT(Function)
Client 1

Client 2

“APL”

“APL”

O1 = INS(1, ‘P’)

O2 = INS(3, ‘E’)

“APPL”

“APLE”

Time

O2’ = INS(4, ‘E’)

“APPLE”

Sunday, October 13, 13

O1’ = INS(1, ‘P’)

APPLE = APPLE

“APPLE”
OT(Function)
O1'⋅O2 = O2'⋅O1
where
(O1', O2') = transform(O1, O2)

Sunday, October 13, 13
Visualization of OT with a central server

http://localhost:8080/visualization.html

Sunday, October 13, 13
‘가’

doc.addText(‘가’)

update(doc)

‘나’

doc.addText(‘나’)

update(doc)

Conflict!
동시편집은 무리
Sunday, October 13, 13
실시간 협업 에디터 만들기
문서 전체 전송으로 Network 사용량이 많음
동시 편집시 충돌 발생

Sunday, October 13, 13
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
동시 편집시 충돌 발생

Sunday, October 13, 13
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
OT Function으로 동일한 문서 유지

Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
Sunday, October 13, 13
OT
Client

Sunday, October 13, 13

OT
Server
Operation만 전송

OT
Client

Sunday, October 13, 13

OT
Server
문제
 없나요?

Sunday, October 13, 13
OT
Client

Sunday, October 13, 13

OT
Server
OT
Client

Sunday, October 13, 13

OT
Server
비슷하게 생겼는데
쉽게 포팅 가능?

var document = {
	 insertText : function(){
...
},
	 deleteText : function(){
...
},
	 updateStyle : function(){
...
},
...
};
Sunday, October 13, 13

class Document {
	 public Document(){
...
}
	 public void insertText(){
...
}
	 public void deleteText(){
...
}
	 public void updateStyle(){
...
}	
...
};
Javascript는 Java와
완전히 달라
- 더글라스 크락포드

Sunday, October 13, 13
클로
져

자바스크립트
“C 언어의 옷을 입은 LISP”

함수

Sunday, October 13, 13

객체
일급
=

- 더글라스 크락포드
이벤트 핸들러

도큐먼트 모델

렌더러

Sunday, October 13, 13

코드가 많아
문제의 본질은 중복

Sunday, October 13, 13
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
OT Function으로 동일한 문서 유지
Document Model 중복

Sunday, October 13, 13
한편...

Sunday, October 13, 13
이벤트 기반의 논 블러킹 I/O
작은 서버
- 라이언 달(Node.js)

Sunday, October 13, 13
C? 루아? 하스켈?

Sunday, October 13, 13
Javascript !!!

Sunday, October 13, 13
Sunday, October 13, 13
Javascript가
서버에서
돌아간다 ㅠㅠ

Sunday, October 13, 13
var document = {
	 insertText : function(){
...
},
	 deleteText : function(){
...
},
	 updateStyle : function(){
...
},
...
};

Sunday, October 13, 13

class Document {
	 public Document(){
...
}
	 public void insertText(){
...
}
	 public void deleteText(){
...
}
	 public void updateStyle(){
...
}	
...
};
OT
Client

OT
Server

같은 코드

Sunday, October 13, 13
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
OT Function으로 동일한 문서 유지
서버/클라이언트 Document Model 중복

Sunday, October 13, 13
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
OT Function으로 동일한 문서 유지
서버/클라이언트 Document Model 재사용

Sunday, October 13, 13
One
 more
 thing...

R.I.P.
 Jobs
Sunday, October 13, 13
JSON to POJO
POJO to JSON

JSON

Browser

Sunday, October 13, 13

OR-MAPPING

POJO

Server

Table

RDB
우린 왜? 이유없이 데이터 형변환을 하고 있을까?
문서에 무결성이 왠말이냐!!

Sunday, October 13, 13
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
OT Function으로 동일한 문서 유지
서버/클라이언트 Document Model 재사용
불필요한 형변환

Sunday, October 13, 13
JSON to POJO
POJO to JSON

JSON

Browser

Sunday, October 13, 13

OR-MAPPING

JSON

Server

Document

NoSQL
Interfacing with Databases

nano
가벼운
API

Sunday, October 13, 13

cradle
강력함
API

mongoskin
깨끗한
API
실시간 협업 에디터 만들기
Operation 전송으로 Network 사용량이 적음
OT Function으로 동일한 문서 유지
서버/클라이언트 Document Model 재사용
형변환 최소화

Sunday, October 13, 13
Real-time(OT)
 server
 vs
 Web
 server

Sunday, October 13, 13
Long

More Related Content

What's hot

성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게Seongyun Byeon
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
Log management system for Microservices
Log management system for MicroservicesLog management system for Microservices
Log management system for MicroservicesVõ Duy Tuấn
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기AWSKRUG - AWS한국사용자모임
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)수보 김
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법강 민우
 
PINTOS Operating system homework 2
PINTOS Operating system homework 2PINTOS Operating system homework 2
PINTOS Operating system homework 2Gichan Lee
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"InfraEngineer
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )ssuserda2e71
 
GA로 게임 로그 분석하기
GA로 게임 로그 분석하기GA로 게임 로그 분석하기
GA로 게임 로그 분석하기Alan Kang
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)상현 조
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 

What's hot (20)

성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
Log management system for Microservices
Log management system for MicroservicesLog management system for Microservices
Log management system for Microservices
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
 
PINTOS Operating system homework 2
PINTOS Operating system homework 2PINTOS Operating system homework 2
PINTOS Operating system homework 2
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )
 
Swoole Love PHP
Swoole Love PHPSwoole Love PHP
Swoole Love PHP
 
GA로 게임 로그 분석하기
GA로 게임 로그 분석하기GA로 게임 로그 분석하기
GA로 게임 로그 분석하기
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 

Similar to 실시간 웹 협업도구 만들기 V0.3

FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...
FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...
FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...New Relic
 
Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Thibault Imbert
 
Hotcode 2013: Javascript in a database (Part 2)
Hotcode 2013: Javascript in a database (Part 2)Hotcode 2013: Javascript in a database (Part 2)
Hotcode 2013: Javascript in a database (Part 2)ArangoDB Database
 
Troubleshooting Live Java Web Applications
Troubleshooting Live Java Web ApplicationsTroubleshooting Live Java Web Applications
Troubleshooting Live Java Web Applicationsashleypuls
 
DIY Synthetic: Private WebPagetest Magic
DIY Synthetic: Private WebPagetest MagicDIY Synthetic: Private WebPagetest Magic
DIY Synthetic: Private WebPagetest MagicJonathan Klein
 
Taming Pythons with ZooKeeper
Taming Pythons with ZooKeeperTaming Pythons with ZooKeeper
Taming Pythons with ZooKeeperJyrki Pulliainen
 
Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...
Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...
Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...Amazon Web Services
 
5 Ways Thinking Content-first Will Save Your Butt
5 Ways Thinking Content-first Will Save Your Butt5 Ways Thinking Content-first Will Save Your Butt
5 Ways Thinking Content-first Will Save Your ButtZURB
 
Hadoop webinar-130808141030-phpapp01
Hadoop webinar-130808141030-phpapp01Hadoop webinar-130808141030-phpapp01
Hadoop webinar-130808141030-phpapp01Kaushik Dey
 
Engineering culture
Engineering cultureEngineering culture
Engineering culturePamela Fox
 
MongoTalk/Voyage
MongoTalk/VoyageMongoTalk/Voyage
MongoTalk/VoyageESUG
 
Vinted life embetterment
Vinted life embettermentVinted life embetterment
Vinted life embettermentAgile Lietuva
 
Introduction to Vaadin 7
Introduction to Vaadin 7Introduction to Vaadin 7
Introduction to Vaadin 7lastrand
 
Impactos no design com programação funcional
Impactos no design com programação funcionalImpactos no design com programação funcional
Impactos no design com programação funcionalLuiz Costa
 
Bring the Noise
Bring the NoiseBring the Noise
Bring the NoiseJon Cowie
 
Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013Phil Sturgeon
 

Similar to 실시간 웹 협업도구 만들기 V0.3 (20)

FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...
FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...
FUTURESTACK13: Mobile Apps, A DevOps Way from Jonathan Karon, Engineering Man...
 
Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013
 
Hotcode 2013: Javascript in a database (Part 2)
Hotcode 2013: Javascript in a database (Part 2)Hotcode 2013: Javascript in a database (Part 2)
Hotcode 2013: Javascript in a database (Part 2)
 
Paranoid Android
Paranoid AndroidParanoid Android
Paranoid Android
 
Troubleshooting Live Java Web Applications
Troubleshooting Live Java Web ApplicationsTroubleshooting Live Java Web Applications
Troubleshooting Live Java Web Applications
 
DIY Synthetic: Private WebPagetest Magic
DIY Synthetic: Private WebPagetest MagicDIY Synthetic: Private WebPagetest Magic
DIY Synthetic: Private WebPagetest Magic
 
Taming Pythons with ZooKeeper
Taming Pythons with ZooKeeperTaming Pythons with ZooKeeper
Taming Pythons with ZooKeeper
 
Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...
Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...
Telco: Voice-Command Personal Agent Service with AWS Cloud (MBL202) | AWS re:...
 
Moscow 2013 10
Moscow 2013 10Moscow 2013 10
Moscow 2013 10
 
5 Ways Thinking Content-first Will Save Your Butt
5 Ways Thinking Content-first Will Save Your Butt5 Ways Thinking Content-first Will Save Your Butt
5 Ways Thinking Content-first Will Save Your Butt
 
Hadoop webinar-130808141030-phpapp01
Hadoop webinar-130808141030-phpapp01Hadoop webinar-130808141030-phpapp01
Hadoop webinar-130808141030-phpapp01
 
Engineering culture
Engineering cultureEngineering culture
Engineering culture
 
MongoTalk/Voyage
MongoTalk/VoyageMongoTalk/Voyage
MongoTalk/Voyage
 
Vinted life embetterment
Vinted life embettermentVinted life embetterment
Vinted life embetterment
 
Introduction to Vaadin 7
Introduction to Vaadin 7Introduction to Vaadin 7
Introduction to Vaadin 7
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
Smartgears
SmartgearsSmartgears
Smartgears
 
Impactos no design com programação funcional
Impactos no design com programação funcionalImpactos no design com programação funcional
Impactos no design com programação funcional
 
Bring the Noise
Bring the NoiseBring the Noise
Bring the Noise
 
Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

실시간 웹 협업도구 만들기 V0.3