728x90
Http와 웹소켓의 차이
- http
- 클라이언트가 서버에 요청을 하면 서버가 응답을 보내는 단방향 통신
- 비연결성(요청 - 응답 시에만 연결을 유지), 무상태성(서버는 클라이언트의 상태를 보존하지 않음) 특성을 가짐
- 웹소켓
- 클라이언트 - 서버 간 실시간 통신이 가능하도록 하는 양방향 통신 프로토콜
- 요청 - 응답 형태가 아니라 데이터가 변경될 때 마다 이벤트를 보내거나 받는다
소켓의 동작 방법
- HTTP로 접속요청 후 웹소켓 프로토콜로 변경 후 실시간 통신으로 이루어진다.
웹소켓 개념과 원리
개념정리 웹소켓 개념과 원리 웹소켓(WebSocket)의 개념 웹소켓이란? 웹소켓(WebSocket) 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜 일반 Socket통신과 달리
yuricoding.tistory.com
- polling
- 클라이언트가 일정 주기로 서버에게 필요한 데이터를 요청하는 방식
- 구현이 간단하지만 변경사항이 없어도 지속적으로 요청을 보내기 때문에 오버헤드 발생
- 일정 주기로 요청을 보내는 방식이기에, 다른 방법들에 비해 실시간성이 떨어진다.
- Long polling
- 클라이언트는 서버로 Http Request를 보냄
- 서버는 전달할 이벤트가 있다면 Response 전달 후 연결 종료
- 이벤트 발생이 빈번할 경우, 연결 및 해제에 자원낭비가 심해지므로 비효율적
- streaming
- Long polling과 같은 방식이지만, response 후에도 연결을 끊지 않는다
- 실시간성이 가장 뛰어나지만, 구현이 복잡하고 서버 리소스를 많이 사용할 수 있다.
실시간 네트워킹 하면서 양방향으로 통신이 가능한 다른 기술
- WebRTC: P2P 방식. 모든 사용자가 서버 없이 직접 연결할 수 있어야 한다
- MQTT: TCP/IP 기반의 메시징 프로토콜로서, 주로 IoT - 서버 간에 쓰인다
- Comet, SSE 등은 단방향 통신
실시간으로 소통하고 싶다면?
트센 ㄱㅈㅇㅇㅇ
velog.io
다른 실시간 통신 기술들도 많이 존재하는데 websocket을 기술스택으로 사용한 이유
- HTTP 기반의 프로토콜의 실시간 양방향 프로토콜이기에 채용했다.
웹소켓의 한계가 무엇이며 극복하기 위해 서브 프로토콜로 STOMP를 사용한 이유
- 웹소켓: 단순한 구조로 인해 메세지가 어떤 요청인지, 어떻게 처리해야 하는지를 알 수 없다.
- STOMP: websocket 위에서 동작하는 프로토콜로써, 클라이언트 - 서버 간 전송할 메세지 유형, 형식, 내용 등을 정의하는 메커니즘
- pub/sub 방식을 사용하여 메세지 브로커를 발행자/구독자로 구분하여 발행자의 메세지를 구독자에게 전달한다.
pub/sub 구조란 무엇인가
- 발행 - 구독의 의미로 소프트웨어 아키텍처 패턴 중 하나이다.
- 메시지 브로커를 통해 다수의 컴포넌트나 시스템 간 메시지를 주고받을 수 있게 해준다
- 메시지 브로커: pub(발행)으로 부터 받은 메시지를 모든 sub(구독)에게 전달한다.
- 확장이 용이하며 낮은 결합도를 유지할수 있고, 비동기적으로 동작하므로 실시간성이나 뫂은 처리량을 오규하는 시스템에 적합하다.
메시지 큐
- 메시지 큐(MQ; Message Queue) : 프로세스 간에 데이터를 교환할 때 사용되는 통신 방법 중 하나. MOM을 구현한 서비스를 MQ라고 함
- MOM(Message Oriented Middleware, 메세지 지향 미들웨어) : 비동기 메세지를 사용하는 프로그램 간 데이터 송수신을 의미한다.
인메모리 기반 메시지 브로커의 문제점 ⇒ Redis
- RAM은 비교적 메모리가 작기에 메모리 부족 문제가 발생할 수 있다.
- 인메모리는 휘발성이기에 영구적으로 저장할 수 없다.
웹소켓 사용시에 보안 관련한 요소 (인증 , 인가)
- stomp는 고유 ID값을 통해 구독 상태의 유저를 추적할 수 있다.
- 발행자가 채팅방 생성 시, chatingRoom UUID를 구독자에게 전달하여 1:1 통신이 가능하도록 하였다.
redis 이외의 외부 메시지 브로커 (Kafka, rabbitMq) 대신 redis를 사용한 이유
- redis는 인메모리 기능을 제공하기 때문에 kafka나 rabbitMQ에 비해 처리속도가 빠르다.
'CS' 카테고리의 다른 글
[Spring]Front Controller, Dispatcher Servlet (0) | 2023.11.16 |
---|---|
[mySQL] 면접 예상 질문 (0) | 2023.11.07 |
[JPA] N+1 (0) | 2023.10.30 |
[JPA] ORM, JPA (1) | 2023.10.30 |
[JPA] Propagation (0) | 2023.10.27 |