SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
웹 브라우저 감옥에서
살아남기
심규민
엔트리 교육 연구소
contents
1. Entry 소개
2. jQuery, Angular JS 적용 실패 사례
3. 게임 디자인 패턴의 적용
4. 웹소켓으로 구현한 웹과 하드웨어의 연결
5. What’s Next?
1.
Entry 소개
1.1 엔트리 소개
1. 프로그래밍 입문자를 위한 프로그래밍 교육 서비스
2. 텍스트 코딩 대신 비주얼 프로그래밍
3. HTML5 로 제작된 웹 서비스
1.2 엔트리 시연
Entry 시연
(동영상)
1.3 엔트리 구성
Canvas
SVG
1.3 엔트리 구성
Interpreting
실시간 Interpreting
60fps
1.3 엔트리 구성
엔트리 구현 특이 사항
1. 비주얼 프로그래밍 인터페이스로 구현 난이도 증가.
2. Loop 기반 Interpreter. 초당 60회 업데이트로 클라이언트 연산량 높음.
3. 잦은 화면 업데이트, Redraw
2.
jQuery,
Angular JS
적용 실패 사례
2.1 jQuery, Angular JS
Exception
jQuery 나 Angular JS 같은 라이브러리도 쓰면 안될 곳이 있다!
2.1 jQuery
Selector
$(“#id .class”)
jQuery Selector.
jQuery Selector로 Dom 을 조작하는 경우가 많음.
Selector 사용시 jQuery 의 sizzle 라이브러리가 Dom 을 탐색하며 해당하는 Element를
찾게 됨.
2.1 jQuery
극한 상황 – Dom Element 수 증가
document.getElementsByTagName('*').length
1000~1300
Element
1300 ~ 7000
Element
2.1 jQuery
초당 몇 개의 Dom Element 를 찾아야 할까?
(Dom Element 1300 ~ 7000) * (60fps) * (5~20 object) * (1~10 block)
= 390,000 ~ 84,000,000 Dom / sec
∴ Dom 이 복잡하고 업데이트가 잦은 상황에서는 jQuery Selector 를 거의 사용할 수 없다.
2.1 jQuery
결론
$(“#id .class”)
jQuery Selector 로 Dom Element 를 가져오는 행위는 줄이는 것이 좋다.
Dom Element Object를 js 코드가 참조하고 있어야 한다.
2.2 Angular JS
$watch
$watch $apply $digest
Angular 에서는 2-way binding 으로 매우 편리하게 Dom 과 Data 를 연동할 수 있다.
$digest loop 에서는 $watch list 에 있는 모델 변경을 dirty-check 한다.
2.2 Angular JS
극한 상황 – 비대한 모델의 잦은 변화
(60fps) * (5~20 object) * (10 ~ 20 property per object) * (1~10 block)
= 3,000 ~ 240,000 check / sec
모델 변화가 잦고 많은 상황에서 Angular 페이지는 극도로 느려짐.
Angular 의 가장 큰 문제는 이 모든 모델 변화를 Dirty-checking 한다는 점.
또한 Dom 업데이트를 제어할 수 없어 일정 이상의 최적화가 불가능.
2.3 대안
편리함에는 대가가 따른다.
View Class 가 Dom Element 를 항상 property로 가지고 있도록 구현.
Model Object 를 구현하고, getter setter를 만들어 observer 구현.
최대 5~10배까지의 속도 개선을 얻을 수 있었다.
독자 개발
2.3 대안
Model
Observe
Model
Change
Notify View Update
Model
View
Model
View
Model
View
Model
View
Observe Notify
Change
2.3 대안
2.3 대안
2.3 대안
JS Setter & Getter Tip
Javascript getter & setter.
obj.a = 2;
위와 같은 데이터 대입에도 Setter 함수 발동.
Setter 를 통하지 않고 데이터를 수정하는 상황을
미연에 방지.
3.
게임 디자인 패턴을
이용한 웹개발
3.1 개발 난항
Entry 응용 미션
개발 기간 3주
30단계의 미션형 교육 콘텐츠
상호작용이 필요한 요소들
3.1 개발 난항
Issue
1. 새로운 기능을 추가할 때 마다 기존 코드 변경 필요.
2. 점점 더 복잡해져 가는 구조.
3. 출시 전까지 날이면 날마다 변하는 기획.
4. 다가오는 개발 기한.
어떻게 하면 효율적으로 대처할 수 있을까?
3.1 개발 난항
Silver bullet
가장 복잡한 서비스 중 하나인 MMORPG.
수많은 요소들이 존재하는 게임에서는 어떻게 구현하고 있을까?
복잡한 웹 앱에도 게임 디자인 패턴을 사용하면 도움이 되지 않을까?
3.2 Entity Component System
Design Pattern
각각의 Entity(객체) 는 Component(기능) 를 갖는다.
새로운 기능이 생기면 새로운 Component 를 개발하면 된다.
Entity 에 기능을 추가하고 싶다면 Component 를 추가하면 된다.
예 ) 마린은 그래픽, 체력, 공격, 소리, 이동 컴포넌트를 가지고 있다.
메딕은 그래픽, 체력, 치료, 소리, 이동 컴포넌트를 가지고 있다.
바위는 그래픽 컴포넌트를 가지고 있다.
3.2 Entity Component System
Model Controller View
Canvas Object Dom ElementInterpreter Physics Animator
Collision
Detector
Collision
Detector
Space
Ship
Sound
Space
Ship
Crash
Failure
Meteo
Unit
Obstacle
Popup
User
Entity
3.2 Entity Component System
Component
Update
Entity
Update
실행시 Entity 와
Entity 의 Component 를
Update 한다.
Entity 간의 데이터 교환은
메시지 통신을 통해 이루어진다.
3.2 Entity Component System
장점
1. 추가적인 기능 추가가 매우 쉬웠다.
기존 코드를 고려해야 할 필요가 적고 꼭 필요한 부분만 작성하면 된다.
2. 기능들이 명확하게 분리되어 코드가 명확해진다.
프로그램이 비대해져도 일정 이상 복잡해지지 않는다.
코드간의 연관성이 적어져 에러 발생 시 문제의 출처가 명확하다.
3.2 Entity Component System
단점
1. 초기에 들여야 하는 개발 공수가 존재한다.
Entity Component System 구현을 위한 공수가 필요하다.
2. 가장 최적화된 형태의 구현은 아니다.
Update loop 동작 시 모든 Entity 의 Update 를 실행함으로써 비효율이 존재한다.
4.
웹소켓으로 구현한
웹과 하드웨어의 연결
4.1 하드웨어 연결?
Issue
1. 하드웨어 교구를 통한 교육을 위해 하드웨어 장치와 Entry를 연동해야 했다.
2. 하드웨어 교구는 보통 Arduino 같은 마이크로 컴퓨터로, USB를 통한 Serial 통신으로
컴퓨터와 연결된다.
3. 웹 브라우저는 자바스크립트가 USB 같은 시스템 자원에 접근하는 것을 허용하지 않는다.
4. ????????
4.1 하드웨어 연결?
Aleternative
1. 각 OS별 Entry 네이티브 프로그램을 만들어서 하드웨어 장치를 지원?
개발 시간도 오래 걸리고 웹 서비스의 장점을 잃는다.
2. 웹 페이지에서 하드웨어 펌웨어를 코딩한 뒤 사용자가 업로드?
엔트리가 아니게 된다.
3. 브라우저 별 별도 플러그인?
ActiveX? NPAPI? Chrome Extension?
웹 표준이 아닌데다가 구현도 모두 별도로 해야 한다.
4.1 하드웨어 연결?
Hint
1. Javascript 코드가 컴퓨터의 localhost 에 접근할 수 있다.
2. 누군가 하드웨어 장치의 신호를 localhost 어딘가에 접속했을 때 보내준다면?
3. 하드웨어 장치의 신호를 미러링 하는 프로그램을 만들자!
4.2 Entry Hardware Solution
Outline
WebSocket USB Serial
Entry Web App Entry Local Server
(node-webkit)
HW Device
Http polling
(Byte Array)(JSON)
4.1 하드웨어 연결?
Entry Web App
1. localhost:23518 으로 Web Socket Connection 을 연다.
2. 연결 성공시 JSON 형식의 데이터를 주고 받는다.
Input: {
Analog1: 255,
Analog2: 124,
Digital1: true,
…
}
Output: {
portA: 255,
portB: 0,
…
}
4.1 하드웨어 연결?
HW Connect Server
1. 컴퓨터에 연결된 하드웨어 장치를 탐색하고, 연결을 체결한다.
2. 웹소켓 서버를 열고, 엔트리 웹앱의 요청을 받는다.
3. 웹소켓 커넥션이 열리면 하드웨어와 엔트리간의
데이터를 미러링한다.
4.1 하드웨어 연결?
HW Firmware
1. 컴퓨터와의 Serial 통신을 연다.
2. Serial 통신이 열리면 1초에 60번씩 센서값을 읽어 보낸다.
3. Serial 통신을 통해 출력값이 도착하면 하드웨어의 Actuator에
값을 준다.
4.3 엔트리 하드웨어 교구 시연
Entry 시연
(동영상)
4.4 local network 를 통한 플러그인
Result
1. 웹소켓을 통해 성공적으로 하드웨어 디바이스를 연결할 수 있었다.
2. 20ms 내외의 반응 속도로 하드웨어 장치와 통신할 수 있었고, Websocket 이나 Serial
에서 주목할만한 병목은 없었다.
3. 무설치형 연결 프로그램으로 교육 환경에서도 적용가능했다.
4. 로컬 네트워크를 통한 플러그인을 다른 사례에도 적용할 수 있을 것이다.
5.
What’s Next?
5.1 코드 분석
Code Analysis
1. 학생들이 작성한 코드를 분석하여 평가해주는 시스템 제작.
2. 학생들이 만드는 프로젝트의 유형을 분석하여 관심있는 교육 컨텐츠 추천.
3. 전체 서비스의 프로젝트들을 분석하여 교육적으로 의미있는 연구 결과 도출.
Analyze
5.2 실시간 LMS
Real-Time Lecture Management System
1. Google Docs 처럼 실시간으로 프로젝트를 동시 편집 가능하게 개발.
2. 수업 도중에 선생님이 자리를 뜨지 않고 학생들의 학습을 관찰, 도움 가능.
3. 코드 분석 시스템과 결합하여 학생들에게 좀 더 능동적인 교육 제공
Q&A
Thank You

Más contenido relacionado

La actualidad más candente

Python server-101
Python server-101Python server-101
Python server-101Huey Park
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기Huey Park
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
[214] data science with apache zeppelin
[214] data science with apache zeppelin[214] data science with apache zeppelin
[214] data science with apache zeppelinNAVER D2
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라NAVER D2
 
Toast cloud for beginners
Toast cloud for beginnersToast cloud for beginners
Toast cloud for beginnersTOAST_NHNent
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunFactory Inc.
 
[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overviewNAVER D2
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기Hyun-jik Bae
 
iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFunFactory Inc.
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법NAVER D2
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희NAVER D2
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은jieun kim
 

La actualidad más candente (20)

Python server-101
Python server-101Python server-101
Python server-101
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
[214] data science with apache zeppelin
[214] data science with apache zeppelin[214] data science with apache zeppelin
[214] data science with apache zeppelin
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
Toast cloud for beginners
Toast cloud for beginnersToast cloud for beginners
Toast cloud for beginners
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
 
Community Openstack 구축 사례
Community Openstack 구축 사례Community Openstack 구축 사례
Community Openstack 구축 사례
 
iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray)
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 

Destacado

[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝NAVER D2
 
[153] apache reef
[153] apache reef[153] apache reef
[153] apache reefNAVER D2
 
[142] how riot works
[142] how riot works[142] how riot works
[142] how riot worksNAVER D2
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기NAVER D2
 
[134] immersive sound vr
[134] immersive sound vr[134] immersive sound vr
[134] immersive sound vrNAVER D2
 
[113] lessons from realm
[113] lessons from realm[113] lessons from realm
[113] lessons from realmNAVER D2
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearchNAVER D2
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍NAVER D2
 
[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩NAVER D2
 
[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생NAVER D2
 
[114] DRC hubo technical review
[114] DRC hubo technical review[114] DRC hubo technical review
[114] DRC hubo technical reviewNAVER D2
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
[122] line on apple watch
[122] line on apple watch[122] line on apple watch
[122] line on apple watchNAVER D2
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나NAVER D2
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qaNAVER D2
 
[223] h base consistent secondary indexing
[223] h base consistent secondary indexing[223] h base consistent secondary indexing
[223] h base consistent secondary indexingNAVER D2
 
[231] the simplicity of cluster apps with circuit
[231] the simplicity of cluster apps with circuit[231] the simplicity of cluster apps with circuit
[231] the simplicity of cluster apps with circuitNAVER D2
 
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스NAVER D2
 
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기NAVER D2
 

Destacado (20)

[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
 
[153] apache reef
[153] apache reef[153] apache reef
[153] apache reef
 
[142] how riot works
[142] how riot works[142] how riot works
[142] how riot works
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기
 
[134] immersive sound vr
[134] immersive sound vr[134] immersive sound vr
[134] immersive sound vr
 
[113] lessons from realm
[113] lessons from realm[113] lessons from realm
[113] lessons from realm
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍
 
[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩
 
[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생
 
[114] DRC hubo technical review
[114] DRC hubo technical review[114] DRC hubo technical review
[114] DRC hubo technical review
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
[122] line on apple watch
[122] line on apple watch[122] line on apple watch
[122] line on apple watch
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qa
 
[223] h base consistent secondary indexing
[223] h base consistent secondary indexing[223] h base consistent secondary indexing
[223] h base consistent secondary indexing
 
[231] the simplicity of cluster apps with circuit
[231] the simplicity of cluster apps with circuit[231] the simplicity of cluster apps with circuit
[231] the simplicity of cluster apps with circuit
 
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
 
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
 

Similar a [152] 웹브라우저 감옥에서 살아남기

Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Bansook Nam
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016Jongwon Kim
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기IMQA
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfJongwon 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
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCore.Today
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Kris Jeong
 
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
 
[2007 CodeEngn Conference 01] amesianx - Art of Hooking
[2007 CodeEngn Conference 01] amesianx - Art of Hooking[2007 CodeEngn Conference 01] amesianx - Art of Hooking
[2007 CodeEngn Conference 01] amesianx - Art of HookingGangSeok Lee
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개Sunghyouk Bae
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for AppspressoKTH, 케이티하이텔
 

Similar a [152] 웹브라우저 감옥에서 살아남기 (20)

Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
 
[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...
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
Codex project
Codex projectCodex project
Codex project
 
Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신
 
[2007 CodeEngn Conference 01] amesianx - Art of Hooking
[2007 CodeEngn Conference 01] amesianx - Art of Hooking[2007 CodeEngn Conference 01] amesianx - Art of Hooking
[2007 CodeEngn Conference 01] amesianx - Art of Hooking
 
deview2014
deview2014deview2014
deview2014
 
2015 oce specification
2015 oce specification2015 oce specification
2015 oce specification
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 

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인가?
 

[152] 웹브라우저 감옥에서 살아남기

  • 2. contents 1. Entry 소개 2. jQuery, Angular JS 적용 실패 사례 3. 게임 디자인 패턴의 적용 4. 웹소켓으로 구현한 웹과 하드웨어의 연결 5. What’s Next?
  • 4. 1.1 엔트리 소개 1. 프로그래밍 입문자를 위한 프로그래밍 교육 서비스 2. 텍스트 코딩 대신 비주얼 프로그래밍 3. HTML5 로 제작된 웹 서비스
  • 5. 1.2 엔트리 시연 Entry 시연 (동영상)
  • 8. 1.3 엔트리 구성 엔트리 구현 특이 사항 1. 비주얼 프로그래밍 인터페이스로 구현 난이도 증가. 2. Loop 기반 Interpreter. 초당 60회 업데이트로 클라이언트 연산량 높음. 3. 잦은 화면 업데이트, Redraw
  • 10. 2.1 jQuery, Angular JS Exception jQuery 나 Angular JS 같은 라이브러리도 쓰면 안될 곳이 있다!
  • 11. 2.1 jQuery Selector $(“#id .class”) jQuery Selector. jQuery Selector로 Dom 을 조작하는 경우가 많음. Selector 사용시 jQuery 의 sizzle 라이브러리가 Dom 을 탐색하며 해당하는 Element를 찾게 됨.
  • 12. 2.1 jQuery 극한 상황 – Dom Element 수 증가 document.getElementsByTagName('*').length 1000~1300 Element 1300 ~ 7000 Element
  • 13. 2.1 jQuery 초당 몇 개의 Dom Element 를 찾아야 할까? (Dom Element 1300 ~ 7000) * (60fps) * (5~20 object) * (1~10 block) = 390,000 ~ 84,000,000 Dom / sec ∴ Dom 이 복잡하고 업데이트가 잦은 상황에서는 jQuery Selector 를 거의 사용할 수 없다.
  • 14. 2.1 jQuery 결론 $(“#id .class”) jQuery Selector 로 Dom Element 를 가져오는 행위는 줄이는 것이 좋다. Dom Element Object를 js 코드가 참조하고 있어야 한다.
  • 15. 2.2 Angular JS $watch $watch $apply $digest Angular 에서는 2-way binding 으로 매우 편리하게 Dom 과 Data 를 연동할 수 있다. $digest loop 에서는 $watch list 에 있는 모델 변경을 dirty-check 한다.
  • 16. 2.2 Angular JS 극한 상황 – 비대한 모델의 잦은 변화 (60fps) * (5~20 object) * (10 ~ 20 property per object) * (1~10 block) = 3,000 ~ 240,000 check / sec 모델 변화가 잦고 많은 상황에서 Angular 페이지는 극도로 느려짐. Angular 의 가장 큰 문제는 이 모든 모델 변화를 Dirty-checking 한다는 점. 또한 Dom 업데이트를 제어할 수 없어 일정 이상의 최적화가 불가능.
  • 17. 2.3 대안 편리함에는 대가가 따른다. View Class 가 Dom Element 를 항상 property로 가지고 있도록 구현. Model Object 를 구현하고, getter setter를 만들어 observer 구현. 최대 5~10배까지의 속도 개선을 얻을 수 있었다. 독자 개발
  • 18. 2.3 대안 Model Observe Model Change Notify View Update Model View Model View Model View Model View Observe Notify Change
  • 21. 2.3 대안 JS Setter & Getter Tip Javascript getter & setter. obj.a = 2; 위와 같은 데이터 대입에도 Setter 함수 발동. Setter 를 통하지 않고 데이터를 수정하는 상황을 미연에 방지.
  • 23. 3.1 개발 난항 Entry 응용 미션 개발 기간 3주 30단계의 미션형 교육 콘텐츠 상호작용이 필요한 요소들
  • 24. 3.1 개발 난항 Issue 1. 새로운 기능을 추가할 때 마다 기존 코드 변경 필요. 2. 점점 더 복잡해져 가는 구조. 3. 출시 전까지 날이면 날마다 변하는 기획. 4. 다가오는 개발 기한. 어떻게 하면 효율적으로 대처할 수 있을까?
  • 25. 3.1 개발 난항 Silver bullet 가장 복잡한 서비스 중 하나인 MMORPG. 수많은 요소들이 존재하는 게임에서는 어떻게 구현하고 있을까? 복잡한 웹 앱에도 게임 디자인 패턴을 사용하면 도움이 되지 않을까?
  • 26. 3.2 Entity Component System Design Pattern 각각의 Entity(객체) 는 Component(기능) 를 갖는다. 새로운 기능이 생기면 새로운 Component 를 개발하면 된다. Entity 에 기능을 추가하고 싶다면 Component 를 추가하면 된다. 예 ) 마린은 그래픽, 체력, 공격, 소리, 이동 컴포넌트를 가지고 있다. 메딕은 그래픽, 체력, 치료, 소리, 이동 컴포넌트를 가지고 있다. 바위는 그래픽 컴포넌트를 가지고 있다.
  • 27. 3.2 Entity Component System Model Controller View Canvas Object Dom ElementInterpreter Physics Animator Collision Detector Collision Detector Space Ship Sound Space Ship Crash Failure Meteo Unit Obstacle Popup User Entity
  • 28. 3.2 Entity Component System Component Update Entity Update 실행시 Entity 와 Entity 의 Component 를 Update 한다. Entity 간의 데이터 교환은 메시지 통신을 통해 이루어진다.
  • 29. 3.2 Entity Component System 장점 1. 추가적인 기능 추가가 매우 쉬웠다. 기존 코드를 고려해야 할 필요가 적고 꼭 필요한 부분만 작성하면 된다. 2. 기능들이 명확하게 분리되어 코드가 명확해진다. 프로그램이 비대해져도 일정 이상 복잡해지지 않는다. 코드간의 연관성이 적어져 에러 발생 시 문제의 출처가 명확하다.
  • 30. 3.2 Entity Component System 단점 1. 초기에 들여야 하는 개발 공수가 존재한다. Entity Component System 구현을 위한 공수가 필요하다. 2. 가장 최적화된 형태의 구현은 아니다. Update loop 동작 시 모든 Entity 의 Update 를 실행함으로써 비효율이 존재한다.
  • 32. 4.1 하드웨어 연결? Issue 1. 하드웨어 교구를 통한 교육을 위해 하드웨어 장치와 Entry를 연동해야 했다. 2. 하드웨어 교구는 보통 Arduino 같은 마이크로 컴퓨터로, USB를 통한 Serial 통신으로 컴퓨터와 연결된다. 3. 웹 브라우저는 자바스크립트가 USB 같은 시스템 자원에 접근하는 것을 허용하지 않는다. 4. ????????
  • 33. 4.1 하드웨어 연결? Aleternative 1. 각 OS별 Entry 네이티브 프로그램을 만들어서 하드웨어 장치를 지원? 개발 시간도 오래 걸리고 웹 서비스의 장점을 잃는다. 2. 웹 페이지에서 하드웨어 펌웨어를 코딩한 뒤 사용자가 업로드? 엔트리가 아니게 된다. 3. 브라우저 별 별도 플러그인? ActiveX? NPAPI? Chrome Extension? 웹 표준이 아닌데다가 구현도 모두 별도로 해야 한다.
  • 34. 4.1 하드웨어 연결? Hint 1. Javascript 코드가 컴퓨터의 localhost 에 접근할 수 있다. 2. 누군가 하드웨어 장치의 신호를 localhost 어딘가에 접속했을 때 보내준다면? 3. 하드웨어 장치의 신호를 미러링 하는 프로그램을 만들자!
  • 35. 4.2 Entry Hardware Solution Outline WebSocket USB Serial Entry Web App Entry Local Server (node-webkit) HW Device Http polling (Byte Array)(JSON)
  • 36. 4.1 하드웨어 연결? Entry Web App 1. localhost:23518 으로 Web Socket Connection 을 연다. 2. 연결 성공시 JSON 형식의 데이터를 주고 받는다. Input: { Analog1: 255, Analog2: 124, Digital1: true, … } Output: { portA: 255, portB: 0, … }
  • 37. 4.1 하드웨어 연결? HW Connect Server 1. 컴퓨터에 연결된 하드웨어 장치를 탐색하고, 연결을 체결한다. 2. 웹소켓 서버를 열고, 엔트리 웹앱의 요청을 받는다. 3. 웹소켓 커넥션이 열리면 하드웨어와 엔트리간의 데이터를 미러링한다.
  • 38. 4.1 하드웨어 연결? HW Firmware 1. 컴퓨터와의 Serial 통신을 연다. 2. Serial 통신이 열리면 1초에 60번씩 센서값을 읽어 보낸다. 3. Serial 통신을 통해 출력값이 도착하면 하드웨어의 Actuator에 값을 준다.
  • 39. 4.3 엔트리 하드웨어 교구 시연 Entry 시연 (동영상)
  • 40. 4.4 local network 를 통한 플러그인 Result 1. 웹소켓을 통해 성공적으로 하드웨어 디바이스를 연결할 수 있었다. 2. 20ms 내외의 반응 속도로 하드웨어 장치와 통신할 수 있었고, Websocket 이나 Serial 에서 주목할만한 병목은 없었다. 3. 무설치형 연결 프로그램으로 교육 환경에서도 적용가능했다. 4. 로컬 네트워크를 통한 플러그인을 다른 사례에도 적용할 수 있을 것이다.
  • 42. 5.1 코드 분석 Code Analysis 1. 학생들이 작성한 코드를 분석하여 평가해주는 시스템 제작. 2. 학생들이 만드는 프로젝트의 유형을 분석하여 관심있는 교육 컨텐츠 추천. 3. 전체 서비스의 프로젝트들을 분석하여 교육적으로 의미있는 연구 결과 도출. Analyze
  • 43. 5.2 실시간 LMS Real-Time Lecture Management System 1. Google Docs 처럼 실시간으로 프로젝트를 동시 편집 가능하게 개발. 2. 수업 도중에 선생님이 자리를 뜨지 않고 학생들의 학습을 관찰, 도움 가능. 3. 코드 분석 시스템과 결합하여 학생들에게 좀 더 능동적인 교육 제공
  • 44. Q&A