SlideShare a Scribd company logo
1 of 62
Download to read offline
HTML5/WebSocket으로
Pong 게임 만들기
iFunfactory
민영기
2018 iFunFactory Dev Day
Contents.
01 웹 게임의 과거와 현재
02 Pong
03 Pong 을 위한 네트워킹 기술
04 Pong 을 위한 클라이언트 기술
2018 iFunFactory Dev Day
웹 게임의 과거와 현재
01
2018 iFunFactory Dev Day
2018 iFunFactory Dev Day
옛날 옛적 웹 게임은…
서버 사이드 구현
• 서버 기반 렌더링
• 정적인 컨텐츠 위주
• 제한적인 상호작용
플러그인
OR
2018 iFunFactory Dev Day
출처: http://news.inews24.com/php/news_view.php?g_serial=1083844&g_menu=020500
출처: https://www.hungryapp.co.kr/news/news_view.php?bcode=news&catecode=010&pid=60179
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•HTTP
• 전이중(full-duplex) 통신 불가
• Server push 불가
•HTML/javascript
• Markup language의 한계
• DOM 조작의 한계
웹에서 멀티플레이 게임을?
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•브라우저에서 플레이 가능
•순수 웹 기술만 사용
•유저간 실시간 동기화 지원
•되도록 간단한 게임을 제작
백문이 불여일작(作)
2018 iFunFactory Dev Day
Pong
02
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•1972년 아타리에서 개발
•최초로 상업적으로 성공한 비디오 게임
•탁구와 비슷한 대전 게임
Pong
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
게임 화면
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•공이 자신의 뒤로 나가면 상대가 점수 획득
•블록을 조작, 공을 상대에게 보내야 함
•지정된 점수를 먼저 얻는 쪽이 승리
규칙
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•게임의 상태
• 게임 중/종료, 점수, etc…
• 느슨한 동기화 가능.
•블록의 위치
•공의 위치
동기화 대상 후보
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•블록의 위치
• 일정 주기마다 자신의 블록 위치 전송
•공의 위치
• 기본적으로 동기화하지 않음
• 방향 변경 이벤트만 동기화, 그 외는 물리엔진 이용
•블록과 공의 충돌
• 자신의 충돌 시 정보를 상대에 알림
동기화
2018 iFunFactory Dev Day
Pong 을 위한 네트워크 기술
03 토폴로지
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
네트워크 토폴로지
Browser Browser
P2P
Browser Browser
Sever
Client-Sever
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•모든 통신은 간접적 형태로 이루어짐
• href(링크), XmlHttpRequest(Ajax), …
• TCP 및 이하 레이어로 접근 불가
•타 브라우저로의 접근은 허용하지 않음
•Client-Server 모델 사용
• 선택지가 없음
브라우저상의 통신
2018 iFunFactory Dev Day
Pong 을 위한 네트워크 기술
03 서버 Push
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Req/Resp 가 아닌, Svr push 가 필요
•가능한 가볍고 빨라야 함
•브라우저에서 사용 가능해야 함
Pong 을 위한 네트워크 프로토콜
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•HTTP
• HTTP functions as a request–response protocol in the client–server
computing model
• server는 브라우저로부터의 요청 `응답` 만 가능
•스펙 상 Server push 가 불가능
웹에서의 Server Side Push
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•속도 향상을 목표로 한 신규 HTTP
• 다중 stream
• 헤더 압축
•스펙에 PUSH 가 있으나…
HTTP/2
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•서버가 원할 때 메세지를 보낼 수 없음
• 브라우저가 요청하지 않은 리소스 전송(O)
• 브라우저 요청 없이 메세지 전송(X)
•브라우저로부터 요청을 받았을 때
요청받지 않은 것도 보낼 수 있는 기능
HTTP/2 PUSH
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•PLUG-IN
• TCP socket 으로, 네이티브 어플리케이션처럼 통신
• 보안 문제등으로 사장되어 가고 있음
웹에서의 Server Side Push
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
Long Polling
브라우저 서버
1. Push 받기
위해 요청 전송
2. Push할 데이터가
있을 때까지
대기
3. 1의 응답으로
Push 메시지 전송
4. 다음 Push를
받기 위해
요청 발송
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•통신 빈도 증가
• 브라우저는 서버로 보낼 것이 없더라도
푸시를 받기 위해 항상 요청을 보내야 함
•통신 딜레이 증가
• 보낼 것이 있어도 브라우저로부터의 요청을 기다려야 함
•양방향 통신 불가
• 서버/브라우저가 보내는 채널을 별도로 유지해야 함
Long Polling
2018 iFunFactory Dev Day
Pong 을 위한 네트워크 기술
03 WebSocket & Socket.IO
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Web 상에서 full-duplex 통신을 지원하는 규약
•TCP 이용
•HTTP로 통신하지 않음
•TLS 를 이용한 암호화 지원
WebSocket
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
WebSocket Handshake
1. HTTP->WebSocket
업그레이드 요청
2. WebSocket 사용
/사용 불가 알림
브라우저 서버
3. Websocket 통신
HTTP
통신
Websocket
프로토콜
통신
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•TCP / Datagram 기반 프로토콜
•Text/Binary 모두 전송 가능
•각 메세지는프레임으로 나뉘어 전달
•각 프레임마다 헤더가 추가됨
• opcode, length, …
• 이론상 프레임의 최대 길이는 2^63 Byte
WebSocket Protocol
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
• 프레임 헤더 크기 외의 overhead 는 없음
• 전송할 데이터의 크기에 따라 헤더 크기가 달라짐
• 크게 신경쓰지 않아도 될 수준
Websocket Overhead
데이터 크기 헤더 크기
(Byte)(C->S)
헤더 크기
(Byte)(S->C)
<126 Byte 6 2
<64 KByte 8 4
<2^63 Byte 12 8
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•TLS 사용 시 메시지마다 TLS 레코드 생성
•비교적 메세지 사이즈가 작아도 tcp segement 생성
Websocket Overhead
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•생성 및 연결
• var sock = new WebSocket(‘ws://{url}’);
•전송
• sock.send(msg);
•이벤트 핸들러
• sock.onopen = function(evt) { … }
• sock.onmessage = function(evt) { … }
• sock.onclose = function(evt) { … }
• sock.onerror = function(evt) { … }
Websocket API
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•대부분의 브라우저가 지원
Websocket 지원 브라우저
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•웹상에서 실시간 통신을 지원하는 프레임워크
•다양한 언어로 구현체 존재
• Javascript, Java, C++ 등
•다양한 통신 수단 이용
• Weboscket, long-polling, iframe, …
Socket.IO
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•독자적인 프로토콜을 사용
•단순 Websocket 서버/클라와 호환 불가
•독자적인 url 형식 사용
Socket.IO
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•WebSocket 사용시에도 overhead 존재
• 별도의 프로토콜(=헤더) 존재
• 별도의 handshake 과정 존재
Socket.IO
2018 iFunFactory Dev Day
Socket.IO WebSocket
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•연결 끊김 시 재연결 지원
• 하지만 재전송은 지원하지 않음
•WebSocket 없이도 실시간 통신 가능
• 하지만 대부분의 브라우저가 websocket 지원
Socket.IO
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•스트리밍, 문서 협업(동시 편집 등) 기능 지원
• 게임에 필요한 것은 event 전파
•게임에 필수적인 추가기능은 없는 듯?
• 반면 overhead 는 존재
Socket.IO
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
PONG 네트워크 토폴로지
Browser Browser
Sever
WebSocket
WebSocketWebSocket
2018 iFunFactory Dev Day
Pong 을 위한 네트워크 기술
03 Server
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Websocket 을 지원할 것
•그 외는 다른 게임 서버 요구 사항과 같음
Pong 서버용 기술
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•대부분의 웹서버 기술에서 Websocket 지원
• 웹 이외의 기술에서도 지원하는 경우 많음
•지원하는 웹 서버
•Apache, IIS, Nginx….
•지원하는 서버 프레임워크
• Spring, PHP, flask 등의 웹 프레임워크
• IFunEngine, supersocket 등의 서버 기술 프레임워크
Pong 서버용 기술
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Python/Flask/Flask-sockets
•사용 편이성 고려
•HTTP 처럼 Websocket 사용 가능
Pong 서버
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
Pong 네트워크 토폴로지
Browser Browser
Sever(Python, flask)
WebSocket
WebSocket WebSocket
2018 iFunFactory Dev Day
Pong 을 위한 클라이언트 기술
04 HTML & HTML5
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Markup language
• 화면에 어떻게 표시될지는 브라우저 해석대로
•Layout 및 Layering 의 어려움
•Sound 등 멀티미디어 지원 미비
•클라이언트에 데이터 저장 불가
HTML
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•<canvas>
• 직접 ‘그릴’ 수 있는 영역
•<audio>
• mp3/ogg 등의 사운드 플레이 지원
•local storage
• key/value 쌍을 클라이언트쪽에 저장하는 기능
•WebWorker
• Background 작업 수행 가능
HTML5
2018 iFunFactory Dev Day
그러나
2018 iFunFactory Dev Day
지금이 어느 시대인데…
2018 iFunFactory Dev Day
Pong 을 위한 클라이언트 기술
04 HTML5 Game Engine
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Unity Webgl
• 모바일 지원 미비
• https://docs.unity3d.com/Manual/webgl-browsercompatibility.html
•Unreal html5
• 아직 실험중(experimental)인 기능
• https://docs.unrealengine.com/en-us/Platforms/HTML5/GettingStarted
HTML5 Game Engine
2018 iFunFactory Dev Day
HTML5 Game Engine
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•네트워크 기능은 거의 제공하지 않음
•통합 개발 환경 제공하는 엔진도 존재
• 백로 엔진
• https://egret.com/en/
• construct
• https://www.construct.net/kr
HTML5 Game Engine
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•Phaser
• 2D 게임 엔진
• 물리엔진, 카메라, scene 관리 등 cocos2d 와 유사한 기능 제공
• 문서화가 잘 되어 있고 기술자료 풍부
Pong 을 위한 게임 엔진
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
Browser
Browser
Sever(Python, flask)
WebSocketHTML5
Phaser
WebSocket
Pong 기술 스택
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
PONG 구조
Sever
(Python, flask)
Room
(Game)
Lobby
Browser
HTTP
WebScoket
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
Demo
https://github.com/iFunFactory/pong-webscoket
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•웹 기술만으로 멀티플레이 게임 동기화 구현 가능
•HTML5로 동적인 게임 제작 가능
•게임 개발 지원 툴도 발전 중
정리
2018iFunFactoryDevDay
2018 iFunFactory Dev Day
•보안
• 브라우저에서 구동하려면 소스 암호화 불가능
• 난독화 필요
• 중요한 로직은 서버에서 구현, 혹은 검증을 통해 공격 방어 필요
과제
Q&A
2018 iFunFactory Dev Day
2018 iFunFactory Dev Day
Thank You!
경기도 성남시 분당구 대왕판교로 660, 유스페이스1 B동 606호 아이펀팩토리
info@ifunfactory.com +82-70-4923-6566 www.ifunfactory.com

More Related Content

What's hot

[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효NAVER D2
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현NAVER Engineering
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework명신 김
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호Jiho Lee
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hostingiFunFactory Inc.
 
iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFunFactory Inc.
 
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용Jihyung Song
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개Hyoungjun Kim
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow석환 홍
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑NAVER D2
 
[113]apache zeppelin 이문수
[113]apache zeppelin 이문수[113]apache zeppelin 이문수
[113]apache zeppelin 이문수NAVER D2
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on KubernetesOpenStack Korea Community
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)knight1128
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Chanwoong Kim
 

What's hot (20)

[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
 
iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray)
 
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
 
[113]apache zeppelin 이문수
[113]apache zeppelin 이문수[113]apache zeppelin 이문수
[113]apache zeppelin 이문수
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅
 

Similar to [아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기

WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010Joone Hur
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER Engineering
 
어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1bingoori
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Channy Yun
 
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈Changhwan Yi
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)jeongseokoh
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표iFunFactory Inc.
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리Jay Park
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망Sang Seok Lim
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론Hankyo
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기Jay Park
 
웹개발자 김영환 기술경력서 & 자기소개서
웹개발자 김영환 기술경력서 & 자기소개서웹개발자 김영환 기술경력서 & 자기소개서
웹개발자 김영환 기술경력서 & 자기소개서영환 김
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
Hyperconnect pycon 2019
Hyperconnect pycon 2019Hyperconnect pycon 2019
Hyperconnect pycon 2019Jun Young Lee
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현iFunFactory Inc.
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017devCAT Studio, NEXON
 

Similar to [아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기 (20)

WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
 
What is web rtc
What is web rtcWhat is web rtc
What is web rtc
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)
 
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
웹개발자 김영환 기술경력서 & 자기소개서
웹개발자 김영환 기술경력서 & 자기소개서웹개발자 김영환 기술경력서 & 자기소개서
웹개발자 김영환 기술경력서 & 자기소개서
 
Datasnap web client
Datasnap web clientDatasnap web client
Datasnap web client
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
Hyperconnect pycon 2019
Hyperconnect pycon 2019Hyperconnect pycon 2019
Hyperconnect pycon 2019
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 

More from iFunFactory Inc.

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석iFunFactory Inc.
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP iFunFactory Inc.
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성iFunFactory Inc.
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기iFunFactory Inc.
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버iFunFactory Inc.
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기iFunFactory Inc.
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교iFunFactory Inc.
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉iFunFactory Inc.
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현iFunFactory Inc.
 
2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기iFunFactory Inc.
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기iFunFactory Inc.
 

More from iFunFactory Inc. (20)

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
 
2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기
 
iFun Deploy 소개
iFun Deploy 소개iFun Deploy 소개
iFun Deploy 소개
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 

[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기

  • 2. 2018 iFunFactory Dev Day Contents. 01 웹 게임의 과거와 현재 02 Pong 03 Pong 을 위한 네트워킹 기술 04 Pong 을 위한 클라이언트 기술
  • 3. 2018 iFunFactory Dev Day 웹 게임의 과거와 현재 01
  • 5. 2018 iFunFactory Dev Day 옛날 옛적 웹 게임은… 서버 사이드 구현 • 서버 기반 렌더링 • 정적인 컨텐츠 위주 • 제한적인 상호작용 플러그인 OR
  • 6. 2018 iFunFactory Dev Day 출처: http://news.inews24.com/php/news_view.php?g_serial=1083844&g_menu=020500 출처: https://www.hungryapp.co.kr/news/news_view.php?bcode=news&catecode=010&pid=60179
  • 7. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •HTTP • 전이중(full-duplex) 통신 불가 • Server push 불가 •HTML/javascript • Markup language의 한계 • DOM 조작의 한계 웹에서 멀티플레이 게임을?
  • 8. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •브라우저에서 플레이 가능 •순수 웹 기술만 사용 •유저간 실시간 동기화 지원 •되도록 간단한 게임을 제작 백문이 불여일작(作)
  • 9. 2018 iFunFactory Dev Day Pong 02
  • 11. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •1972년 아타리에서 개발 •최초로 상업적으로 성공한 비디오 게임 •탁구와 비슷한 대전 게임 Pong
  • 13. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •공이 자신의 뒤로 나가면 상대가 점수 획득 •블록을 조작, 공을 상대에게 보내야 함 •지정된 점수를 먼저 얻는 쪽이 승리 규칙
  • 14. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •게임의 상태 • 게임 중/종료, 점수, etc… • 느슨한 동기화 가능. •블록의 위치 •공의 위치 동기화 대상 후보
  • 15. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •블록의 위치 • 일정 주기마다 자신의 블록 위치 전송 •공의 위치 • 기본적으로 동기화하지 않음 • 방향 변경 이벤트만 동기화, 그 외는 물리엔진 이용 •블록과 공의 충돌 • 자신의 충돌 시 정보를 상대에 알림 동기화
  • 16. 2018 iFunFactory Dev Day Pong 을 위한 네트워크 기술 03 토폴로지
  • 17. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day 네트워크 토폴로지 Browser Browser P2P Browser Browser Sever Client-Sever
  • 18. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •모든 통신은 간접적 형태로 이루어짐 • href(링크), XmlHttpRequest(Ajax), … • TCP 및 이하 레이어로 접근 불가 •타 브라우저로의 접근은 허용하지 않음 •Client-Server 모델 사용 • 선택지가 없음 브라우저상의 통신
  • 19. 2018 iFunFactory Dev Day Pong 을 위한 네트워크 기술 03 서버 Push
  • 20. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Req/Resp 가 아닌, Svr push 가 필요 •가능한 가볍고 빨라야 함 •브라우저에서 사용 가능해야 함 Pong 을 위한 네트워크 프로토콜
  • 21. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •HTTP • HTTP functions as a request–response protocol in the client–server computing model • server는 브라우저로부터의 요청 `응답` 만 가능 •스펙 상 Server push 가 불가능 웹에서의 Server Side Push
  • 22. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •속도 향상을 목표로 한 신규 HTTP • 다중 stream • 헤더 압축 •스펙에 PUSH 가 있으나… HTTP/2
  • 23. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •서버가 원할 때 메세지를 보낼 수 없음 • 브라우저가 요청하지 않은 리소스 전송(O) • 브라우저 요청 없이 메세지 전송(X) •브라우저로부터 요청을 받았을 때 요청받지 않은 것도 보낼 수 있는 기능 HTTP/2 PUSH
  • 24. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •PLUG-IN • TCP socket 으로, 네이티브 어플리케이션처럼 통신 • 보안 문제등으로 사장되어 가고 있음 웹에서의 Server Side Push
  • 25. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day Long Polling 브라우저 서버 1. Push 받기 위해 요청 전송 2. Push할 데이터가 있을 때까지 대기 3. 1의 응답으로 Push 메시지 전송 4. 다음 Push를 받기 위해 요청 발송
  • 26. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •통신 빈도 증가 • 브라우저는 서버로 보낼 것이 없더라도 푸시를 받기 위해 항상 요청을 보내야 함 •통신 딜레이 증가 • 보낼 것이 있어도 브라우저로부터의 요청을 기다려야 함 •양방향 통신 불가 • 서버/브라우저가 보내는 채널을 별도로 유지해야 함 Long Polling
  • 27. 2018 iFunFactory Dev Day Pong 을 위한 네트워크 기술 03 WebSocket & Socket.IO
  • 28. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Web 상에서 full-duplex 통신을 지원하는 규약 •TCP 이용 •HTTP로 통신하지 않음 •TLS 를 이용한 암호화 지원 WebSocket
  • 29. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day WebSocket Handshake 1. HTTP->WebSocket 업그레이드 요청 2. WebSocket 사용 /사용 불가 알림 브라우저 서버 3. Websocket 통신 HTTP 통신 Websocket 프로토콜 통신
  • 30. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •TCP / Datagram 기반 프로토콜 •Text/Binary 모두 전송 가능 •각 메세지는프레임으로 나뉘어 전달 •각 프레임마다 헤더가 추가됨 • opcode, length, … • 이론상 프레임의 최대 길이는 2^63 Byte WebSocket Protocol
  • 31. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day • 프레임 헤더 크기 외의 overhead 는 없음 • 전송할 데이터의 크기에 따라 헤더 크기가 달라짐 • 크게 신경쓰지 않아도 될 수준 Websocket Overhead 데이터 크기 헤더 크기 (Byte)(C->S) 헤더 크기 (Byte)(S->C) <126 Byte 6 2 <64 KByte 8 4 <2^63 Byte 12 8
  • 32. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •TLS 사용 시 메시지마다 TLS 레코드 생성 •비교적 메세지 사이즈가 작아도 tcp segement 생성 Websocket Overhead
  • 33. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •생성 및 연결 • var sock = new WebSocket(‘ws://{url}’); •전송 • sock.send(msg); •이벤트 핸들러 • sock.onopen = function(evt) { … } • sock.onmessage = function(evt) { … } • sock.onclose = function(evt) { … } • sock.onerror = function(evt) { … } Websocket API
  • 34. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •대부분의 브라우저가 지원 Websocket 지원 브라우저
  • 35. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •웹상에서 실시간 통신을 지원하는 프레임워크 •다양한 언어로 구현체 존재 • Javascript, Java, C++ 등 •다양한 통신 수단 이용 • Weboscket, long-polling, iframe, … Socket.IO
  • 36. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •독자적인 프로토콜을 사용 •단순 Websocket 서버/클라와 호환 불가 •독자적인 url 형식 사용 Socket.IO
  • 37. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •WebSocket 사용시에도 overhead 존재 • 별도의 프로토콜(=헤더) 존재 • 별도의 handshake 과정 존재 Socket.IO
  • 38. 2018 iFunFactory Dev Day Socket.IO WebSocket
  • 39. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •연결 끊김 시 재연결 지원 • 하지만 재전송은 지원하지 않음 •WebSocket 없이도 실시간 통신 가능 • 하지만 대부분의 브라우저가 websocket 지원 Socket.IO
  • 40. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •스트리밍, 문서 협업(동시 편집 등) 기능 지원 • 게임에 필요한 것은 event 전파 •게임에 필수적인 추가기능은 없는 듯? • 반면 overhead 는 존재 Socket.IO
  • 41. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day PONG 네트워크 토폴로지 Browser Browser Sever WebSocket WebSocketWebSocket
  • 42. 2018 iFunFactory Dev Day Pong 을 위한 네트워크 기술 03 Server
  • 43. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Websocket 을 지원할 것 •그 외는 다른 게임 서버 요구 사항과 같음 Pong 서버용 기술
  • 44. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •대부분의 웹서버 기술에서 Websocket 지원 • 웹 이외의 기술에서도 지원하는 경우 많음 •지원하는 웹 서버 •Apache, IIS, Nginx…. •지원하는 서버 프레임워크 • Spring, PHP, flask 등의 웹 프레임워크 • IFunEngine, supersocket 등의 서버 기술 프레임워크 Pong 서버용 기술
  • 45. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Python/Flask/Flask-sockets •사용 편이성 고려 •HTTP 처럼 Websocket 사용 가능 Pong 서버
  • 46. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day Pong 네트워크 토폴로지 Browser Browser Sever(Python, flask) WebSocket WebSocket WebSocket
  • 47. 2018 iFunFactory Dev Day Pong 을 위한 클라이언트 기술 04 HTML & HTML5
  • 48. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Markup language • 화면에 어떻게 표시될지는 브라우저 해석대로 •Layout 및 Layering 의 어려움 •Sound 등 멀티미디어 지원 미비 •클라이언트에 데이터 저장 불가 HTML
  • 49. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •<canvas> • 직접 ‘그릴’ 수 있는 영역 •<audio> • mp3/ogg 등의 사운드 플레이 지원 •local storage • key/value 쌍을 클라이언트쪽에 저장하는 기능 •WebWorker • Background 작업 수행 가능 HTML5
  • 50. 2018 iFunFactory Dev Day 그러나
  • 51. 2018 iFunFactory Dev Day 지금이 어느 시대인데…
  • 52. 2018 iFunFactory Dev Day Pong 을 위한 클라이언트 기술 04 HTML5 Game Engine
  • 53. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Unity Webgl • 모바일 지원 미비 • https://docs.unity3d.com/Manual/webgl-browsercompatibility.html •Unreal html5 • 아직 실험중(experimental)인 기능 • https://docs.unrealengine.com/en-us/Platforms/HTML5/GettingStarted HTML5 Game Engine
  • 54. 2018 iFunFactory Dev Day HTML5 Game Engine
  • 55. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •네트워크 기능은 거의 제공하지 않음 •통합 개발 환경 제공하는 엔진도 존재 • 백로 엔진 • https://egret.com/en/ • construct • https://www.construct.net/kr HTML5 Game Engine
  • 56. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •Phaser • 2D 게임 엔진 • 물리엔진, 카메라, scene 관리 등 cocos2d 와 유사한 기능 제공 • 문서화가 잘 되어 있고 기술자료 풍부 Pong 을 위한 게임 엔진
  • 57. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day Browser Browser Sever(Python, flask) WebSocketHTML5 Phaser WebSocket Pong 기술 스택
  • 58. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day PONG 구조 Sever (Python, flask) Room (Game) Lobby Browser HTTP WebScoket
  • 59. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day Demo https://github.com/iFunFactory/pong-webscoket
  • 60. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •웹 기술만으로 멀티플레이 게임 동기화 구현 가능 •HTML5로 동적인 게임 제작 가능 •게임 개발 지원 툴도 발전 중 정리
  • 61. 2018iFunFactoryDevDay 2018 iFunFactory Dev Day •보안 • 브라우저에서 구동하려면 소스 암호화 불가능 • 난독화 필요 • 중요한 로직은 서버에서 구현, 혹은 검증을 통해 공격 방어 필요 과제
  • 62. Q&A 2018 iFunFactory Dev Day 2018 iFunFactory Dev Day Thank You! 경기도 성남시 분당구 대왕판교로 660, 유스페이스1 B동 606호 아이펀팩토리 info@ifunfactory.com +82-70-4923-6566 www.ifunfactory.com