SlideShare ist ein Scribd-Unternehmen logo
1 von 199
spring websocket
월간슬라이드 4월
부종민
Who am I?
자바, 스프링, jpa, 자바스크립트, vuejs, mysql
boojongmin@gmail.com
facebook.com/boojongmin1
github.com/boojongmin
rest api로 구현과 웹소켓으로 구현시 차이
User
Admin
User
Admin
User
Admin
시
작
User
Admin
QuestionController
AnswerController
시
작
시
작
User
Admin
시
작
User
Admin
시
작
User
Admin
웹소켓으로 한다면?
User
Admin
Message
Queue
PUB
SUB
Message
Queue
User
Admin PUB
SUB
Message
Queue
PUB
SUB
시
작
User
Admin
Message
Queue
PUB
SUBUser
Admin
시
작
Message
Queue
PUB
SUB
시
작
User
Admin
Message
Queue
PUB
SUBUser
Admin
시
작
Message
Queue
User
Admin
시
작
시
작
시
작
시
작
PUB
SUB
Message
Queue
PUB
SUBUser
Admin
polling과 push의 차이입니다.
polling push
그럼 웹소켓은?
'web' + 'socket'
web
그냥 웹!! 그냥 소켓!! client
socket
port 80, 443
프로토콜(http) ws
SSL(https) wss
client javscript socket api를 이용
웹소켓이란?
http는 tcp/ip 기반 비연결지향 프로토콜과 대비
websocket 프로토콜(RFC6455) - 연결지향(연결을 끊지 않음), 양방향통신(클라이언트 <->
서버)
거래소(주식, 암호화폐), 게임등 realtime이 보장되어야하는 상황에서 커넥션비용을 줄이고
불필요한 네트워크 비용을 감소시켜줌.
웹소켓 참조 링크
websocket을 이해하기위해
잠시 프론트 이야기를 하겠습니다.
handshake - http -> websocket 서버와 합의
client server
브라우저 지원현황
sockjs
websocket emulation
websocket과 같이 동작하기 위한
cross-browser javascript library
protocol
이제 백엔드 이야기를 해볼까요?
spring framework으로
websocket을 사용하는 방법.
SPRING
Servlet Reactive
Websocket
Sockjs STOMP
Websocket
SPRING
Servlet Reactive
Websocket
Sockjs STOMP
Websocket
entry point를 하나 만들고
client side에서 정해진 규칙으로 데이
터를 던지고
로직으로 분기해주면 편함.
{
"type": "BOARD.CREATE",
"data": {
"title": "hello world",
"content": "websocket"
}
}
client server
SPRING
Servlet Reactive
Websocket
Sockjs STOMP
Websocket
SPRING
Servlet Reactive
Websocket
Sockjs STOMP
Websocket
STOMP
Data link
Physical
Network
Presentation
Transport
Session
Application
Network access &
physical
Internet
Transport
Application
OSI 7 layer tcp/ip 4 layer
IP, IPvInternet
6
TCP, UDP, QUIC
optional security: SSL, TLS
HTTP, FTP, WebSocket, STOMP,
WebRTC
Data link
Physical
Network
Presentation
Transport
Session
Application
Network access &
physical
Internet
Transport - WebSocket
Application - STOMP
이런식으로 생각하면
좀 편함
websocket 위에
STOMP 프로토콜을
이용한다면?
websocket
websocket
프로토콜 설계
클라/서버 구현
websocket
프로토콜 설계
클라/서버 구현
security
websocket
프로토콜 설계
클라/서버 구현
라우팅
security
websocket
프로토콜 설계
클라/서버 구현
라우팅
security
아키텍처/스케일아웃
websocket
프로토콜 설계
클라/서버 구현
라우팅
API 설계
security
아키텍처/스케일아웃
websocket
프로토콜 설계
클라/서버 구현
라우팅
API 설계
security
에러처리
아키텍처/스케일아웃
websocket
프로토콜 설계
클라/서버 구현
라우팅
API 설계
security
에러처리
STOMP
아키텍처/스케일아웃
STOMP란? 링크
Simple 간단한
Text 텍스트
Oriented 기반
Message 메세지
Protocol 프로토콜
간단하고 오래된(마지막 버전인 1.2가 2012년 10월) 프로토콜,
프레임(Command + Header + Body) 단위로 구성
메세지큐의 동작을 프로토콜로 정의했다고 생각하면 편리함.
rabbitmq의 경우 plugin을 설치하면 사용 가능 (63613 port)
링크
(배경지식) 메세지큐(브로커) 개념
STOMP 프로토콜 동작 도식화
ServerClient
ServerClient
CONNECT
login: <id>
password: <password>
^@
ServerClient
CONNECTED
session: <session-id>
^@
ServerClient
SUBSCRIBE
destination: /queue/foo
ack: client
^@
ServerClient
SEND
destination: /queue/bar
hello world
^@
ServerClient
MESSAGE
destination: /queue/foo
message-id: <message-identifier>
hello world
^@
ServerClient
ERRORSEND
destination: /queue/bar
hello world
^@
ServerClient
ERROR
message: malformed package
recieved
The message:
----
MESSAGE
destined: /queue/foo
Hello world
----
error message
^@
ServerClient
UNSUBSCRIBE
destination: /queue/foo
^@
ServerClient
DISCONNECT
^@
transaction(BEGIN, COMMIT, ACK, ABORT), RECEIPT 있음.
자세한건 stomp 문서 참조.
transaction(BEGIN, COMMIT, ACK, ABORT), RECEIPT 있음.
자세한건 stomp 문서 참조.
데이터에 대해 중요한 비지니스 로직인 경우
트랜젝션을 사용하면 좋음.
특히 기존처럼 상태를 직접 변경하는 형태보다
EventSourcing을 이용하면 commit/rollback이 편
리해짐.(ex: BINLOG)
스프링이 websocket 위에
stomp 프로토콜을 구현하였고
이와함께 message broker와 spring
security를
그리고 spring mvc와 비슷한 개발 스타일을
사용할 수 있습니다.
client server
worker
stomp
stomp
stomp
메세지 전체 흐름
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination: /app/a
MESSAGE
destination:
/topic/a
/app
/topic
/topic
res-
ponse
req-
uest
websocket이 handshake
할 주소 설정
SEND
destination: /app/a
SEND
destination:
/topic/a
req-
uest
websocket이 handshake
할 주소 설정
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination: /app/a
MESSAGE
destination:
/topic/a
/app
/topic
/topic
res-
ponse
req-
uest
client-side
javascript
...
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination: /app/a
MESSAGE
destination:
/topic/a
/app
/topic
/topic
res-
ponse
req-
uest
1 : N 1 : 1
client-side
javascript
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/app/event
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/app/event
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/app/event
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/topic/message
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/topic/message
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/topic/message
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination:
/topic/a
MESSAGE
destination:
/user/queue/a
/app
/topic
/topic
res-
ponse
req-
uest
/topic/message
개념적인건 이정도로하고
나머지는 간단히 훑어보겠습니다.
security
Scaleout
메세지 흐름
SEND
destination: /app/a
SEND
destination:
/topic/a
SimpAnnotationMethod
MessageHandler
broker
SimpleBroker
MessageHandler
MESSAGE
destination: /app/a
MESSAGE
destination:
/topic/a
/app
/topic
/topic
res-
ponse
req-
uest
EXTERNAL
MESSAGE
BROKER
STOMP
TCP
"192.168.0.3"
browser
websocket
with stomp
persistence
layer
consumer
application
이런식으로 구성 가능
spring
websocket
server
MESSAGE
BROKER
browser
websocket
with stomp
persistence
layer
consumer
applicationconsumer
application
이런식으로 구성 가능
spring
websocket
server
spring
websocket
server
MESSAGE
BROKER
browser
websocket
with stomp
persistence
layer
consumer
applicationconsumer
applicationconsumer
application
이런식으로 구성 가능
spring
websocket
server
spring
websocket
server
spring
websocket
server
MESSAGE
BROKER
browser
websocket
with stomp
persistence
layer
consumer
applicationconsumer
applicationconsumer
application
이런식으로 구성 가능
spring
websocket
server
spring
websocket
server
consumer
application
MESSAGE
BROKER
메세지브로커를 사용
함으로써
자연스럽게 디커플링!
유연해짐
SPRING
Servlet Reactive
Websocket
Sockjs STOMP
Websocket
SPRING
Servlet Reactive
Websocket
Sockjs STOMP
Websocket
지원안함
websocket
웹소켓을 사용하는 서비스
웹소켓을 사용하는 서비스
웹소켓을 사용하는 서비스
웹소켓은 웹브라우저 전용 기술?
binary 데이터 전송
{
"name": "boojongmin",
"hello": "world",
"base64":"7JWI64WV7ZWY7IS47JqULg0KDQrquIDroZzrsowg7Zes7Iqk7LyA7Ja0IOyerO2ZnCDs
hpTro6jshZgg7JeF7LK07J24IOuEpOyYpO2Ome2KuOyXkOyEnCBYWFgg6rCc67Cc7J6Q66W8IO
yxhOyaqSDspJHsl5Ag7J6I7Iq164uI64ukLg0K"
}
ajax로 바이너리 데이터 전송시
보통 base64를 이용하여 인코딩.
보통 암호화하여 데이터 주고 받을때
경험
base64로 인코딩시
원본대비 약 30% 증가
socket api
rest api로 개발하는 것보다
웹소켓으로 개발하는게 불편하다?
프로젝트 구조
├── client
│ ├── node_modules
│ ├── public
│ └── src
├── server
│ ├── gradle
│ └── src
└── worker
│ ├── gradle
└── src
client server
worker
stomp
stomp
stomp
client server
worker
stomp
stomp
stomp
브라우저 - 서버 모두
stomp를 이용하여
pub/sub로 동작
client server
worker
stomp
stomp
stomp
fire and forgot
client server
worker
stomp
stomp
stomp
client server
worker
stomp
stomp
stomp
client server
worker
stomp
stomp
stomp
메세지큐를 기반으로
메세지를 주고받으므로
worker는 언어 독립적으로 구현 가능
간단히 코드로 보면
client
pub
sub
javascript, vuex
server
java, spring
pub
sub
sub
pub
server
server는 단순히 worker에게
이벤트를 전달만해주는 역할.
한번 만들어 두면 코드 추가가
없음.
java, spring
pub
sub
sub
pub
worker
kotlin
sub
pub
메세지의 흐름 - 클라이언트 요청
client
worker
DEPARTMENT.LIST
DEPARTMENT.LIST
DEPARTMENT.LIST
pub sub
pub
sub
client
worker
DEPARTMENT.LIST
DEPARTMENT.LIST
DEPARTMENT.LIST
sub pub
sub
pub
메세지의 흐름 - 서버의 응답
그리고 기존 ajax를 호출하는 방식과 비교해
보면
ajax
vuex
javascript, vuex
기존의 ajax 방식
ajax
vuex
javascript, vuex
기존의 ajax 방식
stomp를 이용한 vuejs
요청
응답
javascript, vuex
stomp를 이용한 vuejs
요청
응답
javascript, vuex
동일한 이벤트
명
서버는 프로젝트 시작시
tomcat을 띄우고 component들 scan하고 이 와 관련한 작업을
하면서
5초 이상걸리는 등 서버 리스타트할 때 가볍지는 않았다.
(특히 프로젝트 규모가 커질수록 더 길어짐)
하지만 worker는 그냥 큐에 연결하고 간단한 구조라
jar자체도 작고
기동 시간도 빠름.(1초 미만)
startup 속도가 빠르다는건 개발할때 생산성에 영향을 준다고 생각.
출처링크
제대로 rest api를 공부하기 쉽지않다.
나도 아직 모르겠다고 생각.
만들고 나면 누가 이건 restful하지 않
다고 트집잡음.
뭔가 아직 부족하다고 느낌.
rest api에 대해 클라이언트 입장도 들어보자
Pain Points in Mobile Networking: REST API Failure
rest api에 대해 클라이언트 입장도 들어보자
rest api에 대해 클라이언트 입장도 들어보자
웹소켓을 통해 해결할 수 있는 내용은 아니지만 클라이언트 개발자
가 restless란 단어에 대한 호감은 상당함.
websocket + stomp를
쓰면
restful api
요청/응답 관점에서
이벤트 기반
sub/pub으로 관점으로 바
꿀수 있다고 생각.
웹소켓은 커넥션을 유지하므로 비용이 클까?
배경지식
tcp handshake
서버클라이이언트
서버클라이이언트
SYN
서버클라이이언트
SYN
SYN / ACK
서버클라이이언트
SYN
SYN / ACK
ACK
서버클라이이언트
SYN
SYN / ACK
ACK
DATA
서버클라이이언트
SYN
SYN / ACK
ACK
DATA
ACK
서버클라이이언트
SYN
SYN / ACK
ACK
DATA
ACK
FIN
서버클라이이언트
SYN
SYN / ACK
ACK
DATA
ACK
FIN
ACK
서버클라이이언트
SYN
SYN / ACK
ACK
DATA
ACK
FIN
ACK
FIN
서버클라이이언트
SYN
SYN / ACK
ACK
DATA
ACK
FIN
ACK
FIN
ACK
커넥션을 유지하는 방식의 장점
‘hello’ echo
http과 websocket
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
hello
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
hello
hello
hello
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
hello
hello
hello
hello
hello
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
hello
hello
hello
hello
hello
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
hello 메세지를 받기 위해
매번 http 전문을 만들어서
반복적으로 서버에 전달해야함.
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
hello
hello
hello
hello
hello
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
맺은 커넥션으로
보낼 데이터만 전달하면됨
GET /text HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Hello
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: y7OAqGCGEjoPu6Ah1mY4X6i0inw=
hello
hello
hello
hello
hello
hello
hello
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
GET / HTTP/1.1
Host: www.http2demo.io
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://www.http2demo.io/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ko;q=0.8
Cookie: _ga=GA1.2.2099130577.1551581737; _gid=GA1.2.1138553140.1551581737
If-None-Match: W/"5aa91b6d-19b00"
hello
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Sun, 03 Mar 2019 03:14:33 GMT
ETag: W/"5aa91b6d-19b00"
Server: CDN77-Turbo
Transfer-Encoding: chunked
X-Age: 30549494
X-Cache: HIT
hello
웹소켓 대비 http 방식은 네트워크 비용이 큼
rest와 websocket 성능 비교 - Hello World echo참고링크
Blocking IO
NIO(Non-blocking IO)
마무리 정리..
기존의 것을 바꾸자라는 이야기가 아닙니다.
기술의 선택지를 넓히자는 이야기입니다.
감사합니다.
Q&A
질문 하시는
개발자님은..
웹소켓을 들이셔야합니다.

Weitere ähnliche Inhalte

Was ist angesagt?

SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기Lee Ji Eun
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
Spring security oauth2
Spring security oauth2Spring security oauth2
Spring security oauth2axykim00
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVCDzmitry Naskou
 
AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)Brian Swartzfager
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기GunHee Lee
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)Youngil Cho
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
Fault Tolerance 소프트웨어 패턴
Fault Tolerance 소프트웨어 패턴Fault Tolerance 소프트웨어 패턴
Fault Tolerance 소프트웨어 패턴IMQA
 
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 

Was ist angesagt? (20)

SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Spring security oauth2
Spring security oauth2Spring security oauth2
Spring security oauth2
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
Fault Tolerance 소프트웨어 패턴
Fault Tolerance 소프트웨어 패턴Fault Tolerance 소프트웨어 패턴
Fault Tolerance 소프트웨어 패턴
 
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
Redis
RedisRedis
Redis
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 

Ähnlich wie 201904 websocket

Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersViktor Gamov
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)True-Vision
 
Ruby as a glue language
Ruby as a glue languageRuby as a glue language
Ruby as a glue languagequakewang
 
Modern Web Application Development Workflow - web2day 2014
Modern Web Application Development Workflow - web2day 2014Modern Web Application Development Workflow - web2day 2014
Modern Web Application Development Workflow - web2day 2014Stéphane Bégaudeau
 
Introduction to nu soap
Introduction to nu soapIntroduction to nu soap
Introduction to nu soapvikash_pri14
 
Pushing the web — WebSockets
Pushing the web — WebSocketsPushing the web — WebSockets
Pushing the web — WebSocketsRoland M
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryTatsuhiko Miyagawa
 
Cloud Automation with Opscode Chef
Cloud Automation with Opscode ChefCloud Automation with Opscode Chef
Cloud Automation with Opscode ChefSri Ram
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmsom_nangia
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmwilburlo
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
Deep dive in container service discovery
Deep dive in container service discoveryDeep dive in container service discovery
Deep dive in container service discoveryDocker, Inc.
 
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and ScalaWriting highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and Scalajfarcand
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressJeroen van Dijk
 
Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Dana Luther
 
Converting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaConverting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaDana Luther
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversTatsuhiko Miyagawa
 

Ähnlich wie 201904 websocket (20)

Socket applications
Socket applicationsSocket applications
Socket applications
 
Load testing with Blitz
Load testing with BlitzLoad testing with Blitz
Load testing with Blitz
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)
 
Ruby as a glue language
Ruby as a glue languageRuby as a glue language
Ruby as a glue language
 
Modern Web Application Development Workflow - web2day 2014
Modern Web Application Development Workflow - web2day 2014Modern Web Application Development Workflow - web2day 2014
Modern Web Application Development Workflow - web2day 2014
 
Introduction to nu soap
Introduction to nu soapIntroduction to nu soap
Introduction to nu soap
 
Pushing the web — WebSockets
Pushing the web — WebSocketsPushing the web — WebSockets
Pushing the web — WebSockets
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Cloud Automation with Opscode Chef
Cloud Automation with Opscode ChefCloud Automation with Opscode Chef
Cloud Automation with Opscode Chef
 
Palestra VCR
Palestra VCRPalestra VCR
Palestra VCR
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Deep dive in container service discovery
Deep dive in container service discoveryDeep dive in container service discovery
Deep dive in container service discovery
 
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and ScalaWriting highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
 
Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]
 
Converting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaConverting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - Cascadia
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
 

Kürzlich hochgeladen

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 

Kürzlich hochgeladen (20)

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

201904 websocket

Hinweis der Redaktion

  1. https://www.engineersgarage.com/Articles/IOT-Architecture-Standards-Protocols
  2. https://www.engineersgarage.com/Articles/IOT-Architecture-Standards-Protocols
  3. https://www.cloudamqp.com/blog/2014-12-03-what-is-message-queuing.html
  4. https://slides.com/eungjun/rest
  5. http://blog.arungupta.me/rest-vs-websocket-comparison-benchmarks/