Simple&Natural
실시간 채팅앱 개발의 여러가지 이슈 본문
본 포스팅은 2019. 2. 7. 23:16 네이버 블로그에 작성된 글을 이전한 것임
구글링을 하다가 발견한 채팅기능 개발 관련 스레드
http://www.todayhumor.co.kr/board/view.php?table=programmer&no=13213
우리가 흔히 쓰는 왓츠앱이나 카카오톡과 같은 메시징앱들은 보기에 굉장히 간단해 보이지만
안을 들여다 보면 매우 정교하고 수준 높은 기술들이 들어가 있는 것 같다.
단순히 소켓을 열고 데이터를 주고받고 다시 소켓을 닫는 개념에서는 채팅이 쉬워보일 수 있으나
발생할 수 있는 여러가지의 상황들을 모두 고려하다 보면 난이도는 기하급수적으로 올라간다.
수신 측 유저가 오프라인 일 때 메시지를 처리하는 법
푸쉬 서버를 이용할 때 발생하는 유실 메시지는 어떻게 처리할 것인지
백그라운드 작업을 할 때 소모되는 배터리 이슈는 어떻게 할 것인지
소켓을 언제 열고 닫을 것인지
어떤 프로토콜이 가장 적절한지 등...
이런 여러가지의 이슈들을 모두 고려해야 한다.
원래 정말 완벽한 퀄리티의 채팅앱을 만들고 싶어서 몇 주 동안 공부를 해본 결과
모든 것을 초고퀄로 만드는 건 거의 불가능한 것으로 판단된다.
구글링을 하다가 2015년 경에 작성된 한 글을 보았다.
" 불과 작년에 모바일 메신저서비스 만들고, 최근에도 컨설팅 한 입장에서 말씀드리면 지금 원하시는 조건을 다 만족하는 퍼펙트한 솔루션은 존재하지 않습니다...
제약조건이 android, ios지원을 하며, 서버/클라쪽 자원 사용량이 적으면서 백그라운드 상태에서도 수신 알림이 트리플나인 이상 되는 실시간 메시지 전송 솔루션인 듯 한데 이거 만 족 시킬 수 있는 방법이 없어요...
실시간성에서 타협하거나, 혹은 서버나 클라이언트 자원을 많이쓰거나 둘중 하납니다. "
현업에서 메시징 앱 개발 경력이 많이 보이는 분이었는데 저렇게 설명하고 있었다.
뭐... 현재 상용 서비스에서도 완벽한 기술구현은 불가능하다고 하니 나도 굳이 완벽을 추구할 필요는 없겠다 싶었다.
굉장히 강박증에 가까울 정도로 심적스트레스를 받다 보니 어느 정도 내려놔야 하는데... ㅠㅠ
자꾸 꼼꼼하고 완벽하게 하려는 성향이 있다.
정작 그런다고 안터지는 것도 아니지만...
아무튼 추가로.
푸쉬메시지 서비스의 유실율에 관해서는 다음과 같이 처리하는 듯 싶다.
" 그런데 사실 모바일 환경인 이상 네트워크 환경을 보장할 수 없어서, 높은 실시간 전송률(1분이내 수신률 99%이상)이 보장 되는 메시징을 만드는건 상당히 어렵습니다.
대개 기존 푸시에 의존하고, 앱을 켰을 때 폴링을 하던 TCP 열던 제대로된 메시지 수신을 하죠.
보통은 서버에서 동일한 UID로 푸시를 충분히(전송 보장률이 99%이상 될 정도 횟수로) 많이 보내고, 클라이언트에서 동일한 푸시는 무시하도록 처리하는 경우가 많습니다. "
한번 말해서는 못알아 들으니 20번 30번 말해준다는 뜻이다.
심플.
한 번만 보냈을 때도 알아들어야 한다는 고정관념을 가진 나는 생각하기 어려운 개념...
++ 추가
카카오톡의 경우 스마트 푸쉬라는 걸 이용하는 걸로 보인다.
아마 SK에서만 해당되는 듯...?
http://www.zdnet.co.kr/view/?no=20110921111218
참고 링크
http://cheonbrave.blogspot.com/
https://okky.kr/article/338303
++ 추가 봐야될 문서
https://hackernoon.com/how-to-build-your-own-real-time-chat-app-like-whatsapp-9d1d058afd5b
'안드로이드(Android) > 이슈 및 해결' 카테고리의 다른 글
Android Module 추가 방법 (0) | 2019.12.13 |
---|---|
CMake build중 발생하는 오류 (0) | 2019.12.13 |
안드로이드 Action Bar 사용 시 Item의 Icon과 Title이 동시에 보이지 않는 이슈 (0) | 2019.12.13 |
RecyclerView가 item Position을 제대로 찾지 못하는 이슈 (0) | 2019.12.13 |
ImageCropper Lib와 okHttp3를 이용한 이미지 서버 업로드 (0) | 2019.12.13 |