본문 바로가기

공부노트

12/17, 열일곱 번째 날의 TIL(Redis - 채팅)

오늘은 Redis를 이용해서 간단하게 채팅 프로그램을 만들어보았다. 내가 생각했던 채팅이랑은 조금 달랐는데, 웹에 연결하고 실제로 구현해보면 좀 더 내가 생각하는 채팅 프로그램에 가까울 것 같다.


Redis - 채팅

원래 검색해봤을 때는 백엔드, 그리고 웹사이트 소켓에 연결하고 프론트엔드까지 해서 구현을 해야 하는줄 알았지만, 단순 채팅 시스템을 위해서라면 Redis의 pub/sub만 사용해도 가능했다.

이때 pub/sub 기능은 메시지 발행(public)과 구독(subscribe)을 통해 실시간 메시지 브로커 역할을 수행하는 기능으로, 이를 통해 여러 클라이언트가 메시지를 교환할 수 있는데 단어를 봤을 때

 

Pub : 발행자는 특정 채널에 메시지를 보냄

Sub : 구독자는 특정 채널을 구독하고, 그 채널에 발행된 메시지 수신

채널 : 메시지를 발행하고 구독하는 논리적인 경로

 

위와 같고, Redis의 Pub/Sub 구조는 단순하지만 빠르고 효율적인 메시징 시스템을 제공한다고 한다. 그래서 채팅 프로그램을 위해 가상환경 설정을 해주고 코드를 작성해보았다.

위 코드는 redis와 threading을 불러온 다음 Redis 연결을 해주고 객체 생성한 다음 채널까지 설정을 한 것이다.

그 다음 메시지를 출판(채널에 보내는 것)이나 수신하는 함수를 생성하였다. 이 때 channel을 잘 설정해주어야 한다.

마지막으로 스레딩 라이브러리를 통해 새로운 스레드를 생성하고, while문을 통해 계속 메시지를 입력할 수 있도록 했는데 탈출할 수 있는 명령어도 지정을 해놓고, 그렇지 않은 경우에는 메시지를 보내도록 해놓았다.

기본적으로 채널 A를 구독한다고 했을 때, 누군가가  A에 발행한 메시지를 받아오게 되는 것이다. 

만든 다음 테스트도 해보았는데

다음과 같이 Redis 서버를 실행한 다음 터미널을 둘로 나누어 키고, 메시지를 입력했을 때 왼쪽과 오른쪽 모두 자기자신의 채널에 메시지를 보냈으므로 자신에게도 답이 온다. 이것은 단순하게 왼쪽 - 오른쪽만 나눈 것이고 실시간 1대1 채팅은 아니지만, 웹에 연결하고 서버를 다르게 설정하면 실시간으로 1대1로도 가능할 것 같다.


내일은 웹소켓에 연결을 해볼 예정이고, 프론트엔드를 파이썬으로 간단하게 사용할 예정인데 아직은 감이 안잡혀서 알아봐야 할 것 같다. 그리고 이제 컨테이너를 사용해보려고 해서 도커 강의도 들을 예정이라, 내일은 도커와 함께 딥러닝, NLP에 대해서 작성해봐야겠다.

내일도 화이팅