완벽한 다음 행보는 없다.

독자적으로 진행했던 RDBMS 선택 과정 - 1. 기준 세우기 본문

RDBMS

독자적으로 진행했던 RDBMS 선택 과정 - 1. 기준 세우기

We On Fire 2021. 4. 11. 02:33

개발공부 할 때, 자기계발을 주제로 한 안드로이드 앱을 개발했었다. VOD, 게시판, 채팅 기능을 넣으려고 했었고 그때 사용할 RDBMS를 선정하기 위한 공부를 했었는데, 그 과정에 대한 기록이다.

 

선택기준

1. 빠른 처리 속도.

요청받은 쿼리문을 빠르게 처리하는 데이터베이스를 원했다. 처리속도가 느리면 그것은 곧 이용자가 기다려야 하는 시간이 늘어남을 뜻하고, 나는 그것을 원하지 않았다.

쿼리문 비율

데이터베이스마다 쿼리문을 처리하는 방식이 다를 것이라 생각했다. 만약 그렇다면 데이터베이스마다 쿼리문 종류에 따른 처리속도가 다를 것이라고 판단했다. 예를들어 A 데이터베이스는 select가 빠르고 B 데이터베이스는 Insert 처리 속도가 빠를 수 있을 것이라 생각했다. 그래서 서비스가 가장 많이 사용하는 쿼리문을 빠르게 처리하는 데이터베이스를 선택하면 좋을 것이라고 판단했다. 

VOD 목록, 게시글 목록, 채팅방 목록, 채팅 목록, 친구 목록 등 데이터를 불러오는 기능이 가장 사용될 것이라고 생각했다. 이후 글쓰기, 채팅 메시지 전송 같은 데이터 삽입이 많을 것이라 판단했고 업데이트, 삭제 순으로 많을 것이라 생각했다. 그래서 실제 사용될 쿼리문의 비율을 select 70% insert 25%, update 3%, delete 2% 로 잡았다.

2. 안정성

내가 세웠던 안정성의 기준은 부하가 심할 때에도 버틸 수 있는가, 즉 많은 요청이 갑자기 들어왔을 때 이를 얼마만큼 소화해낼 수 있는가 였다.

3. 무료

내가 스스로 개발하고 관리하는 서비스를 기획했기 때문에 소규모의 서비스로 시작하려고 했었다. 그렇다면 굳이 유료 데이터베이스를 쓸 필요가 없다.

4. OLTP (OnLine Transaction Processing)

OLTP는 온라인 트랜잭션 처리의 약자로, 데이터베이스의 환경이 여러 사용자의 요청(트랜잭션) 처리에 집중한 개념이다. 흔히 생각하는 서비스의 서버 - 클라이언트 환경이라고 생각하면 된다. 다른 개념으로는 OLAP(OnLine Analytical Processing) 라는 것이 있는데 이는 적재된 데이터를 가공하는 프로세스에 집중하는 개념이다. 내가 만들 서비스는 OLTP 환경이므로 그에 적합한 RDBMS도 선택 기준이 되었다.

5. 레퍼런스가 많은가

1인 개발자로서 서비스를 제공할 때, 레퍼런스가 많은 것은 매우 중요하다. 특히 경험이 적은 개발자일수록 중요하고, 또한 내가 알지 못하는 문제가 닥쳤을 때 이 문제를 해결했던 다른 사람의 자료가 있을 확률이 높다. 물론 레퍼런스가 많다고 무조건 좋다고 할 수는 없다. 하지만 나에게 필요한 데이터베이스 후보들이 있고, 레퍼런스가 많은 데이터베이스가 있다면 좋은 기준이 될 수 있을 것이다.

 

 

기준을 어느정도 정하고 나니 고민이 깊어진다. 왜냐하면 내가 세운 기준들을 충족하는 데이터베이스가 정말 많이 존재하기 때문이다. db-engines.com 만 가보아도 RDBMS 종류는 200가지가 넘는다. 또한 RDBMS의 종류도 다양했다. 디스크기반, 메모리기반, 분석용, Column-oriented database, multi-model 제공하는 dbms 등.

 

그러면 어떠한 데이터베이스를 선택하면 좋을까? 책을 보아도 작동 원리, 구조, 사용방법 등에 대한 내용이 나올 뿐 다른 RDBMS 보다 빠르다 라는 식의 내용은 찾기 힘들었다. 인터넷에서 벤치마크 결과 자료가 있지만 자기네 제품을 홍보하려는 목적이 많았고, 또한 자료 결과만 덥썩 믿고 결정을 내리기보다는 좀 더 공부하고 싶었다.

 

그러면 이 모든 데이터베이스들의 구조와 코드를 파고들어 어떤 것이 내가 선정한 기준에서 가장 좋은 퍼포먼스를 낼 것인지 이론적으로 결과를 도출해내야 할까? 그러기엔 내가 가진 능력에 비해 너무 난이도가 높았고, 언제 끝날지 모를 일이 되어버릴 것이다. 그래서 고민을 거듭한 끝에 나는 벤치마킹을 진행해보기로 결정했다. 실제로 성능을 테스트해 보고 그 결과를 기반으로 공부하면 좋을 것이라고 판단했다. 

 

 

Comments