목차

    개요

    게임동아리 멤버들과 주말에 내전을 즐기며 가끔 칼바람나락 내전을 즐길 때가 있었습니다.

    롤 게임에서 사용자 설정 방을 만들면 아쉬운 점이 칼바람나락의 주사위 기능이 없다는 점이었습니다.

    그래서 랜덤 팀 나누기 디스코드 봇을 만들던 때와 비슷하게 프로젝트로 개발하려고 생각했었는데요.

    한 웹 페이지에 10명의 인원이 상호작용이 가능하려면 웹소켓을 이용해야한다는 점을 알게되었습니다.

    이에 저는 웹소켓에 대해 공부해보고 사용해보려 합니다.

    아래의 Spring Documentation을 참고하여 진행하려고 합니다.

     

     

    WebSockets :: Spring Framework

    The WebSocket protocol, RFC 6455, provides a standardized way to establish a full-duplex, two-way communication channel between client and server over a single TCP connection. It is a different TCP protocol from HTTP but is designed to work over HTTP, usin

    docs.spring.io

     

     

    Getting Started | Using WebSocket to build an interactive web application

    In Spring’s approach to working with STOMP messaging, STOMP messages can be routed to @Controller classes. For example, the GreetingController (from src/main/java/com/example/messagingstompwebsocket/GreetingController.java) is mapped to handle messages t

    spring.io

     

    웹소켓이란

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

     

    WebSocket 상호 작용은 HTTP Upgrade 헤더를 사용하여 업그레이드하거나 WebSocket 프로토콜로 전환하는 HTTP 요청으로 시작합니다. 다음 예에서는 이러한 상호 작용을 보여줍니다.

     

    1. Upgrade 헤더입니다.

    2. Upgrade 연결입니다.

     

    일반적인 200 상태 코드 대신 WebSocket을 지원하는 서버는 다음과 유사한 출력을 반환합니다.

    1. 프로토콜 스위치

     

    성공적인 핸드셰이크 후에는 HTTP 업그레이 요청의 기반이 되는 TCP 소켓이 클라이언트와 서버 모두에 대해 계속 열려 메시지를 계속 보내고 받을 수 있습니다.

     

    WebSocket 서버가 웹 서버(예: nginx) 뒤에서 실행 중인 경우 WebSocket 업그레이드 요청을 WebSocket 서버로 전달하도록 구성해야 할 수 있습니다. 클라우드 환경에서 실행되는 경우에도 마찬가지로 WebSocket 지원과 관련된 클라우드 제공업체의 지침을 확인해야합니다.

     

    Upgrade 헤더란

    HTTP 업그레이드는 클라이언트가 서버와 통신하기 위해 웹소켓과 같은 다른 프로토콜로 업그레이드를 요청할 수 있는 프로세스입니다.

     

    reference: https://runebook.dev/ko/docs/http/headers/upgrade

     

    https://www.geeksforgeeks.org/what-is-web-socket-and-how-it-is-different-from-the-http/

     

    HTTP와 WebSocket의 차이

    웹소켓 연결 HTTP 연결
    WebSocket은 설정된 연결 채널을 재사용하여 클라이언트에서  서버로 또는 서버에서 클라이언트로 데이털르 보낼 수 있는 양방향 통신 프로토콜입니다. 연결은 클라이언트나 서버에 의해 종료될 때까지 유지됩니다.
    (ws:// 또는 wss:// 시작합니다.)
    HTTP 프로토콜은 연결 지향 전송 계층 프로토콜인 TCP 프로토콜 위에서 작동하는 단방향 프로토콜입니다. HTTP 연결이 닫히면 응답을 받은 후 HTTP 요청 방법을 사용하여 연결을 생성할 수 있습니다.
    (http:// 또는 https:// 로 시작합니다.)
    상태코드 101을 통해 WebSocket의 전환 프로토콜을 나타냅니다. 상태코드 200을 통해 연결이 완료되었음을 나타냅니다.

     

    WebSocket을 사용해야 하는 경우

    거래, 모니터링, 알림 서비스와 같은 실시간 애플리케이션의 경우 WebSocket을 사용하여 단일 통신 채널에서 데이커를 수신하면 좋다고 합니다.

     

    이렇듯 WebSocket은 웹페이지를 동적이고 대화형으로 만들 수 있습니다. 그러나 AJAX, HTTP Streaming 또는 Long Polling을 결합하면 간단하고 효과적인 솔루션을 제공할 수 있습니다.

    예를 들어 뉴스, 메일, 소셜 피드는 동적으로 업데이트되어야 하지만 몇 분마다 업데이트해도 괜찮습니다. 또한 메시지의 양이 상대적으로 적은 경우에도 포함됩니다.

     

    WebSocket은 낮은 대기 시간, 높은 빈도 및 높은 볼륨의 조합의 경우에 큰 힘을 발휘합니다.

     

     

    Reference

    https://www.geeksforgeeks.org/what-is-web-socket-and-how-it-is-different-from-the-http/