채팅 서비스 기반 기술

박태정·2025년 3월 18일

웹소켓

목록 보기
3/8

배워야하는 기술

websocket을 먼저 배우고 이 기술의 발전된 기술인 STOMP 에 대해서 알아야한다. 이 둘의 차이점을 기반으로 공부할 것이다.

그리고 redis의 pub/sub 이용해서 멀티서버 환경을 고려해야한다.

  • 이것을 간략하게 설명하자면 A와 B가 메시지를 주고 받는 다고 가정

  • A는 서버에 있고, B는 서버에 있을 때 서로 메시지를 주고 받을 수 없다.

  • 이럴 때 사용하는 기술이 redis나 kafka의 pub/sub이다.

  • 이 redis에 연결된 서버 모두에 메시지를 전달을 한다.

HTTP vs Websocket

HTTP

HTTP 프로토콜은 반드시 request와 response가 왔다갔다 해야한다.

그래서 채팅 페이지를 구현한다고 할 때 메시지를 전송하는 것은 괜찮은데 메시지를 받을 때 메시지가 들어왔는지 확인하기 위해서 데이터베이스에 데이터를 조회하는 request를 보내고 그리고 response를 받은 뒤에 새로운 메시지를 페이지에 띄워줘야한다.

그래서 화면을 refresh를 해주거나 메시지 받기 버튼을 눌러서 request/response 과정을 거쳐야한다.

그래서 이것은 실시간 채팅이라고 하기는 어렵다

클라이언트가 서버로 요청을 보내고 서버가 응답을 하는 단방향 통신

HTTP는 클라이언트가 서버에 요청을 보내기 전까지 서버는 메시지를 주지 않는다.

  • 보내주지 않는 이유는 서버가 메시지를 보내기 위해서는 각 클라이언트에 메시지를 보내기 위해서는 위치정보를 알아야한다.

  • 클라이언트는 서버의 위치정보를 알고있지만 서버는 클라이언트의 위치정보는 알 수 없다.

Websocket

websocket에는 클라이언트라는 개념이 있다. -> 웹브라우저(사용자)

(a)클라이언트가 서버와 websocket으로 연결이 되어있는 상황에서 어떤 다른 클라이언트가 서버로 메시지를 전송하면 (a)클라이언트는 실시간으로 메시지를 받을 수 있다.

클라이언트와 서버가 양방향 통신을 한다. 즉, 클라이언트가 서버에 메시지를 보낼 수 있고 반대로 서버가 클라이언트한테 메시지를 보낼 수 있다.

  • Websocket은 클라이언트와 서버가 한번 연결되면 클라이언트들의 위치 정보를 저장해둔다.(서버 메모리 상에 갖고 있는다.)
  • 요청이 없어도 메시지를 쏴줄 수 있다. 즉, 서버 쪽에서 클라이언트 쪽으로 메시지를 전송할 수 있다는 점은 꼭 기억하자

http 프로토콜이 아니기 때문에 http://이 아닌 ws://을 사용한다.

STOMP 프로토콜을 사용하면 명시적으로는 ws://가 아닌 http://를 사용한다. 하지만 내부적으로는 ws://가 사용된다.

연결 방식 비교

두 연결방식 모두 근간이 되는 프로토콜이 있다.

바로 TCP 이다. 이 프로토콜은 양방향 연결이다.

  • 양방향 연결이면 Websocket 아닌가? 라는 생각이든다.
  • http 통신의 연결 방식은 양방향이긴한데 양방향으로 연결한 후 빠르게 끊어버린다.
  • websocket같은 경우 양방향 연결을 하고 쭉 상태를 유지하는 것이다.

    이것이 가장 큰 차이점이다.

HTTP

  • http 는 순간적으로 양방향 연결을 하게 된다.
  • 하지만 메시지를 주고 받은 뒤에 연결을 바로 끊어 버린다.
  • 비연결성이라고 한다.

    매번 연결을 요청했다 끊었다를 반복하면서 계속 http 요청을 보내는 것은 성능 저하가 발생한다.

Websocket

  • TCP 프로토콜을 이용해서서버에 연결 맺자는 요청 그리고 응답을 받는다.
  • 그리고 끊지 않고 계속 연결되는거다
  • 연결성이라고 한다.
  • 연결 이후에는 http 형식의 메시지를 보낼 필요가 없어진다.
  • 연결 이후에는 아주 간결한 메시지들을 보낼 수 있다. - 성능이 좋다!

websocket은 최초 연결을 할 때는 http 프로토콜을 이용해서 연결 요청을 서버에 보낸다.

websocket도 최초 연결시에는 HTTP 헤더를 통해 token과 같은 인증 정보를 보낼 수 있다. - 이를 통해 인증 처리를 할 수 있다.

  • 즉, 이거로 JWT 검증 가능하다.

HTTP 메시지는 정보가 많다.

0개의 댓글