Weekly I Learned 9주차

2022. 11. 22. 01:41Weekly I Learned (WIL)

728x90
SMALL

[기간]

- 11월 14일 ~ 11월 19일

 

 

[Weekly I Learned ( 9주차)]

벌써 실전 프로젝트를 진행하지 2주차다.

다음 주가 드디어 중간발표 주간이기 때문에 만들고자하는 메인 기능들을 빨리 정리하고 구현할 필요가 있었다.

 

아무래도 메인기능은 게임 기능이다 보니 평범한 http 형식의 로직으로는 게임 주제에 적합하지 않아서 WebSocket 과 Stomp 를 활용해서 구현하고자 했다.

 

WebSocket 이란?

TCP 연결을 통해 클라이언트와 서버 간에 전이중 양방향 통신 채널을 설정하는 표준화된 방법을 제공한다. HTTP와 다른 TCP 프로토콜이지만 포트 80 및 443을 사용하고 기존 방화벽 규칙을 재사용할 수 있도록 HTTP를 통해 작동하도록 설계되었다고 한다.

 

WebSockets에는 일반적으로 초기 연결에 대한 URL이 하나만 있어서 모든 애플리케이션 메시지는 동일한 TCP 프로토콜에서 통신할 수 있다. 이는 완전히 다른 비동기식 이벤트 기반 메시징 아키텍처를 나타낸다.

 

즉, http 는 일일히 요청을 받아서 response를 받아야 하는 반면에 WebSocket 은 한번 연결이 되었다면 끊어지지 않는 이상 양방향 통신이 가능하다. (pingpong)

 

 

Stomp 란?

메세징 전송을 효율적으로 하기 위해 탄생한 프로토콜이고, 기본적으로 pub / sub 구조로 되어있어 메세지를 전송하고 메세지를 받아 처리하는 부분이 확실히 정해져 있기 때문에 개발자 입장에서 명확하게 인지하고 개발할 수 있는 이점이 있다. 한 줄로 정의하자면, STOMP 프로토콜은 WebSocket 위에서 동작하는 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의할 수 있는 프로토콜이다.

 

또한 STOMP를 이용하면 메세지의 헤더에 값을 줄 수 있어 헤더 값을 기반으로 통신 시 인증 처리를 구현하는 것도 가능하며 STOMP 스펙에 정의한 규칙만 잘 지키면 여러 언어 및 플랫폼 간 메세지를 상호 운영할 수 있다.

 

[주요 특징]

  • @Controller → @MessageMapping으로 연결한 후 브로커에다가 보내는데 브로커는 메모리도 가능하고 RabbitMQ, ActiveMq등도 사용이 가능하다.
  • spring은 브로커에 대한 tcp 연결을 유지하고 연결된 websocket client에게 메시지를 전달한다.
  • client는 메시지를 받고 또 메시지를 수신한다.
  • client에서 메시지를 보내면 @MessageMapping에서 받아서 처리한다.
  • 메시지를 받을 endpoint는 /endpoint/..., /endpoint/** 등을 지원한다.
  • 서버의 모든 메시지는 특정 클라이언트 구독에 대한 응답이어야 하며 서버 메시지의 subscription-id 헤더는 클라이언트 구독의 id 헤더와 동일해야한다.

 

[장점]

  • raw websocket보다 더 많은 프로그래밍 모델을 지원
  • 여러 브로커(카프카, 등등)을 사용가능
  • spring framework를 사용하면 사용가능
  • 메시지 포맷을 정할 필요가 없다.
  • 애플리케이션 로직은 여러 @Controller 인스턴스로 구성될 수 있으며 주어진 연결에 대해 단일 WebSocketHandler를 사용하여 원시 WebSocket 메시지를 처리하는 대신 STOMP 대상 헤더를 기반으로 메시지를 라우팅할 수 있다.

 

따라서 Stomp 의 특성을 활용하여 게임을 이용하고자 하는 유저들이 방을 입장했을 떄 특정 주소를 구독하고

해당 구독 주소에서 게임 api 들이 동작될떄마다 해당 기능에 관련된 메세지들을 주고받아 실시간으로 처리하려고 한다.

 

현재 구상한 게임기능은 게임방 입장, 게임방 나가기, 게임시작, 게임준비, 스포트라이트, 투표하기, 정답맞추기, 승패여부 결정 등등이 있으며, 이는 반드시 실시간으로 처리될 필요가 있다.

 

다만 걱정되는 것은 WebSocket 과 Stomp를 이용하여 게임 로직을 구성하는 것이 처음이기 떄문에 시간이 많이 지체되었던것 같다. 조바심은 나지만 완성도를 위해서라면 좀 더 신중하게 만들 필요가 있을 것 같다.

728x90
반응형
LIST

'Weekly I Learned (WIL)' 카테고리의 다른 글

Weekly I Learned 10주차  (0) 2022.11.27
Weekly I Learned 8주차  (0) 2022.11.15
Weekly I Learned 6주차  (0) 2022.10.30
Weekly I Learned 5주차  (0) 2022.10.23
Weekly I Learned 4주차  (0) 2022.10.17