image origin: unsplash.com 웹 소켓에 대해 알아보자! - 이론 편실시간 알림, 실시간 채팅 등 실시간이라는 키워드가 들어가는 기능들을 위해서는 대부분 웹 소켓 기술이 필요하다. 이 글에서는 다음과 같은 주제를 다룬다.
웹 소켓이란?HTML5 표준 기술로, HTTP 환경에서 클라이언트와 서버 사이에 하나의 TCP 연결을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜이다. 여기서 전이중 통신이란, 일방적인 송신 또는 수신만이 가능한 단방향 통신과 달리 가정에서의 전화와 같이 양방향으로 송신과 수신이 가능한 것을 말한다. 양방향 통신이 아닌 단방향 통신의 예로는 텔레비전 방송, 라디오를 들 수 있는데, 데이터를 수신만 할 수 있고, TV나 라디오를 통해 데이터를 보낼 수 없다. 웹 소켓 기술이 없을 때는 지금은 웹 소켓의 등장으로 클라이언트와 서버간의 실시간 통신이 가능하게 되었다. 따라서 SNS, 멀티 플레이어 게임, 구글 공유 문서 등 실시간 웹 어플리케이션 구현을 위해 웹 소켓을 사용하고 있다. 웹 소켓의 탄생 배경초기 웹의 탄생 목적은 문서 전달과 하이퍼링크를 통한 문서 연결이었다. 웹을 위한 HTTP 프로토콜은 이러한 목적에 매우 부합하는 모델이다. 그러나 시대가 변하고 환경이 발전할 수록 웹에게 동적인 표현과 뛰어난 상호작용이 요구되었고 이로 인해 여러 새로운 기술이 탄생되었다. 그 중 실시간 양방향 통신을 위한 스펙이 바로 웹 소켓인 것이다. 웹 소켓의 동작 방식웹 소켓은 전이중 통신이므로, 연속적인 데이터 전송의 신뢰성을 보장하기 위해 Handshake 과정을 진행한다. 기존의 다른 TCP 기반의 프로토콜은 TCP layer에서의 Handshake를 통해 연결을 수립하는 반면, 웹 소켓은 HTTP 요청 기반으로 Handshake 과정을 거쳐 연결을 수립한다. 웹 소켓은 연결을 수립하기 위해 통상적인 상태 코드 200 대신, 웹 소켓 서버의 응답은 다음과 같다.
Handshake 과정을 통해 연결이 수립되면 응용 프로그램 계층 프로토콜이 HTTP에서 웹 소켓으로 업그레이드가 된다. 업그레이드가 되면 HTTP는 사용되지 않고, 웹 소켓 연결이 닫힐 때까지 두 끝 점에서 웹 소켓 프로토콜을 사용하여 데이터를 주고 받게 된다. 웹 소켓 연결은 주로 새로고침이나 창 닫기 등의 이벤트 발생 시 닫힌다. 웹 소켓 vs HTTP웹 소켓이 HTTP 요청으로 시작되며 HTTP에서 동작하지만, 두 프로토콜은 분명히 다르게 동작한다. 웹 소켓과 HTTP의 차이점은 다음과 같다.
간단한 예제웹 소켓 서버를 만드는 것은
이후, 구현한 웹 소켓 핸들러를 등록해주는 Config 클래스를 만들자.
2021년 5월부터 Postman은 웹 소켓 요청을 지원한다. Postman으로 웹 소켓을 연결해 메세지를 보내고, IntelliJ 콘솔에서도 확인해보자. 첫 화면에서 new 버튼을 클릭한다. WebSocket Request를 클릭한다. 웹 소켓 연결을 맺기 위해 위에서 등록했던 핸들러의 경로를 입력한다. 연결 성공 후 메시지를 보내면 다음과 같다. IntelliJ 콘솔에서는 다음과 같이 확인할 수 있다. 결론실시간 웹 어플리케이션을 만들기 위해 필요한 기술인 웹 소켓의 개념에 대해 알아보았다. 다음 글에서는 Spring Boot 환경에서 채팅 기능을 구현해볼 것이다. Referencehttps://docs.spring.io/spring-framework/docs/current/reference/html/web.html#websocket https://asfirstalways.tistory.com/85 https://m.mkexdev.net/98 |