티스토리 뷰
본 포스팅은 JEUS의 Websocket 활용 가이드입니다.
웹 소켓은 서버와 클라이언트가 HTTP를 이용해 한 번 연결한 후에는 필요한 통신 모두를 그 연결상에서 웹 소켓 전용 프로토콜을 기반으로 수행할 수 있습니다. 접속 시간을 장시간 유지할 수 있고, HTTP와 달리 경량 프로토콜을 사용하기 때문에 통신 손실이 적습니다. 또한 하나의 연결로 모든 데이터 송수신이 가능하므로 동일한 서버에 연결한 다른 응용 프로그램에 의한 영향이 적다는 장점이 있습니다.
WebSocket은 다른 HTTP 요청과 마찬가지로 80번 포트를 통해 웹 서버에 연결합니다. HTTP 프로토콜의 버전은 1.1이지만 Upgrade 헤더를 사용하여 웹 서버에 요청합니다. 이때 클라이언트인 브라우저와 마찬가지로 웹 서버도 WebSocket 기능을 지원해야 합니다.
wss프로토콜은 데이터 보안을 위해서 SSL을 적용한 프로토콜 입니다. HTTPS와 같이 443 Port를 기본으로 사용합니다.
WebSocket HandShake 과정은 다음과 같습니다.
WebSocket HandShake는 클라이언트가 먼저 HandShake 요청을 보내고 이에 대한 응답을 서버가 클라이언트로 보내는 구조입니다.
Request Header 중 Sec-WebSocket-Key와 Response Header 중 Sec-WebSocket-Accept로 상대방을 인증하여 사용합니다.
WebSocket Protocol을 지원하기 위해 JEUS7에서는 Java EE6 스팩을 준수합니다.
JEUS WebSocket 컨테이너의 역할에 대해 살펴 보겠습니다.
클라이언트로부터 WebSocket Handshake 요청이 왔을 때 이에 매핑되는 Server Endpoint 개체를 연결시킵니다.
클라이언트와의 연결 후, WebSocket Session을 생성하고, Session 개체에 대한 라이프 사이클 관리합니다.
JEUS WebSocket 사용시 제약사항에 대해 알아보겠습니다.
jeus-web-dd.xml의 websocket 설정이 반드시 필요합니다.
Java API for WebSocket 표준에서 제공하는 Client API는 제공하지 않습니다. Client API는 반드시 Java SE 7을 필요로 하는데 JEUS 7은 Java EE 6 기반 제품으로 Java SE 6로 컴파일해서 제공하므로 Client API를 제공되지 않습니다. Client API에 해당하는 메소드를 호출하는 경우에는 java.lang.UnsupportedOperationException이 발생합니다.
하위 항목 |
설명 |
MaxWebSocket Connections |
reverse proxy로 WebSocket을 사용하는 경우 최대 WebSocket connection 수 입니다. |
WebSocket SessionTimeout |
reverse proxy로 WebSocket을 사용하는 경우 WebSocket connection에 대한 session timeout입니다. |
마지막으로 Websocker을 사용하는 Sample Application에 대해 살펴보고 마무리 하겠습니다.
먼저 Server Side의 소스 구현 방식입니다.
Client에서 전송되는 message를 처리하는 MessageHandler로 TextWebSocketHandler와 BinaryWebSocketHandler로 나뉩니다.
Text Message/Binary Message를 각각 처리하는데 사용됩니다.
Input Text Message에 ECHO:를 붙여주는 형태로 TextMessageHandler를 구성합니다.
2) Spring Configuration에 ConnectionEndpoint 설정를 합니다.
ConnectionEndpoint를 통해서 데이터를 보내고, 받는 작업을 할 수 있습니다.
ConnectionEndpoint를 구성하기 위해서 Spring은 @EnableWebSocket annotation과 WebSocketConfigurer interface를 제공하고 있습니다.
/echo를 ConnectionEndpoint로 만들어주고, Websocket을 /echo에 연결합니다.
3) DispatcherServletInitializer.java 파일을 작성합니다.
web.xml을 대신할 DispatcherWebApplicationIntializer으로 Servlet Configuration에서 만들어진 WebConfig.class를 반환합니다.
다음으로 Client Side의 소스 구현 방식입니다.
2) Websocket 연결 요청 시 서버에서 응답하여 연결이 설정되면 발생하도록 합니다.
3) 오류가 있을 때 예외 처리를 수행합니다.
4) 메시지가 수신되는 순간에 대한 구현이 필요합니다.
5) Websocket이 끊어질 경우에 대한 구현이 필요합니다.
6) Websocket Server로 Message를 전송하도록 구현이 필요합니다.
7) Websocket Server로 접속을 종료합니다.
위와 같이 구현이 완료되면 Web/WAS에 각각 구성된 Websocket 연동 설정으로 포워딩 되며 실시간 처리에 강화된 Websocket Application이 동작합니다.
오늘은 JEUS에서 Websocket을 어떻게 반영하고 사용하는지에 대해 알아봤습니다.
- Websocket은 JDK1.7이상에서 실시간 처리를 위해 나온 기술이며, ws 또는 wss protocol을 사용한다.
- Websocket을 사용하기 위해 샘플 코드를 작성해 본다.
고맙습니다.
'④ 미들웨어 > ⓙ JEUS' 카테고리의 다른 글
[Web Application Server] Thread State Notify 설정 가이드 (0) | 2018.06.07 |
---|---|
[Web Application Server] 상황별 로그 (0) | 2018.06.03 |
[JMS] Java Message Service(TOPIC) (0) | 2018.03.26 |
[Web Application Server] Java Message Service(JMS - QUEUE) (0) | 2018.03.26 |
[JEUS] log4jdbc 설정 가이드 (0) | 2018.03.25 |
- Total
- Today
- Yesterday
- Architecture
- 마이크로서비스 아키텍처
- OpenStack
- node.js
- 아키텍처
- k8s
- kubernetes
- 쿠버네티스
- JEUS7
- 마이크로서비스
- SA
- aws
- wildfly
- TA
- API Gateway
- aa
- openstack token issue
- 오픈스택
- Docker
- nodejs
- JBoss
- git
- SWA
- openstack tenant
- apache
- Da
- MSA
- jeus
- webtob
- JEUS6
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |