최근 들어가게 된 프로젝트에서 채팅서버의 수요가 생겼다.
기존 프로젝트는 Spring으로 개발중이었으나 소켓의 경우 별도의 프레임워크로 분리되어 있기 때문에
빌트인으로 관리하기가 어렵다고 판단, NestJS에선 한 프로젝트에서 소켓과 일반 컨트롤러를 함께 사용할 수 있어 MSA로 도입을 해보려고 한다.
메세지 큐는 비용 및 설계 기간이 오래 걸릴 것으로 생각되어 일단 REST를 통해 송수신하기로 정했다.
채팅은 완전히 신규 도메인 이기 때문에 별도의 DB로 분리해 관리한다.
처음부터 메세지 큐를 통한 이벤트 소싱 방식을 도입하기에는 DB 복제 등 테스트가 부담스러운 과정이 많다.
따라서 REST 통신으로 구축하여 테스트를 한 후 천천히 바꿔나갈 계획이다.
(방 관리, 참가자 관리, 방문 기록 관리, 채팅 관리 각각 CRUD)
(채팅방에서 실시간 갱신)
board별 채팅방 조회
인증(JWT를 식별하여 userId 반환), 인가(board 참가자인지 체크) 로직
해당 API는 NestJS HttpModule을 활용해 한번 더 추상화하여 사용한다.
AuthModule, AuthService처럼 일반 도메인처럼 만든 후 위 설명된 HTTPModule로 BaseURL이 설정된 HttpService를 주입받아 서비스에서 사용한다.
채팅, 방문 기록 CRUD가 동작할 때 await을 사용하지 않는다.
별도의 서비스로 한번 추상화돼있기 때문에 무결성이 조금 떨어지더라도 지연된 무결성을 보장하여 요청의 텀을 더 짧게 하는 것을 목표로 한다.