카카오클라우드 MemStore를 이용한 채팅 웹 서비스 배포
이 문서에서는 3-tier 아키텍처를 기반으로 클라우드에서 채팅 애플리케이션을 배포하는 방법을 소개합니다.
기본 정보
- 예상 소요 시간: 60분
- 사용자 환경
- 권장 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 사전 준비 사항
시나리오 소개
채팅이나 온라인 게임처럼 여러 사용자가 동시에 메시지를 주고받아야 하는 경우, 서버와 클라이언트 간의 지속적인 연결과 실시간 통신이 필요합니다. 기본적으로 브라우저와 서버 간 통신에 사용되는 HTTP 프로토콜은 비연결지향적이며, 서버는 클라이언트의 요청이 있어야만 정보를 전송할 수 있습니다. 이를 해결하기 위해 개발자는 Server-Sent Events(SSE)나 WebSocket을 사용하여 서버에서 클라이언트로 직접 정보를 전송할 수 있습니다. SSE는 주로 서버에서 클라이언트로의 단방향 메시지 전송에 사용되고, WebSocket은 양방향 통신을 지원합니다. 그러나 클라이언트의 연결이 서로 다른 서버에 분산되는 경우, 두 클라이언트는 실시간으로 정보를 주고받기 어렵습니다.
이 문제를 해결하기 위해 Pub/Sub 방식을 사용할 수 있습니다. Pub/Sub(Publish/Subscribe)는 메시지를 발행(publish)하는 주체와 이를 구독(subscribe)하는 주체를 분리하여, 서로 독립적으로 메시지를 주고받을 수 있게 하는 패턴입니다. 카카오클라우드 MemStore의 Pub/Sub 기능을 사용하면, 하나의 채널을 통해 여러 서버와 클라이언트가 메시지를 주고받을 수 있어 실시간 통신이 가능합니다.
시나리오 아키텍처
아키텍처 동작 시나리오
- User A가 메시지를 작성하여 애플리케이션을 통해 서버로 전송합니다.
- 메시지는 애플리케이션 로드 밸런서를 통해 웹 서버로 전달됩니다.
- 로드 밸런서는 스티키 세션 기능을 사용하여 동일한 클라이언트 요청을 동일한 웹 서버에 전달합니다.
- 웹 서버는 메시지를 로드 밸런서를 통해 WebSocket 서버로 전달합니다.
- 로드 밸런서는 스티키 세션 기능을 사용하여 동일한 클라이언트 요청을 동일한 WebSocket 서버에 전달합니다.
- WebSocket 서버는 메시지를 받아 MemStore Pub/Sub 시스템의 특정 채널로 발행합니다.
- MemStore는 발행된 메시지를 구독 중인 모든 WebSocket 서버에 전달합니다.
- 메시지를 구독한 WebSocket 서버는 이를 User B에게 전송하고, User B는 실시간으로 메시지를 수신합니다.