주제선정이유
사이드 프로젝트 CHIT을 개발하고 있습니다.
CHIT의 주요 핵심기능은 순번대기 기능인데요. 다들 티켓팅 해보셨나요? 티켓팅 화면에서 서버대기 화면 한번쯤 다들 보신적 있을텐데, 그거랑 비슷한 기능이라고 보시면 됩니다!
이 기능을 구현하기 위해 SSE(Server-Side-Events) 를 사용하고 있습니다.
간단히 말하자면 SSE는 서버로부터만 이벤트를 받는 단방향 통신입니다. 채팅과 달리 서버로부터 일방적으로 메시지를 받기만 합니다.
사용하는 기술인 SSE를 제대로 알고싶었고 겸사겸사 WebSocket에 대해서도 알아보려합니다. (부채질중)
1.✅ 개념알아보기
- SSE(Server-side-events) 란 무엇인가
- 보통 웹브라우저에선 웹이 request를 보내면 서버가 response를 보내는 방식이다.
- 하지만 SSE를 사용하면 최초의 연결을 제외하고는 서버는 언제든지 웹브라우저에게 데이터를 보낼 수 있다.
- 서버에서 일방적으로 데이터를 받는 단방향 통신이다. 브라우저는 서버로 데이터를 보낼 수 없다.
- SSE API는 EventSource 인터페이스를 사용한다.
- 웹소켓은 웹 API중 하나로 브라우저 <-> 서버사이에서 양방향 통신이 가능하다.
- 우리는 서버로 메세지를 보낼 수 있고 굳이 요청하지 않아도 응답을 받을 수도있다.
- 웹소켓 api는 두가지 웹소켓 연결을 할 수 있는 방법이 있는데. 1. WebSocket이고 2. WebSocketStream이다
- WebSocket은 BackPressure를 지원하지 않지만 WebSocketStream은 지원한다고 한다. WebSocket이란 무엇인가.
- backPressure : 데이터가 너무 빨리 도착해서 시스템이 과부화되지 않도록 조절하는 기술
- 어플리케이션이 아직 준비가 되지 않았는데 메세지가 너무 빠르게 도착하면,
디바이스의 메모리 버퍼가 가득차거나 cpu 사용량이 100%가 되어 제대로 응답을 받지 않을 수 있다. - 이럴때 사용하는게 backPressure기술로 reading/writing 속도를 규제하는 기술이다. 이 기술을 이용하면 스트림이 너무 많고 준비가 안됐을때 시그널을 보내 속도를 늦추게 한다.
- 어플리케이션이 아직 준비가 되지 않았는데 메세지가 너무 빠르게 도착하면,
- 공부하는 중에 차세대 네트워크 통신 webAPI도 알게되었다. WebTransportAPI인데 스트리밍이나 메타버스 등에 이용된다고 한다. 아직 표준 API는 아니지만 차세대 표준이 되어 웹소켓을 대체할 가능성이 높다고한다! 기대중!
2.✅ SSE(Server-Sent-Events) 와 WebSocket의 차이점
구분 | SSE(Server-Sent-Events) | 웹소켓 (WebSocket) |
방향 | 단방향 통신(서버만 보냄) | 양방향 통신 (서버-웹브라우저) |
프로토콜 | HTTP(http://, https://) | WS(ws//) ,WSS(wss://) |
주요 활용 예시 | 실시간 알림, 뉴스피드, 주식데이터, 라이브 스코어 | 실시간 채팅, 온라인게임 |
3. 이왕 이렇게 된 거 Socket에 대해서도 알아보자
- 소켓 이란, 네트워크를 통해 데이터를 주고받을 때 사용하는 가상의 문이다.
- 좀 더 전문적으로 소켓 컴퓨터 네크워크에서 데이터를 주고받기 위해 사용하는 endpoint이다.
- 소켓을 연결하려면 양쪽이 같은 방식(프로토콜)을 따라야 한다. (규칙이 같아야 소통이 됩니다)
- 주소(ip)와 포트(port)가, 통신 프로토콜(TCP/UDP), 전송하는 데이터 형식(XML, JSON)등이 맞아야한다.
어라? 그럼 웹소켓과 일반 소켓은 무슨 차이인거지?!
4. ✅ 웹소켓과 일반 소켓의 차이
구분 | 소켓 (TCP/UDP) | 웹소켓 (WebSocket) |
주로 사용되는 곳 | 네트워크 프로그래밍 (서버-클라이언트 통신) | 웹 브라우저와 서버 간 실시간 통신 |
통신 방식 | TCP/UDP 기반 | HTTP를 통해 연결 후, 양방향 TCP 통신 |
주요 활용 예시 | 게임 서버, 파일 전송, 데이터 스트리밍 | 실시간 채팅, 주식 데이터, 알림 시스템 |
웹 환경에서 브라우저가 웹소켓을 쉽게 사용할 수 있도록 표준화 되어있다.
일반 소켓은 웹브라우저에서 사용할 수 없지만, 웹소켓은 HTTP와 호환되면서 TCP처럼 동작하기때문에 웹 브라우저에서 실시간 기능이 필요하면 웹소켓을 쓰는게 좋다.
5. 마무리하는 말🪭
사용하는 기술을 대략적으로 알고 있었는데 정리하니까 확실히 도움이 된다. SSE와 WebSocket에 대해 더 정확히 이해하게 된것 같다. 공부하면서 생기는 꼬리질문을 따라가다 보니 소켓과 프로토콜에 대해서도 공부하게 됐다.
CS지식의 중요성을 다시한 번 느낀다! 기술부채가 사라지는 그 날까지! 🪭
- Reference
https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
Server-sent events - Web APIs | MDN
Traditionally, a web page has to send a request to the server to receive new data; that is, the page requests data from the server. With server-sent events, it's possible for a server to send new data to a web page at any time, by pushing messages to the w
developer.mozilla.org
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API
The WebSocket API (WebSockets) - Web APIs | MDN
The WebSocket API makes it possible to open a two-way interactive communication session between the user's browser and a server. With this API, you can send messages to a server and receive responses without having to poll the server for a reply.
developer.mozilla.org
https://helloworld-88.tistory.com/215
[기본] 소켓(SOCKET)통신 이란?
소켓통신 소켓(SOCKET)이란?소켓(Socket)은 프로세스가 드넓은 네트워크 세계로 데이터를 내보내거나 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데
helloworld-88.tistory.com
'Develog > Front' 카테고리의 다른 글
[꼬랑지랑] next.js 사이트 개선기 (2) 이커머스 상세페이지 더보기 구현 (1) | 2024.10.26 |
---|---|
[리액트 성능최적화] useCallback 과 useMemo의 차이와 React.memo (0) | 2024.08.17 |
실전으로 배우는 웹 성능 최적화 for React (2) | 2024.07.20 |
[꼬랑지랑] next.js 사이트 개선기 (1) (0) | 2024.07.13 |
[우아한-Tech 스터디] Framer-motion을 이용한 애니메이션으로 화려한 웹 페이지 만들기 - 2주차 - (1) | 2024.06.20 |