스마트폰 킬러 앱으로 불리는 무료 문자 서비스 분야의 경쟁이 뜨겁다. 특히 NHN 출신들이 회사를 나와서 만든 카카오의 '카카오톡'과 NHN이 일본 시장 재도전에 나서며 선보인 '라인' 간 시스템 경쟁이 시선을 끌고 있다.

일반 사용자들에게는 두 회사의 다양한 서비스가 관심사라면 IT 분야에서는 그들의 아키텍처에 대한 관심이 더 높은 편이다. 갑자기 메시지 전송 속도가 느려지거나 제대로 전달이 안 되는 문제들은 아키텍처에서 비롯된 문제이기 때문이다.

kakaotacl line
▲ kakaotacl line

지난 4월 NHN 일본 엔지니어 블로그에 올라온 글을 보자. NHN 일본 라인 서버팀 개발자 슌수케 나카무라가 라인의 스토리지 아키텍처를 소개한 이 글은 그러나 NoSQL과 하둡에 관심이 목말라 있던 국내 개발자들에게 꽤 의미있게 다가온 모양이다. CHARSYAM's Blog는 한글로 번역해 소개하기도 했다.

이 글이 눈길을 끈 데는 이유가 있다. NHN의 다른 웹서비스는 MySQL 기반이었지만, 라인은 초기부터 NoSQL을 사용했다는 점 때문이다. 여기에 메신저 개발업체 중 유일하게 소스코드를 공개한 것도 인기에 한몫했다.

왜 라인은 NoSQL 기반으로 시스템을 설계했을까. 라인 개발팀이 블로터닷넷의 e메일 질문에 내놓은 대답은 의외로 단순했다.

"최대한 빠른 서비스 오픈, 글로벌 서비스에 적합한 규모 확장성과 비용 효율성을 달성하기 위해 NoSQL을 도입했습니다. SQL을 사용한 아키텍처는 실현 가능한 안이 아니라고 판단했습니다. 내부에서는 메시징 서비스가 다루는 데이터 자체가 비교적 단순하다고 판단해, 데이터를 직접 다루는 NoSQL 쪽이 역시 성능이나 리소스 최적화면에서 유리하다고 보았습니다. 물론 SQL을 두고 내부에서 개발 멤버들 사이서 의견이 엇갈리기도 했지만, SQL로 얻을 수 있는 이점이 많지 않았기에 NoSQL로 라인 아키텍처를 구축했습니다. MySQL 등 범용 데이터베이스관리시스템(DBMS)에 의존하는 것도 많겠지만, 메시지 서비스 특성상 대규모 서비스라면 각자 자사 기술에 최적화된 아키텍처를 채택하고 있을 것으로 봤습니다."

메시징 서비스 사업을 하는 입장에서 MySQL 같은 범용 DBMS에 의존하는 법도 생각해봤지만, NoSQL을 도입하는 게 훨씬 이득이라는 판단에서 선택했다는 얘기다. 라인 팀은 "NoSQL을 도입해서 데이터 규모나 구성에 따른 성능 저하가 크지 않았고, 규모 확장에 따른 위험을 줄일 수 있기에 지금 선택에 후회가 없다"는 말도 덧붙였다.

120725 LINESTORAGESTACK
▲ 120725 LINESTORAGESTACK

▲NHN 라인의 스토리지 아키텍처


라인의 전략은 더 좋은 기술을 도입해 비용을 절감하고 효과를 극대화하는 것이다. 이는 보통의 기업이 생각하는 경영철학에서 크게 벗어나지 않는다. 여기서 비교해 볼 서비스가 생긴다. 카카오의 모바일 메신저 '카카오톡'이다.

카카오톡은 라인과 행보가 좀 다르다. 업계 알려진 바에 따르면 카카오톡은 최소 2200대에 이르는 델 서버와 HP 서버를 활용해 서비스를 제공하고 있다. 여기에 지난해까지만해도 1천대에 이르는 오라클 MySQL DB를 이용하고 있는 것으로 알려졌다.

문제는 서비스 규모에 비해 과도하게 많은 서버 수다. 관련 업계에서는 카카오쪽이 급증하는 사용자들에 대응하기 위해 서버를 투입하면서 대응에 나선 점은 잘했지만, 지금의 아키텍처로 서비스를 계속하는 데는 한계가 있는 것 아니냐는 지적이 이어지고 있다. 신분을 밝히지 말아 달라고 당부한 카카오톡 관계자는 "카카오톡 서비스 사용자가 늘어나면서 입출력 에러, DB 커넥션 에러, 메모리와 하드디스크 동기화 등의 장애가 발생하고 있다"라며 "겉보기엔 서비스는 아무런 문제가 없지만, 이는 현상유지일 뿐 새로운 서비스를 위해서는 대안이 필요하다"라고 말했다.

입출력 에러는 카카오톡에서 메시지를 보낼 때 '전송 실패했습니다, 재전송하시겠습니까'란 메시지에 따라 재전송했더니, 똑같은 메시지가 한꺼번에 전송되는 상황이다. 메시지를 보냈다는 쿼리문이 제대로 처리되지 못한 이유에서다. DB 커넥션 에러는 서비스를 전송하는 속도가 느려지는 현상이다. 메시지를 보내면 읽어들여야 하는데, 메시지가 있는 곳을 찾지 못해 전송이 지연되는 식이다. 또한 빠른 메시지 전송을 위해서 디스크가 아닌 메모리로부터 정보를 불러들여야 하는데, 디스크와 메모리에 저장된 메시지 내용이 서로 다를 경우 동기화 문제가 발생한다.

이 관계자는 "초창기 사용자가 적었을 때는 문제가 없던 아키텍처가 국내 스마트폰 사용자 대부분과 해외 이용자들까지 사용하면서 한계에 부딪히기 시작했다"라며 "이제는 양이 아닌 질로 승부해야 될 때로, 카카오톡도 NoSQL 도입을 검토했으면 좋겠다"라고 말했다.

그러나 이 작업은 쉽지 않은 모양이다. 또다른 업계 관계자는 "쿼리를 받고 나면 작업 수행이 완료된 쿼리가 지워져야 하는데, 해당 쿼리가 지워지지 않고 트레이에 쌓이면서 카카오 시스템에 문제가 생기는 것으로 알고 있다"라며 "카카오톡 내부에서도 현재 소프트웨어 아키텍처가 한계가 있는 만큼 NoSQL을 도입하는 게 대안이 되지 않을까 하는 목소리가 나온다고 들었다"라고 말했다.

국민 메신저 카카오톡이 IT 아키텍처와 그 구현 방법에서도 영특한 해법을 보여줄까. 지켜보자.

저작권자 © 블로터 무단전재 및 재배포 금지