기획 의도

우리 서비스에서 채팅 기능을 도입하였습니다.

모임을 만들었을 때 일일이 번호를 받아서 채팅방을 만드는 경험을 한 적이 있지 않았나요? 모임을 구성한 사람들끼리 채팅방을 서비스 내에서 만들 수 있다면 모임을 만드는 장벽이 낮춰질 것이라 예상하였어요.

채팅 기능을 만들기 위해 주어진 시간은 약 4일 정도에요. 응애 개발자 두 명이서 채팅 기능을 만들 수 있을까요?

응애 .. 🐣

채팅 기능을 구현하는 방법

채팅 기능이 다른 기능을 구현하는 것보다 까다로운 이유는 실시간성이라는 특징 때문이에요.

호기가 안나에게 채팅을 보낸 상황을 가정해봅시다.

Untitled

호기가 서버에 채팅을 저장하면 안나가 이를 조회하는, 단순한 게시글 업로드 및 조회 방식을 떠올려볼 수 있겠죠. 하지만 안나는 호기가 언제 서버에 채팅 데이터를 등록했는 지 모르는 상태입니다. 따라서 언제 서버에서 채팅을 조회할 지도 모를거에요.

따라서 안나는 없을지도 모르는 채팅 데이터를 받기 위해 계속 서버에 데이터를 요청해야 합니다.

클라이언트가 서버와 통신할 때 사용하는 HTTP 프로토콜은 기본적으로 상태를 유지하지 않는 (stateless) 프로토콜이기 때문이죠.

따라서 실시간으로 데이터를 전달받기 위해서는 클라이언트가 서버에게 지속적으로 새로운 데이터를 요청해야 하는데, 이런 방식을 폴링 (polling) 이라고 해요.

폴링 방식은 불필요한 데이터 요청으로 서버에 부하를 일으킬 수 있지만, 우리가 익히 알고 있는 HTTP 요청 응답 방식을 사용하기 때문에 구현에 용이합니다.

그래서 우리는 이렇게 일단 구현해볼 수 있는 가장 간단한 방식으로 채팅 기능을 구현하고 주기를 조절하며 모니터링해보기로 결정하였습니다.