목차

tinode series.001 - Intro

인스턴스 메시징?

요즘에는 어느 서비스를 이용하든 대부분 실시간 채팅은 기본으로 지원한다. 페이스북, 트위터같은 서비스는 물론이고 트위치, 유튜브 같은 동영상 기반 플랫폼도 실시간 채팅을 기본적으로 지원한다. 사실 과거에 2G폰에서 문자메세지를 주고받던 시절부터 현재 카카오톡, 텔레그램같은 실시간 인스턴트 메세징 앱에 이르기까지 플랫폼의 변화만 있을 뿐 글자를 이용한 실시간 의사소통은 현대인에게 상당히 익숙한 의사소통 방법이다.

우리 서비스에 적용하고 싶어(어떻게?)

운영중인 서비스에 인스턴스 메시징 기능을 적용하면 여러가지 이점이 많다. 빠른 의사소통은 물론 사용자의 서비스 체류시간 및 접속빈도 증가 등등.. 적용을 안할 이유가 없다. 그렇다면 현재 운영, 또는 개발중인 서비스에 적용하기 위한 방법에는 어떤 것들이 있을까? 내가 떠올린 방법은 크게 세 가지다.

  • 직접 구현하기

제일 쉽게 떠올릴 수 있는 방법이다. 밑바닥부터 자신이 직접 설계, 구현하는 것(git init). 의욕 충만한 개발자라면 일단 달려들고 보겠지만 일단 진정하자. 카카오톡이나 기타 다른 메신저와 같은 메시징 시스템을 직접 구현하는건 생각보다 만만한 작업이 아니다. 실제 서비스에 사용될 프로덕션 레벨 수준까지 구현하려면 짧게는 수개월, 길게는 년 단위로 넘어가는 프로젝트가 될 것이다(사실 내가 능력이 안된다).

  • 솔루션 구매

제일 쉬운 방법은 역시 돈으로 떼우는 것이다(…). 이것저것 찾아보니 twiliosendbird라는 유명한 솔루션 회사가 있었다. 이 중 sendbird는 미국에 본사를 둔 한국 회사로 최근에 꽤 큰 규모로 투자도 받았다고 한다. 아무튼 이 회사들이 제공하는 솔루션을 적용하면 큰 힘 들이지 않고 간단히 SDK 적용만으로 채팅 기능을 구현할 수 있다고 한다. 자금사정이 넉넉하다면 이런 유료 솔루션을 이용하는것도 시간을 절약하는 좋은 방법이다. 역시 자본의 힘은 대단하다.

  • 오픈소스 적용

직접 구현할 시간(또는 능력)이 없고 솔루션을 구매할 돈도 없다면 오픈소스를 사용해보자. 비용도 거의 들지 않고 커뮤니티가 많이 활성화 되어있는 경우엔 관련된 정보도 많이 얻을수도 있다. github에서 chat 또는 chatting 을 검색해보면 다양한 오픈소스가 존재한다. 이 중에서 내가 선택한 오픈소스는 Tinode프로젝트다.

왜 하필 Tinode?

사실 내가 tinode를 선택한 이유는 별거 없다. 제일 큰 이유는 완전히 Go 언어로 작성된 서버 애플리케이션이기 때문이다. 당장 실제 필드에서 사용할 목적도 아니고 순수하게 호기심과 학습이 목적이었기 때문에 작성언어가 제일 우선순위가 높았다. 아래에 여러가지 이유를 나열하긴 하겠지만 다 변명이다. 아래 나열된 목록은 어차피 다 공식문서에 써있으므로 굳이 읽을 필요는 없다. 아무튼 개인적으로 제일 큰 이유는 구현 언어 때문이었다.

  • Pure Go Application

위에서 얘기한 가장 큰 이유다. 서버코드가 Go 언어를 이용해서 작성되었다. Go 언어에 큰 관심이 있던 나에게는 가장 큰 메리트였다.

  • 다양한 클라이언트 지원

현재 가장 흔하게 쓰이는 web(js), android, ios(현재 베타), 심지어 커맨드 라인도 지원한다. 그리고 gRPC도 지원한다.

  • 다양한 DB옵션 지원

일단 기본적으로 Mysql을 지원한다. 그리고 개인적으로 처음 들어보는 RethinkDB도 지원한다고 한다. db가 준비된 도커파일도 제공한다. 그리고 마음에 드는 DB가 없을 시 서버코드 내부에 작성된 인터페이스 규격을 지킨 adapter 코드를 직접 작성하면 다른 DB를 이용할 수도 있다.

  • 꽤 높은 star 수

이 글을 작성하는 현재 1691개의 star 수를 기록하고 있다. 11명의 컨트리뷰터와 1,358개의 커밋이 있는걸 보니 나름 규모가 있는 프로젝트인 것 같다. 개인적으로 star 수가 1,000개를 넘어가면 신뢰할 수 있는 프로젝트라고 판단하는 편이다(사실 수백개만 되도 충분하다고 본다).

  • 꾸준히 활발한 활동

날마다 꾸준히 커밋이 올라온다. 사실상 이 분 혼자서 대부분 작업을 하시는데 올라오는 이슈에도 항상 답글을 달아주시고 코드 작업도 활발하게 하신다. 활동량을 보니 개인이 아니라 팀 계정이 아닐까 싶다(사실 잘 모른다).

이걸로 뭘 할건가?

내가 tinode 프로젝트를 살펴보는 가장 큰 목적은 학습이다. 실제로 채팅 서버가 돌아가는 구조와 DB 스키마, 내부 처리방식, 코드 디자인 패턴 등등을 종합적으로 살펴보고 이 블로그에 학습 내용을 연재 할 예정이다(어디까지나 예정일 뿐). 참고로 이 프로젝트를 실제 제품에 사용할 계획이 있으신 분이라면 이 링크를 참고해보자.