Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
[Backend Thoery] 실시간 통신
backend
backend_theory

[Backend Thoery] 실시간 통신

Jay Kim
Jay Kim 30 Dec 2023
[Backend Thoery] 웹 소켓 [Backend Thoery] 배치 처리

Table of Contents

  • 실시간 통신
  • Polling
  • Long Polling
  • WebSocket
  • SSE (Server-Sent-Event)
  • Use Cases
  • 참고

실시간 통신

  • 새로운 데이터 또는 변경된 데이터가 발생할 때마다 클라이언트의 요청 없이도 서버에서 데이터를 보내고 싶은 경우가 있다
  • ex. 주식 가격, 실시간 알림, 채팅 메세지 등
  • 실시간 통신을 구현하는 방법에는 대표적으로 Polling, WebSocket, SSE 방식이 있다

Polling

  • 간단하게, 클라이언트가 서버에게 주기적으로 요청을 보내 새로운 데이터를 받아오는 방식이다
  • 하지만, 실시간성을 위해 너무 자주 요청을 보내면 서버에 부하가 생기게 되고, 요청 간격이 길어지면 또 실시간성이 떨어진다는 단점이 있다

Long Polling

  • Polling과 비슷하게 클라이언트가 주기적으로 요청을 보낸다
  • 차이점은, 서버가 유효한 응답을 보낼 때 까지 클라이언트는 연결을 유지하고 대기한다
  • 클라이언트는 서버로 부터 응답을 받으면 다시 다음 응답을 위해 요청을 보낸다
  • (무지성으로 요청을 보내는 방식에서, 유효한 응답을 받은 경우에만 요청을 보내는 방식으로 발전됐다)

WebSocket

  • 웹소켓은 단방향이 아닌 양방향 통신 방식이다
  • 다른 방식들은 모두 응용 계층에서 HTTP 프로토콜을 사용하지만, 웹소켓은 그 자체로 하나의 프로토콜이며 WS 프로토콜이라 한다
  • 웹소켓의 전송 계층은 TCP이다

소켓(Socket)
  • 소켓은 응용 계층에서 프로세스간의 통신을 위한 엔드포인트를 제공하는 소프트웨어다
  • 프로세스는 같은 서버에 있을 수도 있고 서로 다른 서버에 있을 수도 있다
  • 클라이언트-서버는 서로 다른 서버의 프로세스간 통신이 된다
  • 유닉스에서의 IPC는 같은 서버의 프로세스간 통신이 된다
  • 소켓은 결국 어떤 종류의 통신이든 필요로 하는 가상의 네트워크 장비이다
  • SSH, FTP, HTTP, 웹소켓 통신과 같은 모든 응용 계층에서의 통신은 결국 소켓을 사용한다
  • 소켓 프로그래밍을 통해 HTTP와 같은 단방향 통신이 아닌 양방향 통신을 가능하게 하는 프로토콜을 직접 만들어 쓸 수도 있다(ex. 웹소켓)
  • 각 소켓은 IP주소와 Port번호로 이루어진 특정 주소를 가지고 있다

SSE (Server-Sent-Event)

  • 서버에서 발생(publish)한 이벤트를 클라이언트에서 구독(subscribe)하는 방식이다
  • 최초의 연결만 클라이언트의 요청에 의해 발생되고, 이 후에는 클라이언트의 요청을 통한 폴링(polling)방식이 아닌, 서버가 알아서 이벤트를 푸싱(pushing)하는 방식으로 통신이 이루어진다

Use Cases

  • 채팅 시스템처럼 데이터를 양방향으로 주고 받아야 하는 경우에는 웹소켓을 사용한다
  • 주식 가격처럼 데이터를 받기만 하고, 업데이트가 잦은 경우에는 SSE를 사용한다

참고

  • [Spring] Server-Sent Events(SSE), Amaranth
  • Server Sent Events, javascript.info
[Backend Thoery] 웹 소켓 [Backend Thoery] 배치 처리

You may also like

See all backend_theory
12 Apr 2024 [Backend Thoery] Datetime, Timestamp, Timezone
backend
backend_theory

[Backend Thoery] Datetime, Timestamp, Timezone

10 Apr 2024 [Backend Thoery] 의존성 주입(Dependency Injection)
backend
backend_theory

[Backend Thoery] 의존성 주입(Dependency Injection)

05 Apr 2024 [Backend Thoery] 대용량 트래픽
backend
backend_theory

[Backend Thoery] 대용량 트래픽

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.