채팅 기능을 위해 필요한 개념

서재환·2023년 1월 31일
0

채팅

목록 보기
1/5

목표

  • 채팅 방에서 참여자 간 메세지를 전달하는 기능 구현 목표로 한다.
  • 쌓이는 큐를 따로 저장한다.
  • Index DB를 걷어낸다.

필요 개념

소켓

정의

소켓은 엔드포인트다. 엔드포인트 개념 안에는 통신한다는 전제가 있습니다. 네트워크 상에서 통신하는 단말기를 일컫거나 API 관련해서 해당 API에 해당 하는 URL을 일컫기도 합니다. 단말기와 URL이 네트워크 상에서 데이터를 주고 받기 위한 연결부 역할(인터페이스)을 수행하기 때문이다.

소켓의 역할

전기 제품을 콘센트에 연결하여 사용하는 것처럼 클라이언트와 서버가 서로 통신하기 위해서 소켓을 네트워크에 연결합니다. 즉 통신을 위한 연결부 역할을 하는 것입니다.

소켓의 형식

전기 제품을 사용하기 위해 220V 110V 단자가 있는 것처럼 소켓도 OSI7 계층 내 TCP/IP 프로토콜에 맞게 설계되어 사용됩니다. 소켓 통신에는 TCP/IP를 웹소켓에는 TCP/IP 기반 위 HTTP 프로토콜을 사용합니다.

소켓 통신의 구현

소켓(Socket)으로 네트워크 통신 기능을 구현하기 위해서는, 소켓을 만드는 것과, 만들어진 소켓을 통해 데이터를 주고 받는 절차에 대한 이해가 필요하고, 운영체제 및 프로그래밍 언어에 종속적으로 제공되는 소켓 API 사용법을 숙지해야 합니다.

소켓 통신의 과정

소켓 참고 글

웹소켓

웹소켓과 소켓의 차이

웹소켓은 통신 할 때 TCP/IP기반 위 HTTP 프로토콜을 사용하고 소켓은 TCP/IP 프로토콜을 사용한다. TCP/IP 프로토콜은 기기와 운영체제 종류 상관없이 항상 같은 프로토콜을 제공한다.

웹소켓소켓
protocolTCP/IP 기반 위 HTTPTCP/IP
data formatStringByte Array
OSI layer7 계층3,4계층 or 4계층
packet infoIP주소(IP) / 포트번호(TCP)
function양방향 및 실시간 통신프로토콜 그 자체
portHTTP/HTTPS port 사용

AMQP

정의

앱 간 메세지를 주고 받기 위해 개발된 프로토콜.
메세지를 주고 받는데 있어 binary wire-level 프로토콜을 정의한다는 것이 특징이다.
서로 다른 플랫폼 서로 다른 언어 간 소통 가능
해당 프로토콜은 RabbitMQ, Apache ActiveMQ 등 에서 구현되어 있음.

binary wire-level protocol

네트워크상에서 데이터 주고 받을 때 데이터의 형태가 binary data encoding 형태. 문자 기반 프로토콜과 비교했을 때 데이터를 처리하는데 있어 유용.

웹소켓 vs AMQP

두 프로토콜 모두 클라이언트와 서버 간 데이터를 교환하는 데 사용한다. 둘 모두 실시간 통신에 사용되나 개발 된 것에 서로 다른 목적이 있다.

목적

웹소켓이 서버와 클라이언트 간 끊기지 않는 양 방향 통신에 중점을 둔 프로토콜이라고 한다면 AMQP는 메세지 앱 간 정확한 데이터 전달 및 비동기 방식의 통신에 중점을 둔 프로토콜이다.

데이터 송수신 관점

웹 소켓에서 송수신 데이터는 여러개의 메세지(단위: 패킷 또는 패킷's) 단위로 분리. 하나의 메세지는 단일 패킷 또는 복수의 패킷을 포함. 해당 패킷들은 완전한 메세지로 다시 재구성 되어 수신자에게 전달

AMQP는 위에서 명시한 그 메세지를 송수신 할 때 좀 더 고도화 되어 전달 된다. 라우팅, 우선 순위 설정, 메세지 내부 내용을 고려한 필터링 등이 있다.

중개자

웹소켓 통신은 클라이언트와 서버가 직접 연결하는 형태를 띈다. 따라서 중개자가 없다.

AMQP는 클라이언트와 서버 사이에 AMQP 중개자를 놓고 통신한다. 브로커의 존재 유무로 인해 추가적인 기능을 사용할 수 있게 된다. 이제 로컬 머신에 rabbitmq server를 띄우러 출바알~

0개의 댓글