NestJS Redis Pub/Sub과 socketIO로 채팅 앱 만들기 -1

 안녕하세요. 이번에는 NestJS와 Redis의 Pub/Sub기능을 이용하여 채팅 채널을 만들도록 하겠습니다. 채팅 채널을 테스트히기 위한 툴로는 Postman을 사용할 것이며 자세한 내용은 아래 링크를 참고해 주시기 바랍니다.

링크 : Postman 소켓IO 테스트하기


그리고 이전글을 참고하실려면 아래 링크를 확인해 주시기 바랍니다.

링크 : NestJS Redis Pub/Sub과 socketIO로 채팅 앱 백엔드 만들기 -0


일단 현재 블로그에서 작성하는 Node버전은 16.17.0이며 NestJS버전은 9.1.2입니다.


프로젝트를 생성(위 블로그에서는 nestjs-microservice-example)하고 필요한 npm모듈을 설치합니다.

socketIO모듈을 설치할때는 아래 링크를 참고해 주시기 바랍니다.

링크 : NestJS SocketIO - 방을 선택해서 들어가는 채팅방 만들기


위 사항이 마무리 되면 microservice 모듈을 설치합니다.


- @nestjs/microservices npm 설치

$ npm i --save @nestjs/microservices


- redis바탕으로 microservices를 구상할때 설치

$ npm i --save ioredis



먼저 최상단 루트에 .development.env파일을 만들어주고 아래와 같이 작성합니다.

NESTJS_PORT=4500

REDIS_PORT=6379

REDIS_HOST="localhost"

NestJS_PORT가 4500이지만 추가로 실행할 서버는 포트번호를 다르가 하면서 추가하시면 됩니다.


사진1) 백엔드 구성

사진1은 개발할려는 기본적인 백엔드 구조 입니다. 모듈안에는 컨트롤러와 웹소켓 서버(socketio.gateway)가 있는데 기본적으로 웹소켓이 채팅앱입니다. 


다만 Redis에서 데이터를 Subscribe는 socket_publish에서 받고나서 socketio.gateway에 보내주고 이를 SocketIO쪽으로 BroadCasting해줍니다. 만약 SocketIO에서 데이터를 입력하면 socketio.gateway에서 Redis로 Publish합니다. 


gitHubLink : https://github.com/Alex-Choi0/nestjs-microservice-useredis-pub-sub-example.git


코드에 대한 자세한 사항은 gitHubLink를 참고해 주시기 바랍니다. 주석도 자세하게 적어놨으니 이해하는데는 어렵지 않을 것입니다. 만약 질문이 있다면 댓글을 달아주시기 바랍니다.

사진2) 다른 포트의 서버2개와 redis서버 실행

사진2에서 각각 4500,4600포트로 동일한 채팅앱 서버를 만들었습니다. 그리고 이 서버를 실행하기 전에 redis서버가 실행되야 합니다. 저는 local 서버로 돌리기 때문에 NestJS서버2개와 redis서버가 동일한 PC에서 구동되고 있습니다.


사진3) Postman SocketIO접속

사진3에서 2개의 SocketIO접속을 하였습니다. 각각 4500, 4600번으로 접속했기 때문에 redis의 pub/sub기능을 사용하지 않았다면 서로 통신을 할수 없습니다.




사진4) MicroService SocketIO Test





위 영상은 해당 NestJS코드 및 Postman을 이용하여 테스트를 했습니다. 참고 하시기 바랍니다.


댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Nest JS URL에 있는 쿼리(Query) 읽기