여러 서버를 사용하고 있을때 실시간 채팅을 구현해야한다면 Redis를 사용하자

코딩을 합시다·2023년 3월 1일
0

우선 필자는 실시간 채팅을 구현할때 왜 Redis를 사람들이 많이 사용하는지 궁금했다.
내가 실시간 채팅을 만들때는 WebSocket, Stomp, Sockjs 뭐 이런걸로 충분히 구현이 가능했기 때문이다.

그런데 생각을 해보니 만약 서버가 여러대로 돌아가고 있는 환경이라면 서로 다른 서버에서의 WebSocket이 작동을 하고 있을텐데 메세지를 주고 받을 수 있을까? 라는 의문이 들었다.

의문점을 풀기 위해 하나는 로컬 서버로 하나는 배포한 서버로 테스트를 해보았다.

역시나 예상대로 로컬은 로컬쪽 WebSocket 메세지 밖에 받지 못한다.

  • 서버의 WebSocket을 통한 메세지는 받지 못하고 있음

문제점이 뭔지 알아보자.

클라이언트1이 서버1과 연결되어 있을 경우 서버2의 요청을 받을 수가 없다.
클라이언트2도 같은 이유로 마찬가지이다.

하지만 서버같은 경우에는 하나로 할 경우 여러가지 문제가 생길 수 있기 때문에 여러개로 나누는게 일반적일 것이다.

그래서 이거를 해결하기 위해 Redis를 사용해봤다.

  • 서버1 또는 서버2가 클라이언트에게 받은 데이터를 Redis에 보내준다
  • Redis는 받은 데이터를 다시 서버1과 서버2에 각각 보내준다.
  • 서버1과 서버2는 같은 데이터를 가지게 되고 이거를 각자 서버에서 클라이언트에게 보내주면 된다.

이제 서버 여러개가 동작하고 있어도 Redis를 중간다리(?) 역할로 사용해서 잘 작동할 수 있게 구현했다.

배포 서버에서 보내도 로컬 서버에서 데이터를 잘 받는 모습을 확인할 수 있었다.

0개의 댓글