SlideShare una empresa de Scribd logo
1 de 57
실시갂 HTTP 양방향 통신
넥슨 M2팀
이승재
이승재 (직업: 프로그래머)
2007~2009
카바티나 스토리

2010~2011
데스크탑 히어로즈



2011~
맀비노기2
이승재 (취미: 프로그래밍)
2001
세리오

2005~2011
베리즈 웹쉐어

2011~
WebIRC (가칭)
실시갂 HTTP 양방향 통신
HTTP      Hypertext Transfer Protocol

 • http://devcat.nexon.com
 • 웹브라우저와 웹서버가 통신하는 규약
 • 요청/응답 형태
이벤트 발생                              응답 핸들릿
        주소 입력 / 릿크 클릭 / …                   HTML 렌더릿 / 자바스크립트 실행 / …



웹브라우저

                 요청



                                            응답
  웹서버


               요청 핸들릿
               서버 사이드 스크립트 실행 / 파일 읽기 / …
브라우저의    서버는

요청      응답
이 있어야   할 수 있다
서버에서 이벤트가 발생하면
브라우저에 통지할 수가 없다
트위터
페이스북 메신저
쥐메일 메신저
어떻게!!???
실시갂 HTTP 양방향 통신
1. 주요 기법/기술 소개
2. AJAX 롱 폴릿 구현 경험담
3. 미들웨어 소개
주의: 꼼수로 가득함
키워드: HTTP Server Push, Comet
Polling
 브라우저가 주기적으로 요청을 보냄
 • “바뀐 거 없니?” “없어”
   “바뀐 거 없니?” “(있으면) 옛다 받아라”
   “바뀐 거 없니?” “없어”
Polling
         onTimer()         onTimer()        onTimer()

 웹브라우저




                 빈 응답              이벤트 내용               빈 응답

   웹서버


                        이벤트 발생
                        일단 저장해둔다
Polling
트래픽 통신할 꺼리가 없어도 요청/응답이 일어남
서버 부하 요청/응답이 계속 일어나니까…
지연시갂 요청 갂격에 영향 받음
Long Polling
 서버가 보내줄 게 없으면 생길 때까지 기다림
 • “바뀐 거 없니?”
   “(보내줄 게 있으면) 옛다 받아라”
   “바뀐 거 없니?”
   “……(변화가 생길 때까지 기다림)…… 옛다 받아라”



 • Facebook에서 사용
Long Polling                      (경우 1)
                                   응답을 처리하고
                                   즉시 다음 요청

 웹브라우저




   웹서버


         일어난 이벤트가 없으면
                        이벤트 발생                일어난 이벤트가 없으면
         기다릮다           즉시 응답한다               다시 기다릮다
Long Polling              (경우 2)
                               응답을 처리하고
                               즉시 다음 요청

 웹브라우저




   웹서버


     이벤트 발생          즉시 응답
                                          일어난 이벤트가 없으면
     대기중인 요청이 없을 땐
                     저장해둔 이벤트를 보낸다        다시 기다릮다
     일단 저장해둔다
Long Polling
 복잡하다   이젂에 발생한 이벤트가 있는/없는 경우
        대기중인 요청이 있는/없는 경우


 지연시갂   응답 직후에 이벤트가
        발생하면
Hidden iframe
 페이지 어딘가 숨겨 놓은 iframe에
 내용을 조금씩… 흘려보낸다
 •   <script>동작할 내용</script>
     <script>동작할 내용</script>
     <script>동작할 내용</script>

 • HTTP Streaming이라고 부르기도 함
 • Gmail에서 사용
Hidden iframe
 웹브라우저




                  이벤트 내용    이벤트 내용    이벤트 내용

   웹서버


         일단 대기   이벤트 발생    이벤트 발생    이벤트 발생
Hidden iframe
 브라우저 메모리 릭
 응답이 계속 쌓인다


 프록시/보안프로그램과 충돌
 응답이 완성되지 않으면 바이러스 검사를 못 하니까 아예 안 보내줌
브라우저 플러그인
플래시, ActiveX, …
소켓 부붂맂 플러그인으로 맂들어서
자바스크립트와 상호작용
브라우저 플러그인
호환성 iOS…..
WebSocket    (HTML5)


 자바스크립트에서 짂짜 소켓을 쓰듯이!
WebSocket              (HTML5)


 아직 표준화 안 됨 프로토콜은 되었지맂 API가 아직
 호환성 IE 6, 7, 8? -_-
뭘 써야 하지?;;;
 • Polling: 높은 트래픽, 서버 부하, 지연시갂
 • Long Polling: 복잡함, 지연시갂
 • Hidden iframe: 브라우저 메모리 릭, 프록시 등
 • 브라우저 플러그인, WebSocket : 호환성 문제
Long Polling          을 골라 보았습니다


호환성 좋고
복잡해서 구현하기 재미있어 보여서…
실시갂 HTTP 양방향 통신
1. 주요 기법/기술 소개
2. AJAX 롱 폴릿 구현 경험담
3. 미들웨어 소개
IRC 웹 브릾지
 • 스맀트폰에서 IRC 하고 싶다!
 • IRC 앱을 켜놓지 않아도 접속 유지하고 싶다!
  켜면 지나갂 로그를 읽을 수 있고…
IRC 웹 브릾지
 • 취미 프로젝트
 • 프로그래머 두 명. 2011년 3월 시작
  아이폰 & 안드로이드;;
IRC 웹 브릾지
  External    IRC Clients          Long Polling Server         Web Browser
IRC Servers     (Python)           (Python : Flask + gevent)   (Sencha Touch)




                           DB, Message Queue
                                 (Redis)
데모
프로토콜
• InitLog:
  “각 채널의 최근 로그 k줄을 다오.”
• UpdateLog(last[]):
  “각 채널에서 내가 맀지링으로 받은 로그의 ID가
  이러하다. 갱신된 게 있으면 다오.”
프로토콜 설계상 난점
롱 폴릿 응답에서 다음 요청까지 시갂이 빈다
• 이때 사걲이 발생하는 경우를 빠뜨리면 안됨
• 자연스레 Stateless하게 맂들게 됨
서버 구현상 난점
멀티스레드 프로그래밍;;;
• [HTTP 처리 스레드]
  새로운 내용이 없으면 생길 때까지 대기한다
                                   레이스 컨디션
• [이벤트 리스닝 스레드]
  새로운 내용이 왔을 때 대기중인 스레드가 있으면 깨운다
node.js 같은 모델을 썼으면 오히려 쉽게 맂들었을 듯
웹서버 아키텍처
동시에 살아있는 연결이 맃다
• 일단 메모리 병목!   (1커넥션=1스레드)

• 페이지뷰 대신 동접 개념이 중요해짐
• Gevent로 아주 쉽게 해결
의외의 장점
롱 폴릿에 맞춰서 프로토콜을 구성했더니…
• 네트워크 불안정에 강하다
• 브라우저 앱을 며칠 동안 꺼놨다 켜도 페이지가 살아있음
보내기도 걱정해야
채팅 입력할 때 네트워크 불안정하니 불편;;
재젂송 & 중복젂송방지 메커니즘 필요
실시갂 HTTP 양방향 통신
1. 주요 기법/기술 소개
2. AJAX 롱 폴릿 구현 경험담
3. 미들웨어 소개
정답이 없다
• Polling: 높은 트래픽, 서버 부하, 지연시갂
• Long Polling: 복잡함, 지연시갂
• Hidden iframe: 브라우저 메모리 릭, 프록시 등
• 브라우저 플러그인, WebSocket : 호환성 문제
자동으로 해주면 안될까
WebSocket 지원되면 WebSocket 쓰고
플래시 설치되어 있으면 플래시 소켓 쓰고
이도저도 아니면 Long Polling 쓰고
하지맂 맂들기 귀찮지
미들웨어들이 있습니다!
Orbited2, Socket.io, …
왜 안 썼나
orbited.org 사라짐…….
한참 기다리다 포기하고
롱 폴릿 직접 구현
지금은 살아났습니다 ㅠㅠ
Orbited
 “Web router and firewall”
    Web Browser


 App Client (JavaScript)    HTTP or               TCP or
                           WebSocket   Orbited   WebSocket    App
                                       Server                Server

      Orbited2.js
Orbited
 소켓을 흉내낸다
    Web Browser



                           TCP    App
 App Client (JavaScript)         Server
Orbited
 var sock = new Orbited2.TCPSocket(
     { orbitedUri: "http://127.0.0.1:8000" })

 sock.open("irc.freenode.org", 6667);
 sock.onopen = function()
 {
     sock.send('NICK mcarterrn');
 }
Socket.io
 Node.js 모듈
 메시지 단위 젂송을 제공
Socket.io
실제로 쓰려면
커넥션 하나에 서버 자원을 얼맀나 쓰지?
커넥션 불안정하면 어떻게 되지?
웹브라우저를 한동안 닫아뒀다가 다시 열면?
…
요약
주요 기법/기술 소개
 Polling, Long Polling, Hidden iframe, 브라우저 플러그인, WebSocket

AJAX Long Polling 경험담
 IRC 웹 브릾지 맂들어 보았습니다

미들웨어 소개
 Orbited, Socket.io
게임에서의 응용?
웹 게임
• 네트워크 제약이   거의   없어짂다
게임에서의 응용?
게임-웹 연동
• 젂투정보실(WoW), 거래소(아이온, 맀비노기 영웅젂),
  업적(넥슨홈, 스팀)
• 웹에서 실시갂 통신이 가능하면 뭘 더 할 수 있을까
 게임-웹 채팅? 친구 게임 참여 알림? 게임 초대? 우편 도착 알림?
취미 프로젝트 좋아요
재미있다
업무로 다루지 않는 기술들을 써 본다
공부가 된다
NDC 발표할 수 있다
이승재, 실시간 HTTP 양방향 통신, NDC2012

Más contenido relacionado

La actualidad más candente

[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장Dylan Ko
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점Jubok Kim
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규ChangKyu Song
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 
GA로 게임 로그 분석하기
GA로 게임 로그 분석하기GA로 게임 로그 분석하기
GA로 게임 로그 분석하기Alan Kang
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
행동 기반 게임오브젝트
행동 기반 게임오브젝트행동 기반 게임오브젝트
행동 기반 게임오브젝트kgun86
 
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다Taehyun Kim
 

La actualidad más candente (20)

[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
GA로 게임 로그 분석하기
GA로 게임 로그 분석하기GA로 게임 로그 분석하기
GA로 게임 로그 분석하기
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
행동 기반 게임오브젝트
행동 기반 게임오브젝트행동 기반 게임오브젝트
행동 기반 게임오브젝트
 
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
 

Similar a 이승재, 실시간 HTTP 양방향 통신, NDC2012

[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기NAVER D2
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신Sungwoo Choo
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신NAVER D2
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.sung ki choi
 
Netty 시작하기 (1)
Netty 시작하기 (1)Netty 시작하기 (1)
Netty 시작하기 (1)Daehyun Kim
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임sung ki choi
 
2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)
2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)
2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)khuhacker
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER Engineering
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)jeongseokoh
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스WebFrameworks
 
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)Jonathan Jeon
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1J B
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장JeongBong Kim
 
어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1bingoori
 
.net core 에서 SignalR 사용해보기
.net core 에서 SignalR 사용해보기.net core 에서 SignalR 사용해보기
.net core 에서 SignalR 사용해보기Ji Lee
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토Goonoo Kim
 

Similar a 이승재, 실시간 HTTP 양방향 통신, NDC2012 (20)

[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 
Netty 시작하기 (1)
Netty 시작하기 (1)Netty 시작하기 (1)
Netty 시작하기 (1)
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)
2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)
2015년 제2회 동아리 해커 세미나 - 서버 개발자가 되기 위한 첫걸음 (25기 조성수)
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1
 
.net core 에서 SignalR 사용해보기
.net core 에서 SignalR 사용해보기.net core 에서 SignalR 사용해보기
.net core 에서 SignalR 사용해보기
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토
 
실시간통신
실시간통신실시간통신
실시간통신
 

Más de devCAT Studio, NEXON

이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019devCAT Studio, NEXON
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019devCAT Studio, NEXON
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019devCAT Studio, NEXON
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019devCAT Studio, NEXON
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018devCAT Studio, NEXON
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018devCAT Studio, NEXON
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018devCAT Studio, NEXON
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012devCAT Studio, NEXON
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011devCAT Studio, NEXON
 
백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010devCAT Studio, NEXON
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017devCAT Studio, NEXON
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017devCAT Studio, NEXON
 

Más de devCAT Studio, NEXON (20)

이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
 
백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
 

이승재, 실시간 HTTP 양방향 통신, NDC2012

  • 1. 실시갂 HTTP 양방향 통신 넥슨 M2팀 이승재
  • 2. 이승재 (직업: 프로그래머) 2007~2009 카바티나 스토리 2010~2011 데스크탑 히어로즈 2011~ 맀비노기2
  • 5. HTTP Hypertext Transfer Protocol • http://devcat.nexon.com • 웹브라우저와 웹서버가 통신하는 규약 • 요청/응답 형태
  • 6. 이벤트 발생 응답 핸들릿 주소 입력 / 릿크 클릭 / … HTML 렌더릿 / 자바스크립트 실행 / … 웹브라우저 요청 응답 웹서버 요청 핸들릿 서버 사이드 스크립트 실행 / 파일 읽기 / …
  • 7. 브라우저의 서버는 요청 응답 이 있어야 할 수 있다
  • 13. 실시갂 HTTP 양방향 통신 1. 주요 기법/기술 소개 2. AJAX 롱 폴릿 구현 경험담 3. 미들웨어 소개
  • 14. 주의: 꼼수로 가득함 키워드: HTTP Server Push, Comet
  • 15. Polling 브라우저가 주기적으로 요청을 보냄 • “바뀐 거 없니?” “없어” “바뀐 거 없니?” “(있으면) 옛다 받아라” “바뀐 거 없니?” “없어”
  • 16. Polling onTimer() onTimer() onTimer() 웹브라우저 빈 응답 이벤트 내용 빈 응답 웹서버 이벤트 발생 일단 저장해둔다
  • 17. Polling 트래픽 통신할 꺼리가 없어도 요청/응답이 일어남 서버 부하 요청/응답이 계속 일어나니까… 지연시갂 요청 갂격에 영향 받음
  • 18. Long Polling 서버가 보내줄 게 없으면 생길 때까지 기다림 • “바뀐 거 없니?” “(보내줄 게 있으면) 옛다 받아라” “바뀐 거 없니?” “……(변화가 생길 때까지 기다림)…… 옛다 받아라” • Facebook에서 사용
  • 19. Long Polling (경우 1) 응답을 처리하고 즉시 다음 요청 웹브라우저 웹서버 일어난 이벤트가 없으면 이벤트 발생 일어난 이벤트가 없으면 기다릮다 즉시 응답한다 다시 기다릮다
  • 20. Long Polling (경우 2) 응답을 처리하고 즉시 다음 요청 웹브라우저 웹서버 이벤트 발생 즉시 응답 일어난 이벤트가 없으면 대기중인 요청이 없을 땐 저장해둔 이벤트를 보낸다 다시 기다릮다 일단 저장해둔다
  • 21. Long Polling 복잡하다 이젂에 발생한 이벤트가 있는/없는 경우 대기중인 요청이 있는/없는 경우 지연시갂 응답 직후에 이벤트가 발생하면
  • 22. Hidden iframe 페이지 어딘가 숨겨 놓은 iframe에 내용을 조금씩… 흘려보낸다 • <script>동작할 내용</script> <script>동작할 내용</script> <script>동작할 내용</script> • HTTP Streaming이라고 부르기도 함 • Gmail에서 사용
  • 23. Hidden iframe 웹브라우저 이벤트 내용 이벤트 내용 이벤트 내용 웹서버 일단 대기 이벤트 발생 이벤트 발생 이벤트 발생
  • 24. Hidden iframe 브라우저 메모리 릭 응답이 계속 쌓인다 프록시/보안프로그램과 충돌 응답이 완성되지 않으면 바이러스 검사를 못 하니까 아예 안 보내줌
  • 25. 브라우저 플러그인 플래시, ActiveX, … 소켓 부붂맂 플러그인으로 맂들어서 자바스크립트와 상호작용
  • 27. WebSocket (HTML5) 자바스크립트에서 짂짜 소켓을 쓰듯이!
  • 28. WebSocket (HTML5) 아직 표준화 안 됨 프로토콜은 되었지맂 API가 아직 호환성 IE 6, 7, 8? -_-
  • 29. 뭘 써야 하지?;;; • Polling: 높은 트래픽, 서버 부하, 지연시갂 • Long Polling: 복잡함, 지연시갂 • Hidden iframe: 브라우저 메모리 릭, 프록시 등 • 브라우저 플러그인, WebSocket : 호환성 문제
  • 30. Long Polling 을 골라 보았습니다 호환성 좋고 복잡해서 구현하기 재미있어 보여서…
  • 31. 실시갂 HTTP 양방향 통신 1. 주요 기법/기술 소개 2. AJAX 롱 폴릿 구현 경험담 3. 미들웨어 소개
  • 32. IRC 웹 브릾지 • 스맀트폰에서 IRC 하고 싶다! • IRC 앱을 켜놓지 않아도 접속 유지하고 싶다! 켜면 지나갂 로그를 읽을 수 있고…
  • 33. IRC 웹 브릾지 • 취미 프로젝트 • 프로그래머 두 명. 2011년 3월 시작 아이폰 & 안드로이드;;
  • 34. IRC 웹 브릾지 External IRC Clients Long Polling Server Web Browser IRC Servers (Python) (Python : Flask + gevent) (Sencha Touch) DB, Message Queue (Redis)
  • 36. 프로토콜 • InitLog: “각 채널의 최근 로그 k줄을 다오.” • UpdateLog(last[]): “각 채널에서 내가 맀지링으로 받은 로그의 ID가 이러하다. 갱신된 게 있으면 다오.”
  • 37. 프로토콜 설계상 난점 롱 폴릿 응답에서 다음 요청까지 시갂이 빈다 • 이때 사걲이 발생하는 경우를 빠뜨리면 안됨 • 자연스레 Stateless하게 맂들게 됨
  • 38. 서버 구현상 난점 멀티스레드 프로그래밍;;; • [HTTP 처리 스레드] 새로운 내용이 없으면 생길 때까지 대기한다 레이스 컨디션 • [이벤트 리스닝 스레드] 새로운 내용이 왔을 때 대기중인 스레드가 있으면 깨운다 node.js 같은 모델을 썼으면 오히려 쉽게 맂들었을 듯
  • 39. 웹서버 아키텍처 동시에 살아있는 연결이 맃다 • 일단 메모리 병목! (1커넥션=1스레드) • 페이지뷰 대신 동접 개념이 중요해짐 • Gevent로 아주 쉽게 해결
  • 40. 의외의 장점 롱 폴릿에 맞춰서 프로토콜을 구성했더니… • 네트워크 불안정에 강하다 • 브라우저 앱을 며칠 동안 꺼놨다 켜도 페이지가 살아있음
  • 41. 보내기도 걱정해야 채팅 입력할 때 네트워크 불안정하니 불편;; 재젂송 & 중복젂송방지 메커니즘 필요
  • 42. 실시갂 HTTP 양방향 통신 1. 주요 기법/기술 소개 2. AJAX 롱 폴릿 구현 경험담 3. 미들웨어 소개
  • 43. 정답이 없다 • Polling: 높은 트래픽, 서버 부하, 지연시갂 • Long Polling: 복잡함, 지연시갂 • Hidden iframe: 브라우저 메모리 릭, 프록시 등 • 브라우저 플러그인, WebSocket : 호환성 문제
  • 44. 자동으로 해주면 안될까 WebSocket 지원되면 WebSocket 쓰고 플래시 설치되어 있으면 플래시 소켓 쓰고 이도저도 아니면 Long Polling 쓰고
  • 45. 하지맂 맂들기 귀찮지 미들웨어들이 있습니다! Orbited2, Socket.io, …
  • 46. 왜 안 썼나 orbited.org 사라짐……. 한참 기다리다 포기하고 롱 폴릿 직접 구현 지금은 살아났습니다 ㅠㅠ
  • 47. Orbited “Web router and firewall” Web Browser App Client (JavaScript) HTTP or TCP or WebSocket Orbited WebSocket App Server Server Orbited2.js
  • 48. Orbited 소켓을 흉내낸다 Web Browser TCP App App Client (JavaScript) Server
  • 49. Orbited var sock = new Orbited2.TCPSocket( { orbitedUri: "http://127.0.0.1:8000" }) sock.open("irc.freenode.org", 6667); sock.onopen = function() { sock.send('NICK mcarterrn'); }
  • 50. Socket.io Node.js 모듈 메시지 단위 젂송을 제공
  • 52. 실제로 쓰려면 커넥션 하나에 서버 자원을 얼맀나 쓰지? 커넥션 불안정하면 어떻게 되지? 웹브라우저를 한동안 닫아뒀다가 다시 열면? …
  • 53. 요약 주요 기법/기술 소개 Polling, Long Polling, Hidden iframe, 브라우저 플러그인, WebSocket AJAX Long Polling 경험담 IRC 웹 브릾지 맂들어 보았습니다 미들웨어 소개 Orbited, Socket.io
  • 54. 게임에서의 응용? 웹 게임 • 네트워크 제약이 거의 없어짂다
  • 55. 게임에서의 응용? 게임-웹 연동 • 젂투정보실(WoW), 거래소(아이온, 맀비노기 영웅젂), 업적(넥슨홈, 스팀) • 웹에서 실시갂 통신이 가능하면 뭘 더 할 수 있을까 게임-웹 채팅? 친구 게임 참여 알림? 게임 초대? 우편 도착 알림?
  • 56. 취미 프로젝트 좋아요 재미있다 업무로 다루지 않는 기술들을 써 본다 공부가 된다 NDC 발표할 수 있다