SlideShare una empresa de Scribd logo
1 de 197
Descargar para leer sin conexión
실시간 웹 협업도구 만들기

홍영택

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

Más contenido relacionado

La actualidad más candente

Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?Martin Loetzsch
 
Using Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraUsing Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraJim Hatcher
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012devCAT Studio, NEXON
 
Bootiful Development with Spring Boot and React
Bootiful Development with Spring Boot and ReactBootiful Development with Spring Boot and React
Bootiful Development with Spring Boot and ReactVMware Tanzu
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample applicationAntoine Rey
 
Bypass web security dengan menggunakan teknik XST (Cross Sites Tracing)
Bypass web security dengan menggunakan  teknik XST (Cross Sites Tracing)Bypass web security dengan menggunakan  teknik XST (Cross Sites Tracing)
Bypass web security dengan menggunakan teknik XST (Cross Sites Tracing)Mark Thalib
 
Module design pattern i.e. express js
Module design pattern i.e. express jsModule design pattern i.e. express js
Module design pattern i.e. express jsAhmed Assaf
 
Solving PostgreSQL wicked problems
Solving PostgreSQL wicked problemsSolving PostgreSQL wicked problems
Solving PostgreSQL wicked problemsAlexander Korotkov
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Taejun Kim
 
CloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみたCloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみたTerui Masashi
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례Hyung Lee
 
2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때 2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때 choi kyumin
 
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte DataProblems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte DataJignesh Shah
 
MongoDB Atlas Data Lake 집중 분석 [MongoDB]
MongoDB Atlas Data Lake 집중 분석 [MongoDB]MongoDB Atlas Data Lake 집중 분석 [MongoDB]
MongoDB Atlas Data Lake 집중 분석 [MongoDB]MongoDB
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 

La actualidad más candente (20)

Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
 
Using Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraUsing Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into Cassandra
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012
 
Bootiful Development with Spring Boot and React
Bootiful Development with Spring Boot and ReactBootiful Development with Spring Boot and React
Bootiful Development with Spring Boot and React
 
Extensible Data Modeling
Extensible Data ModelingExtensible Data Modeling
Extensible Data Modeling
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 
Google guava
Google guavaGoogle guava
Google guava
 
Bypass web security dengan menggunakan teknik XST (Cross Sites Tracing)
Bypass web security dengan menggunakan  teknik XST (Cross Sites Tracing)Bypass web security dengan menggunakan  teknik XST (Cross Sites Tracing)
Bypass web security dengan menggunakan teknik XST (Cross Sites Tracing)
 
Module design pattern i.e. express js
Module design pattern i.e. express jsModule design pattern i.e. express js
Module design pattern i.e. express js
 
Solving PostgreSQL wicked problems
Solving PostgreSQL wicked problemsSolving PostgreSQL wicked problems
Solving PostgreSQL wicked problems
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
 
CloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみたCloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみた
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례
 
2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때 2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때
 
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte DataProblems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
 
MongoDB Atlas Data Lake 집중 분석 [MongoDB]
MongoDB Atlas Data Lake 집중 분석 [MongoDB]MongoDB Atlas Data Lake 집중 분석 [MongoDB]
MongoDB Atlas Data Lake 집중 분석 [MongoDB]
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
Node.js Express Framework
Node.js Express FrameworkNode.js Express Framework
Node.js Express Framework
 

Similar a 실시간 웹 협업도구 만들기 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
 
Vital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent AppsVital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent AppsVital.AI
 
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
 

Similar a 실시간 웹 협업도구 만들기 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
 
Vital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent AppsVital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent Apps
 
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
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
Introduction to Vaadin 7
Introduction to Vaadin 7Introduction to Vaadin 7
Introduction to 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
 

Más de 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
 

Más de 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