CS

1. http 통신

  • 데이터를 대부분 text로 주고 받음
  • stateless 프로토콜: 서버가 클라이언트의 상태를 저장하지 않음 (데이터 1회 요청할 때마다 connect/close가 반복됨)
  • 반드시 DB(레디스 등의 메모리)를 거쳐 데이터를 주고 받음
  • 유저 데이터를 들고 있지 않음

2. socket 통신

  • 소켓: 네트워크 상에서 돌아가는 2개의 프로그램으로 C-S 간의 접속 점이다
  • 패킷이라는 형식화된 데이터 메모리 단위를 주고 받아 통신
  • 특정 port를 열어서 실시간으로 양방향 통신을 함 (onClose; onConnection함수로 특정 소켓 인덱스 번호가 들어오는 이벤트가 발생한다)
  • stateful 프로토콜: 서버가 클라이언트의 상태를 저장하고 있음 => C-S 측에서 임의로 연결 상태를 끊지 않는 한 서로 연결이 유지됨
  • 웹 서버와 다르게, 브로드캐스트가 아닌 디테일한 통신이 가능하다
  • 서버 자체에서 데이터를 저장하고 유지함
  • 그래서 실시간 통시 및 임시 데이터 저장이 필요한 곳에 사용한다

2-1. STOMP Simple Text Oriented Messaging Protocol

  • 채팅방이나 알림 기능을 만들 떄 등장하는 개념
  • WebSocket: 단지 양방향 통신 통로이기 보다, 메세지의 형식을 정해주지 않는데, STOMP는 통로 위에서 동작하는 메세지 전송 규약이다.
  • 역할: 발행/ 구독 모델을 사용해서 메시지 라우팅을 처리한다
  • 예: “사용자 A가 /sub/chat/room/1을 구독하면, 사용자 B가 /pub/chat/room/1로 보낸 메시지를 A가 받는다.”

2-2. 동작 원리

  • S: listen이라는 포트를 통해서 항상 열어둠
  • C: connect()를 통해서 연결 요청을 보냄
  • S: accept() 함수를 통해서 연결을 수락
  • C/S: send()/recv() 함수를 통해서 패킷을 주고 받으며 데이터 처리가 발생함 - DB와 통신함

3. 웹 서비스에서 양방향 통신을 할 수 있는 프로토콜?

  • WebRTC
  • Socket.io
  • web socket

4. Web Socket

  • C-S 간의 정보를 양방향으로 통신하기 위한 프로토콜
  • stateful protocol - TCP 단계에서 돌아간다고 느린 거 아님. 한번 Connection을 맺으면 일정 시간 동안 커넥션을 유지할 수 있음
  • 웹서버와 통신이 가능하다
  • WebSocket: C-S/ WebRTC: p2p방식

5. 메시지 브로커와 확장성 Redis Pub/Sub, Kafka

  • websocket는 stateful함. 서버 간에 메시지를 중계해 줄 Redis Pub/Sub나 RabbitMQ, Kafka 같은 외부 메시지 브로커가 필요함

6. SSE Server-Sent Events

  • 양방향 통신이 필요없는 경우도 많음 (ex. 주식 가격 실시간 업데이트, 스포츠 중계 점수, 알림)
  • 서버에서 클라이언트로만 데이터를 보내는 단방향 통신
  • WebSocket보다 가벼움 + HTTP 프로토콜을 그대로 사용함 + 재연결 처리가 더 쉬움

results matching ""

    No results matching ""