라인(LINE)이 택한 NoSQL은 무엇일까?
전동현
wjs99mail@naver.com | 2021-01-05 00:53:04
메신저 앱 라인(LINE)의 인기가 뜨겁다. 2021년 라인·야후 재팬의 경영통합을 확실시 한 상황에서 라인의 성장전망은 더욱 밝아지고 있다. 2020년 말에는 라인 헬스케어로 병원 예약 진료를 할 수 있는 서비스를 출시해 이용자들의 편의를 제공하는 등 다양한 서비스에도 진출하는 모습을 보여주었다.
2020년 하반기 기준 일본에서만 월간 이용자 8,600만명을 기록한 라인은 메신저 서비스로 시작해 일본, 대만, 태국 등의 동남아에서 가장 많이 사용되고 있다. 현재는 메신저 뿐만 아니라 게임과 번역 등 다양한 영역으로 사업을 넓혀가고 있다.
라인의 메신저 아키텍처는 다른 메신저 앱 아키텍처와는 다르게 NoSQL을 기반으로 개발되어 있다고 한다. 네이버의 다른 회사들은 대부분 일반적인 SQL 방식, 즉 RDBMS 방식을 사용하여 데이터를 저장하고 관리한다.
카카오톡도 처음에는 NHN출신의 개발자들이 모여 만든 회사인데, 처음부터 RDBMS 방식을 사용했다. 네이버의 자회사인 라인은 다른 NHN의 서비스와 다른 데이터 베이스 언어를 사용하는 셈이다. 왜 그럴까?
그 전에 , 우선 SQL이란 무엇인지 알아보자.
SQL이란?
SQL(Structured Query Language)은 데이터베이스에 접근할 수 있는 데이터베이스 하부 언어를 말한다. 쉽게 말해서 내가 필요한 데이터에 대해 SQL 문장을 작성하고 실행하면, 데이터베이스에서 원하는 데이터를 추출하는 작업을 한다.
RDBMS와 NoSQL
데이터베이스란 특정 데이터의 집합을 의미한다. 기업은 많은 데이터를 읽기 쉽고 사용하기 편하게 정리하고자 한다. 이렇게 데이터를 관리하는 시스템을 DBMS(DataBase Management System)라고 한다. DBMS는 크게 RDBMS(Relational DataBase Management System)와 NoSQL로 나누어 볼 수 있다.
RDBMS는 아주 오래전부터 사용되던 데이터베이스 관리 시스템이며, 관계형 데이터베이스 관리 시스템이라고 부른다. 대학에서 수강할 강좌를 검색하는 과정에서 수강 과목, 교수님, 수강 인원 등의 데이터를 필터링해, 엑셀 표 형태로 나타내주는 것을 RDBMS 활용 사례로 언급할 수 있다.
RDBMS는 오라클을 중심으로 1970년대부터 범용 데이터베이스의 자리를 차지하고 있으며, SQL을 통해 저장한 데이터를 효과적으로 읽고 쓸 수 있다. 대표적인 프로그램으로는 MySQL, 오라클, 액세스가 있다.
오랫동안 사용된 만큼 백업, 보안, 모니터링 등 데이터베이스와 연관된 생태계도 비교적 안정적이다. 기존의 여러 개발자는 이미 RDBMS에 친숙하며, 데이터베이스 수준에서 ACID(Atomic, Consistency, Isolation, Duarabity)를 만족하는 상호작용을 할 수 있다. 일정한 테이블 형태로 데이터를 보관하기에 알아보기 쉽고 훨씬 직관적인 형태를 지니고 있다.
그렇다면 NoSQL이란 무엇일까? 쉽게 말해, 비관계형 데이터베이스 관리 시스템이다. NoSQL은 비관계형이기 때문에 정해진 테이블에 하나씩 데이터를 집어넣어 사용할 수 있으며, 다른 데이터 구조를 가져와 사용할 수도 있다. 그렇기 때문에 대규모의 데이터를 유연하게 처리할 수 있다. 또, 설계가 단순하고 데이터의 확장에 훨씬 유리하다.
비관계형 관리 시스템은 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 원자성(Atomic), 일관성(Consistency), 고립성(Isolation), 지속성 (Duarabity)과 같은 특성을 제공하지 않고, 뛰어난 확장성과 효율성 등의 특징을 갖는다. 즉, 고정적이고 정해져있는 테이블에 정보를 저장하는 특성이 아니라 자유롭게 데이터를 저장한다는 것이다.
RDBMS는 각 필드마다 특정 데이터의 위치가 일정하게 정해져 있다. 따라서 필드 순서를 바꾸거나 새로운 필드를 추가할 때, 표 전체를 수정해야 한다. 반면, NoSQL은 자유롭게 필드를 추가하고 수정, 삭제할 수 있다. 대표적인 NoSQL로는 카산드라(Cassandra), HBASE, MongoDB가 있다.
알아보기 쉽지만 형태는 제한적인 RDBMS vs 알아보기 어렵지만 형태는 유연한 NoSQL
[출처: Couchbase - https://blog.couchbase.com]
일반 RDBMS 방식을 채택한 SQL 방식은 구조를 한 번 고정시키면, 데이터와 구조의 안정성은 보장된다. 일정한 형식을 유지해, 보기에도 편하고 훨씬 직관적이다. 하지만 데이터가 쌓일수록 데이터베이스 관리 시스템 자체가 커지는 구조를 갖고 있다. 이 때문에 시간이 지나면 훨씬 고성능의 데이터베이스 시스템을 필요로 하게 되고, 점점 관리가 어려워진다.
NoSQL은 대량의 데이터를 무한대로 추가하여 저장할 수 있으며, 가변성이 있는 데이터의 저장도 용이하다. 결과적으로 유지 보수에 적은 비용이 발생한다. 그러나 구조가 정해지지 않았기에 분별되지 못한 여러 데이터가 떠다니는 문제가 발생할 수도 있고, 알아보기 어려운 형태를 가진 데이터를 다뤄야 하는 것이 단점이 될 수 있겠다.
금융 업계처럼 보수적이거나 저장해야 하는 데이터들이 고정적인 경우 RDBMS를 사용하는 것이 더 좋다. 반대로 웹이나 다량의 데이터를 한꺼번에 처리해야하는 메신저는 NoSQL 방식이 더 유리하다고 볼 수 있다.
라인 개발팀은 최대한 빠른 서비스 오픈, 글로벌 서비스에 적합한 규모 확장성과 비용 효율성을 달성하기 위해 NoSQL을 도입했다고 밝혔다. 메시지 서비스 특성상 대규모 서비스는 각자 자사 기술에 최적화된 아키텍처를 채용하는 것이 맞고, 규모 확장에 따른 위험을 줄일 수 있기 때문이다. 메시지 서비스 사업은 범용성을 위해서라도 RDBMS를 채택하는 경우가 많은데, 라인은 NoSQL을 선택하면서 비용 절감 효과를 누렸다.
그렇다면, 국내 최대 메신저 서비스, 카카오톡은 어떨까? 카카오톡은 RDBMS 방식으로 수천대에 이르는 오라클 MySQL을 이용하고 있으며 DELL, HP사의 서버도 같이 이용하고 있다.
그러나 사용자가 점점 많아지면서 카카오톡 내부에서 제공하는 서비스 사용량도 점점 증가한다는 문제가 발생하고 있다. 이러한 이유로 지금의 아키텍처로 서비스를 계속하는 데 무리가 있는 것이 아닌가라는 지적도 나오고 있다.
누적되는 데이터가 많아질수록 데이터베이스 관리에 비용이 많이 소요되고, 데이터베이스 연결 오류가 발생할 위험도 높아진다. 카카오톡 내부에서도 NoSQL 도입을 검토해보는 의견이 나오고 있지만, 쉽지 않은 것으로 알려져있다. 작업 수행이 완료된 쿼리가 삭제되어야 하는데, 쿼리들이 한 쪽에 쌓여 트래픽에 문제를 주는 상황이 발생할 수 있기 때문이다.
라인이 택한 NoSQL 방식의 데이터베이스 관리 시스템이 앞으로도 다양한 장점을 보여줄 수 있을지 기대가 되는 바이다.
[ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]