ICT트랜드

ICT트랜드

글로벌 클라우드 컴퓨팅 시대의 데이터베이스 NewSQL - OldSQL, NoSQL, 그리고 NewSQL - 클라우드팀 / 한인종, 김경탁

글로벌 클라우드 컴퓨팅 시대의 데이터베이스 NewSQL
- OldSQL, NoSQL, 그리고 NewSQL -
클라우드팀 / 한인종, 김경탁

매 순간 엄청난 양의 데이터가 생성되고, 앞선 기업들은 거의 실시간으로 이를 처리하여 비즈니스에 활용하고 있습니다. 걷잡을 수 없이 쏟아지는 데이터를 다룰 수 있는 도구와 방법이 개발되면서, 즉 페타 바이트 규모의 데이터를 다룰 수 있게 되면서 빅데이터 시대가 열렸습니다. 하둡(Hadoop) 에코시스템이 그 대표적인 도구입니다. 그런데 페타 바이트 규모의 데이터를 데이터베이스 관리시스템(DBMS)은 어떻게 처리할까요? 전세계에서 접속하는 수 억 ~ 수 십억 명의 사용자에게 서비스를 제공하는 넷플릭스나 YouTube는 어떤 데이터베이스를 사용하고 있을까요? 우리는 G-클라우드에 UNIX서버와 DBMS 클러스터를 채용하여 대용량 데이터베이스를 제공하지만 아마존 웹 서비스(AWS)나 구글 클라우드 플랫폼(GCP) 같은 글로벌 클라우드 컴퓨팅 서비스 벤더들은 UNIX서버 자원 풀이 없습니다. 그들은 x86서버(Linux)에서 어떻게 대용량 데이터베이스 서비스를 제공할까요? 그 답을 찾기 위해 먼저 DBMS 유형을 분류해 보는 것이 도움이 됩니다. 현재 사용되고 있는 약 150종의 DBMS(1)를 SQL 기준으로 OldSQL(관계형DBMS), NoSQL(빅데이터용 DBMS), 그리고 NewSQL(새로운 분산형DBMS)로 구분하는 것이 유용합니다.
그림1. 다양한 데이터베이스 시스템들의 카테고리 구분 및 랜드스케이프
OldSQL – 관계형DBMS 그룹 우리가 익숙한 관계형DBMS의 가장 큰 장점은 ACID 속성과 SQL 지원입니다. ACID(Atomicity, Consistency, Isolation, Durability; 원자성, 일관성, 격리성, 지속성)는 핵심만 간단히 설명하면 데이터베이스에 있는 값은 항상 유효하고 정확한 값이며, 서버 다운 후 복원되어도 이 상태를 유지한다는 것입니다. 한마디로 데이터를 신뢰할 수 있다는 것입니다. 그리고 SQL(Structured Query Language)은 데이터베이스에서 데이터를 입력, 조회, 변경 그리고 삭제할 수 있는 표준화된 언어로 데이터를 간편하게 다룰 수 있게 해줍니다. 모든 관계형DBMS가 SQL을 지원하고, ANSI 표준을 따르는 SQL은 약 85% 정도가 같기 때문에 사용하는 DBMS가 달라도 동일한 SQL 쿼리를 사용할 수 있습니다. 예를 들어, MySQL을 사용하다가 큐브리드로 변경해도 애플리케이션의 SQL 쿼리는 거의 변경할 필요가 없습니다. 이런 이유로 가장 오래되었지만(2) 지금도 가장 널리 사용되고, 오래 전부터 SQL을 지원(3)하기 시작했기 때문에 OldSQL이라고 부르기도 합니다.
MySQL, 큐브리드, 오라클, 티베로, MariaDB 그리고 PostgreSQL 등 이름이 익숙한 것은 대부분이 OldSQL 즉, 관계형DBMS 입니다. 국가정보자원관리원의 G-클라우드에서 약 900개의 DBMS 인스턴스가 동작하고 있는데 이들 모두 이 관계형DBMS 그룹에 속합니다.
관계형DBMS의 약점은 확장성입니다. 데이터 양이나 트랜잭션 수가 증가하면 더 큰 서버로 업그레이드 하거나, Oracle RAC 또는 Tibero TAC 클러스터에 노드를 추가해야 합니다. 그러나 클러스터에 추가할 수 있는 서버 수에 한계가 있습니다. 관계형 DBMS의 확장 제한 사례
확장성의 한계를 보여주는 좋은 사례가 있습니다. 2000년대 중반에 A통신사는 가입자 증가 추세로 인해 실시간 과금시스템(Billing System)을 확대 구축해야 했습니다. 이 때 DBMS는 익숙한 관계형DBMS만 고려했기 때문에 고성능 대형 서버로 클러스터를 구성하는 것 외에 방법이 없었습니다. 그래서 당시 가장 큰 UNIX 서버였던 HP Superdome 64-Way(CPU 64개) 7대에 Oracle RAC로 클러스터를 구성했습니다. 7대로 구성된 것은 서버를 추가해도 더 이상 트랜잭션 처리량이 증가하지 않았기 때문입니다. 그리고 이 규모의 클러스터 구축 사례가 없었기 때문인지 시험 운영 중에 Oracle RAC에서 전에 없던 유형의 에러들이 여러 차례 발생했고, 결국 오라클사의 DBMS 개발 엔지니어가 한국에서 2~3 개월간 상주하며 버그를 모두 잡았습니다. 이 시스템은 당시 세계에서 가장 크고, 가장 비싼 관계형DBMS 클러스터가 되었습니다.
NoSQL - 빅데이터용 DBMS 그룹 스마트폰 사용 확대로 반정형 및 비정형 데이터가 빠르게 증가하며 새로운 유형의 DBMS들이 등장했습니다. 이 DBMS들은 데이터를 저장하는 방식은 제각각(키-값 쌍, 컬럼-패밀리, 문서, 그래프) 이어도 다수의 x86서버 클러스터로 구성되고, 각 서버별로 데이터를 분할하여 유지하며, 데이터는 복제본(보통 세 카피)을 유지하여 일부 서버가 다운되거나 데이터가 손상되어도 데이터베이스 서비스는 중단되지 않는 공통점을 갖고 있습니다. 그리고 데이터가 증가하면 서버를 추가하여 쉽게 확장할 수 있습니다. 페타바이트 규모의 데이터를 다룰 수 있는 확장성과 일부 서버가 다운되어도 데이터에 엑세스 할 수 있는 고가용성이 가장 큰 장점입니다. 그러나 이 그룹에 속하는 DBMS들(Cassandra, MongoDB, H-Base 등)은 관계형DBMS 보다 일관성이 느슨하고, SQL을 지원하지 않습니다. 그래서 NoSQL 이라는 이름이 붙었습니다(4). 이 DBMS들은 ACID 대신 BASE(Basically Available, Soft state, Eventually consistent) 속성을 갖습니다. BASE의 핵심만 간단히 설명하면 데이터베이스 변경 사항은 "최종적으로" 모든 노드에 전파되므로 데이터 쿼리는 업데이트된 데이터를 즉시 반환하지 않거나 정확하지 않은 데이터를 읽을 수 있습니다("오래된 읽기"로 알려진 문제로 일반적으로 몇 밀리 초 이내의 지연이 있습니다). NoSQL에는 트랜잭션과 스키마 개념이 없고, 표준화된 데이터 엑세스 언어인 SQL을 지원하지 않기 때문에(5) 프로그래밍 언어나 각 DBMS 패키지에서 제공하는 툴을 사용해야 합니다. 사용하던 DBMS가 바뀌면? 애플리케이션 코드도 대거 수정해야 합니다. 데이터 저장방식이 다르고, SQL 같은 표준 데이터베이스 엑세스 인터페이스가 없기 때문입니다. UNIX 서버보다 훨씬 저렴한 x86서버에 탑재하고, 데이터가 증가하면 서버 수를 늘려서 쉽게 확장할 수 있지만 금융시스템, 주문처리시스템 같은 애플리케이션들은 트랜잭션 및 일관성 요건을 포기할 수 없기 때문에 NoSQL 카테고리의 DBMS를 사용하지 않습니다. 그래서 NoSQL시스템은 24시간 365일 사용하고, 최종적 일관성으로도 충분한 YouTube(6) 같은 글로벌 서비스를 제공하는 웹 기반 애플리케이션이나 막대한 양의 데이터를 배치(batch) 방식으로 처리하는 빅데이터 분석 플랫폼에서 주로 사용됩니다. 국가정보자원관리원에서 운영하는 빅데이터 분석 플랫폼인 혜안에 NoSQL 카테고리에 속하는 HBase가 포함되어 있지만 현재 사용하지 않고 있습니다. NewSQL - OldSQL과 NoSQL의 장점을 결합 OldSQL 그룹과 NoSQL 그룹 DBMS의 특징을 이해하면 이 둘의 장점을 결합할 수 있을까' 하는 생각이 고개를 듭니다. 이것이 가능하다면 x86서버 여러 대에 데이터베이스를 나누어(파티션 또는 샤드라고 함) 저장하여 페타 바이트 규모의 데이터를 다룰 수 있고, 데이터가 증가하면 서버를 추가하여 쉽게 확장할 수 있으며, 트랜잭션에 대한 ACID 속성을 보장하므로 항상 유효하고 정확한 값을 유지하고, 각 제품에 종속적인 API 대신 표준 SQL을 사용하여 데이터를 손쉽게 다룰 수 있을텐데요. 그런 DBMS가 있을까요? 네, 2006년 경부터 미국의 기업과 대학에서 여러 가지 시도가 계속되었습니다. 그리고 구글과 아마존 같은 탁월한 인력을 보유한 기업들은 직접 개발하여 자사가 사용하고, 클라우드 서비스로 제공하고 있습니다(구글 스패너(Spanner), 아마존 오로라(Aurora)가 그 예).
그림2. 주요 속성에 따른 세그룹 DBMS 분류 및 예
NewSQL은 트랜잭션에 대한 ACID 보장을 유지하면서 OLTP 읽기-쓰기 워크로드에 대해 NoSQL과 동일한 확장성과 성능을 제공하는 최신 관계형DBMS 유형입니다. NewSQL DBMS는 데이터와 인덱스 등 모든 데이터를 메인 메모리에 저장하는 메인 메모리 스토리지, 데이터베이스를 파티션(partion) 또는 샤드(shard)라고 부르는 분리된 부분집합으로 나누는 파티셔닝, 데이터가 업데이트될 때 데이터베이스에 새로운 튜플을 생성하는 분산형 멀티버전 동시성 제어(MVCC), 그리고 충돌 복구와 복제 등 기존에 여러 DBMS에서 개별로 구현된 핵심기술을 단일 플랫폼에 통합했습니다. 결코 간단치 않은 엔지니어링의 승리입니다. 약점은 아직 널리 알려지지 않아 레퍼런스 사이트와 엔지니어가 많지 않다는 것입니다. 그리고 지원하는 SQL의 범위가 아직 기존의 관계형DBMS보다 좁습니다. 범용 RDBMS로 포지셔닝 하기에는 아직 아쉬운 점이 있습니다.
표 1. OldSQL, NoSQL 그리고 NewSQL 비교
구분 OldSQL (관계형 DBMS) NoSQL (빅데이터 용 DBMS) NewSQL (분산형 RDBMS)
스키마 관계형 스키마 / 테이블 스키마 없음 둘 다 지원
확장성 읽기 확장성 (scalable read) 읽기/쓰기 확장성 수평 확장 읽기/쓰기 확장성 수평 확장
고가용성 자체 맞춤형 고가용성 자동 고가용성 빌트인 고가용성
스토리지 디스크 + 캐시 디스크 + 캐시 메인 메모리
일관성 ACID BASE기반 CAP ACID
OLTP 부분 지원 (Not Fully Supported) 지원하지 않음 지원 (Fully Supported)
성능 부하 매우 큼 중간 작음
보안 우려 아주 큼 낮음 낮음
제품 Oracle, 티베로, MySQL, PostgreSQL, 큐브리드 MongoDB, Cassandra, Redis, HBase VoltDP, Spanner, Aurora, Goldilocks
사례 금융, CRM, HR 애플리케이션 빅데이터, IoT, 사회관계망 애플리케이션 게임, 전자상거래, (고가용성), 통신, 금융 애플리케이션
Clustrix, Google Spanner, Amazon Aurora, VoltDB, NuoDB, 그리고 골디락스 등 약 15개 제품이 시장에서 경쟁하고 있습니다. 한국에서도 레퍼런스 사이트가 증가하고 있습니다. 하루에 발생하는 트랜잭션이 40억 개에 이르는 실시간 과금시스템을 운영하는 SKT는 2020년에 골디락스라는 NewSQL DBMS로 전환했습니다. KT는 '21년 상반기에 한 달간 POC를 수행 했습니다. 글로벌 클라우드 컴퓨팅 서비스를 위한 고성능·고가용 데이터베이스 기존의 값비싼 '오라클 DBMS와 UNIX 서버' 조합을 경제적이고, 확장성과 가용성이 탁월한 'NewSQL DBMS와 x86 서버' 조합으로 대치할 수 있습니다. 데이터는 항상 유효하고 정확하며, 이미 익숙한 SQL을 그대로 사용할 수 있습니다. 메인 메모리를 저장소로 사용하기 때문에 기존 관계형DBMS 보다 성능이 뛰어납니다. 트랜잭션이 증가하면 서비스 중단 없이 서버를 추가하여 처리능력을 확장할 수 있습니다(7). 일부 서버가 다운되어도 데이터베이스 서비스는 중단되지 않습니다. 그리고 UNIX 서버 시장은 이미 10여 년 전부터 빠르게 위축되어왔습니다. 10년 후에는 더욱 작아질 것입니다. 이것은 되돌릴 수 없는 추세입니다. NewSQL은 x86서버에서 고성능·고가용 데이터베이스 서비스를 제공하는 확실한 대안이기도 합니다. 앞선 기업들은 x86서버의 메모리에 데이터를 나누어 탑재하고, 이들을 클러스터로 엮어 고성능·고가용의 대용량 데이터베이스 서비스를 경제적으로 제공하는 새로운 DBMS를 적극 활용하고 있습니다. 약 15년 동안 발전해 온 NewSQL은 글로벌 클라우드 컴퓨팅 서비스 시대를 위한 새로운 분산형 RDBMS입니다. (1) 현재 사용 중인 DBMS의 종류를 알기 위해 몇 시간 동안 구글링을 했지만 찾을 수 없었습니다. 그래서 DBMS 목록을 만들어 보려 했지만 버전이 다른 것을 구분할 경우 수가 너무 많아지는 어려움이 있었습니다. 그래서 이름이 다른 DBMS들의 수를 세었습니다.
(2) 관계형DBMS는 1970년대 후반에 상용화되었습니다.
(3) SQL은 1970년대 후반에 System R 프로젝트에서 처음 만들어졌습니다.
(4) SQL을 지원하는 DBMS가 몇 종 추가되어 NoSQL을 "Not only" SQL 이라고 해석해야 한다고 주장하기도 합니다.
(5) NoSQL 카테고리에 속하는 DBMS들은 초기에 SQL을 지원하는 것이 없었지만 나중에 2~3 종이 SQL을 지원하게 되었습니다.
(6) YouTube의 동영상에는 이것을 시청한 횟수를 알려주는 'view' 카운트가 있습니다. 이 값이 동기화 되는데 몇 밀리 초 지연되는 "최종적 일관성"이 문제 될 것은 없습니다.
(7) 골디락스라는 NewSQL DBMS를 온라인으로 확장하는 동영상을 YouTube에서 볼 수 있습니다. (https://www.youtube.com/.watch?v=BIRmavP2WnE&t=2506s)