블록체인과 SQLGate, 그리고 Tendermint

Tendermint based Data Audit Storage Development Story

블록체인과 ICO

비트코인, 이더리움을 지탱하는 기술인 블록체인은 “인간과 인간” 사이의 신뢰 시스템을 “알고리즘, 컴퓨터”로 변화시켰다는 점, 인터넷의 급격한 성장을 가져온 “중개자”들의 힘을 약화시키며 나름대로 쓰임새를 찾아가고 있는 과정이라 생각됩니다.

하지만 최근 유행처럼 많은 스타트업이 진행하고 있는 블록체인 기반의 새로운 자금 조달 방법인 ICO(Initial Coin Offering)들을 보면 ‘블록체인이 꼭 필요한가?’, ‘토큰 이코노미’가 정말 동작할 수 있나?, ‘전 세계를 대상으로 서비스하겠다는데 그만한 처리량과 성능을 감당할 수 있는 블록체인 플랫폼이 있나?’ 라는 질문을 던지지 않을 수 없습니다.
스타트업의 본업은 시장의 문제, 혹은 고객이 겪고 있는 문제가 무엇인지를 정확하게 인지하고 기존 기업들이 접근하지 않던 다양한 방법을 빠르게 시도하고 고객의 반응을 보며 급격하게 성장해 나가는 것이라 생각하는데, 고객의 문제가 중심이 아니라 블록체인만을 중심에 두고 있는 회사들이 많다 보니 저희는 ICO도, 블록체인이라는 단어도 매우 불편해져 버렸습니다.

하지만 체커가 풀고자 하는 문제에 블록체인은 매우 적합한 기술이었고, 이를 SQLGate와 어떻게 연동하고 구현했는지 소개하고자 합니다.

SQLGate

SQLGate는 데이터베이스 관리자, 데이터베이스 기반 응용 애플리케이션을 개발하는 개발자를 위해 만들어진 데이터베이스 관리/개발 소프트웨어입니다. 물론 SQLGate는 생산성을 증대시키기 위한 도구이기 때문에 SQLGate 없이도 데이터베이스를 구축하고, 테이블을 만들고, 데이터를 넣을 수 있습니다.

하지만 생산성은 곧 시간과 돈으로 환산되고 시간이 지날수록 데이터베이스 복잡도는 예측할 수 없을 정도로 커지다 보니 SQLGate는 대한민국의 많은 대기업, 금융, 증권, 공공 부문에 고객을 확보하고 있습니다.


Data Driven Business

2012년, 세계경제포럼에서 가장 주목해야 하는 기술로 빅 데이터가 선정되면서 전 세계의 기업들은 지속 성장을 위해 빅 데이터를 도입하기 시작했습니다. 하지만 몇 년이 지난 지금, 빅데이터 제대로 하고 있다는 회사, 찾기 어려운게 사실인 것 같습니다.

데이터를 모으는 단계도 중요하지만, 데이터가 제대로 사용되기 위해서는 데이터에 숨어있는 의미를 찾기 위해 끊임없이 정제하고 분석하는 과정이 수반되어야 합니다.

이를 위해서는 기획/마케팅/데이터분석가들이 데이터베이스에 쉽게 접근하고, 분석하고, 시각화하며 이를 기반으로 협업할 수 있는 시스템이 필요합니다.

이미 시장에는 Tableau, Chartio, DataHero 등 다양한 데이터 분석/시각화 도구들이 있습니다. 하지만 기업의 데이터베이스는 IT 조직에 의해 구축되고, 데이터를 수집하고, 유지관리 되기때문에 기업내에서 데이터를 빠르게 공유하기 위해서는 IT조직과 비 IT 조직간의 협업이 필수적이라 판단하고 있습니다.

따라서 IT 조직을 위한 데이터베이스 도구를 만들었던 경험을 토대로 SQLGate를 전사 조직에서 사용할 수 있는 데이터 협업 및 보안 솔루션으로 만드는 것이 체커의 현재 미션입니다.


뭐? 기획자, 마케터가 데이터베이스에 접근한다고?

아마 이런 질문을 던지는 분들이 계실 것 같습니다. 데이터베이스에는 돈으로 환산할 수 없는 어마어마한 양의 기업 데이터가 보관되어 있고, 이를 철통같이 보안하기 위해 IT 조직은 보안점검, 보안감사 등을 수행하며 수문장 역할을 하고 있을 테니깐요.

하지만 앞서 이야기한 것처럼, 데이터 기반의 비즈니스를 하기 위해서는 적재적소에 원하는 데이터를 꼭 필요한 사람이 접근할 수 있어야 합니다. 최근 추세를 보면 소위 잘나간다는 스타트업의 기획/마케터 포지션에 있는 분들을 보면 “SQL”을 “영어” 하듯 기본으로 생각하는 분들이 실제로 많고, 잘 하시는 분들도 꽤 많습니다.

결국 빠르게 성장하는 조직은 데이터에 대한 접근이 비교적 자유롭고, 데이터를 통한 고객분석, 시장예측, 앞으로의 방향성을 잘 보고 있다는 의미겠지요. 하지만 대부분 회사는 기업내 자산인 데이터베이스를 이렇게 누구나 접속하도록 내버려두진 않겠죠.

하지만 이 세 가지가 만약 가능하다면, 어떨까요?

  • 필요한 데이터에만 접근할 수 있도록 하는 접근제어
  • 데이터베이스 정보를 노출하지 않고 안전하게 접근할 수 있도록 하는 계정관리
  • 누가, 언제, 어디서 데이터베이스에 접속했는지, 또 어떠한 SQL 을 실행했는지를 투명하게 관리할 수 있는 보안감사

게다가 이렇게 안전하게 보호되는 시스템하에서 IT 조직과 비 IT조직은 SQLGate를 기반으로 빠르게 소통하고, 데이터를 주고받으며 효율적으로 업무 생산성을 높여간다면 기업내의 강력한 데이터 협업/보안 솔루션이 될수 있을 거라 생각합니다.

SQLGate블록체인

데이터베이스 시장을 잘 아시는 분이라면, “접근제어”, “계정관리”, “보안감사” 모두 되는 데이터베이스 보안 솔루션은 이미 시장에 많고, 게다가 너무 치열한 시장이라 어려울 수 있다고 이야기할 수 있습니다.

데이터 유출사고 중 가치가 높고 민감한 데이터 일수록 내부자 소행 비중이 컸다.

하지만 기존 제품들이 놓치고 있는 가장 큰 문제점 중 하나는 “내부의 적”을 효과적으로 통제할 수 없다는 부분입니다.

데이터베이스 보안 솔루션을 관리하는 관리자를 매수한다면 내부의 데이터를 흔적없이 빼내갈 수 있는 게 현실이기도 하고요. 이런 일이 가능한 가장큰 이유는 데이터 접근기록과 감사기록이 보안 솔루션 내의 단일 데이터베이스에 저장되기 때문입니다.

결국 보안관리자가 데이터를 유출 시킨 후에 보안 솔루션 내에 있는 데이터베이스에서 접근 기록을 지우면 완벽한 범죄가 되는거죠.

이 문제를 어떻게 해결할지 다양한 방법들을 고민하다, 블록체인이 적합한 수단이 될 것 같다는 판단을 내렸고, 결국 블록체인의 몇가지 특징을 살려서 한번 생성되면 절대 변조되지 말아야 할 데이터베이스 접근기록, SQL 실행기록, 데이터 Export 기록 등과 같은 로그성 데이터를 대량으로, 빠르게 기록할 수 있는 저장소를 개발하게 되었습니다


블록체인

사토시 나카모토가 개발한 비트코인을 잘 살펴보면 블록체인은 전혀 없던 새로운 기술이라기 보단 기존에 있던 다양한 기술의 조합 (P2P, PKI, Merkle Tree, ECC, SHA, PoW )과, 보상과 인간의 심리를 잘 활용한 사회과학적 결과물이라 생각합니다. 
( 자세한 내용은 자사가 발표한 비트코인을 중심으로 이해하는 블록체인 포스팅을 참고하세요. )

결국 비트코인, 이더리움, EOS, ORBS와 같은 플랫폼이 블록체인이 전부가 아니라 생각하며, 서비스/제품을 개발하는 회사라면 자신의 문제를 가장 잘 해결할 수 있는 블록체인 모습과 구조를 설계해야 한다고 생각합니다.

  • 블록체인을 구성하는 기술 중 어떤 기술이 우리 문제를 해결하는데 적합한 도구가 될 수 있는지를 잘 고민하고 연구
  • 이를 사용자가 불편하지 않도록, 또는 느끼지 못할 정도로 자연스럽게 서비스/애플리케이션에 통합.
  • 문제가 발생했거나, 중요한 순간에 블록체인이 제 역할을 할 수 있도록 서비스를 잘 구성하고 이해관계자를 끌어들이는 일.

이것이 체커가 정의하는 블록체인이며 우리가 개발하는 블록체인의 모습입니다.


Tendermint

여러 기술을 조사하고 연구하던 도중, Tendermint는 우리가 설계하고자 하는 “신뢰성 있는 데이터 저장소”를 구현하기에 가장 적합한 엔진이었습니다.

Tendermint는 노드 간의 통신을 위한 P2P, 분산 합의를 위한 PBFT 알고리즘, 높은 수준의 처리량을 가지고 있는 블록체인 엔진으로 Cosmos 프로젝트에 사용되고 있었고, 문서화 수준이나 코드 완성도도 매우 높은 수준이었습니다.

Tendermint Architecture

Tendermint는 ABCI(Application BlockChain Interface)라는 인터페이스를 통해 합의 과정 중 발생하는 CheckTx, TxResult, DeliverTx, BeginBlock, EndBlock, Commit 등의 이벤트를 애플리케이션과 주고 받으며 동작하도록 설계되어 있어 Tendermint Core를 건들지 않고도 Tendermint의 기능을 최대한 활용할 수 있는 애플리케이션을 빠르게 구현할 수 있었습니다.

Tendermint의 합의 과정

또한 ABCI를 Java(jABCI), JavaScript(jsABCI), Python(PyABCI), C++(cpp-tsmp) 등으로 제공하고 있어 언어의 선택폭 또한 다양합니다.(https://tendermint.com/ecosystem)


Architecture Blueprint

SQLGate, SQLGate Drive, 그리고 Drive Audit Storage

우리는 이 프로젝트를 SQLGate Drive로 임시 명명하고, SQLGate에서 발생하는 모든 데이터를 Drive API를 통해 Tendermint로 전달하도록 했습니다.
로그를 전달받은 Tendermint는 합의 과정을 거치며 모든 노드에 동일한 로그 데이터를 복제함과 동시에 ABCI 애플리케이션에도 전달하도록 되어 있고, ABCI 애플리케이션은 MySQL, MongoDB, HBase와 같은 저장소에 한 번 더 복제하도록 되어 있습니다.

단일 저장소에 로그 기록이 저장되어 조작이 가능했던 이전과는 다르게, 내부자는 어디에 있는지도 모르는 데이터 노드를 전부 찾아서 Tendermint와, ABCI 데이터베이스 두군데 모두를 조작해야 합니다.

허나, 설령 조작한다고 하더라도 조작된 데이터는 해시 검증에 실패하게 되며 단 하나라도 노출되지 않은 노드가 있다면 어떤 데이터가 조작되었는지 추적할 수도 있습니다.

결국, 단일 데이터베이스에서 발생한 데이터 조작 이슈를 블록체인의 P2P, 분산복제, 합의라는 특징으로 해결하고자 했으며 이를 위해 가장 적합한 엔진인 Tendermint를 사용해 빠르게 구현과 테스트를 진행했습니다.


성능

1CPU / 2GB 사내 KVM 가상머신 서버를 대상으로

Apache Benchmark를 통해 다음과 같이 테스트를 진행했습니다.
ab -p data.json -T application/json -c 200 -n 5000

data.json

5000개 요청을 초당 200개 수준으로 처리할 수 있었습니다. 물론 테스트가 https가 아니라 http 기반이었다는 점, 단일 머신에서 스레드로 요청을 보냈다는 점 등 제대로 된 성능테스트를 할 수 있는 환경은 아니었지만, 전통적인 웹 서비스의 Scale Out 기법을 활용하면 https기준 3000TPS 정도는 충분히 만들어낼 수 있을것 같습니다. 이정도면 SQLGate 3~50000 클라이언트는 거뜬히 처리할 수 있는 수준으로, 상용화에 큰 문제는 없을 것으로 보입니다.


Spring Boot 기반 Tendermint Demo Application

https://github.com/chequer-io/tendermint-java-demo

  • Spring Boot
  • Spring Data JPA
  • MySQL
  • jABCI
  • Tendermint

본격적인 개발 전에 Tendermint를 PoC했던 데모 애플리케이션을 Github에 올려두었습니다. Tendermint를 고려하고 계신다면 참고해보세요.


마치며

지금까지 체커가 왜 SQLGate에 블록체인을 접목하려고 하는지, 또 어떤 블록체인 기술을 활용하여 구현하고자 했는지를 간단히 설명했습니다. 서두에 블록체인, ICO에 대한 부정적이고 어두운 면에 대해 언급한 이유는 대한민국의 많은 회사가 블록체인을 위한 블록체인이 아니라 고객과 문제해결을 위한 블록체인을 고민하여 연구 개발하면 좋겠다는 제 개인적인 생각이니 너그럽게 이해해주시면 좋겠습니다.

또한 체커에서는 업계 최고의 인력들과 함께 일할 개발자를 상시 모집하고 있습니다. 현재 블록체인 스토리지 및 Java 애플리케이션 개발 포지션이 열려있습니다. 회사에 대한 자세한 내용과 채용공고는 Workable에 있습니다.

http://www.sqlgate.com