※ 틀린 정보가 있을 수 있으니 양해 바랍니다.
새로운 프로젝트를 시작하다 보면, 어떤 DBMS를 사용해야 할지 선택하는 순간이 옵니다. 본인에게 가장 익숙하고 쉬운 DBMS를 선택하는 것도 방법 중에 하나지만, 시작하는 프로젝트의 특징을 알고 그거에 맞는 DBMS를 선택하는 것이 프로젝트 진행에 있어서 효율적인 방법일 것입니다.
이번 포스트에서는 DBMS(Database Management System)의 종류와 특징을 알아봅시다.
DBMS 분류
DBMS는 크게 RDBMS와 NoSQL로 나뉘어져 있습니다.
RDBMS | NoSQL |
테이블 간 관계를 정의 | Key-Value, Document, Wide Column, Graph |
명확한 데이터 구조 보장 | 자유로운 데이터 구조를 가짐 |
정해진 스키마로 인해 데이터가 유연하지 못함 | 데이터 중복이 발생할 수 있음 |
주니어든 시니어 개발자든 상관 없이 RDBMS와 NoSQL에 대해서 많이 들어보셨을 겁니다. 주로 사용하는 것은 RDBMS지만, 데이터 특징에 따라 NoSQL을 사용하는 곳도 부지기수입니다.
NoSQL은 네가지 종류로 나뉠 수 있는데, Key-Value DB, Document DB, Wide-Column DB, Graph DB입니다. 자세한 내용은 아래에서 확인해 보도록 하겠습니다.
RDBMS 선택 가이드
프로젝트 성향에 따라 RDBMS로 정했다고 가정하고, 선택 가이드를 진행해 보도록 하겠습니다. RDBMS에서 주로 많이 사용되는 네가지 DBMS만을 다루었습니다.
Q-1. 돈을 지불해서라도 최고의 성능을 누리고 싶은가?
A. No → Q-2로 이동
B. Yes → Oracle
아마 많은 분들이 들어보셨을 Oracle입니다. 입증된 제품으로 우수성이 뛰어나고, 그만큼 많은 사용자가 존재한다는 장점이 있습니다. 성능이 우수해 대량의 데이터를 처리하기 좋아서 주로 대기업에서 사용한다고 하네요.
그러나 모든 장점을 상회하는 단점이 있으니, 다른 DBMS와는 다르게 "유료"라는 것입니다. 저는 무료, 오픈소스를 너무나 좋아하는 사람이라, 아마 회사에서 지원해 주지 않으면 사용해보는 일은 없지 않을까라는 생각이 드네요.
Q-2. INSERT 위주인가? UPDATE가 자주 일어나지는 않는가?
A. No → Q-3로 이동
B. Yes → PostgreSQL
요즘 들어서 뜨고 있다는 PostgreSQL입니다. "무료" 오픈소스이며 여러 언어를 지원합니다. 그에 따라서 다양한 운영체제를 지원한다고 하니 사양이 맞지 않을까 걱정할 일은 없어 보입니다. 대용량 데이터 처리를 위한 기능이 구현되어 있습니다.
그러나 UPDATE 위주의 서비스에서는 성능이 불안정하다고 합니다. 수정 작업이 빈번히 발생하는 프로젝트에서는 사용을 안하는 것이 좋을 것 같습니다.
Q-3. 효율이 비교적 좋지 않아도, 많은 레퍼런스가 있는 것이 좋은가?
A. Yes → MySQL
레퍼런스 굉장히 중요합니다. 어떤 툴을 다루다가 막혀서 구글링을 했을때, 검색 결과가 1, 혹은 2페이지 정도로 적으면 그때의 좌절감은 이루 말할 수 없습니다. 그러나 MySQL에 한해서는 그런 일은 없을 것 같습니다.
개발자가 가장 많이 쓰는 RDBMS 1위로, 무료 프로그램입니다. 물론 상업적 사용 시 유료라고는 하지만, 회사의 지원이 있으면 걱정 없을 것 같습니다. Oracle이 대기업에서 많이 사용한다면, MySQL은 다수의 중소기업에서 많이 사용한다고 합니다.
B. No → MariaDB
MySQL과 관련이 깊은 MariaDB입니다. MySQL의 개발자들이 몇몇 모여 만든 DBMS라 MySQL과 굉장히 유사합니다. 물론 무료이며, MySQL처럼 많은 운영체제에서 실행 가능합니다. MySQL보다 뒤에 나온 DBMS이기 때문에 MySQL의 몇몇 단점들을 제거 및 대체하여 효율이 더 좋습니다.
그러나 비교적 최근에 나온 DBMS이기 때문에 사용 점유율은 낮은 편입니다. 관련 레퍼런스는 적을 수 있지만, 그에 상관없이 효율을 중시하는 개발자라면 딱 맞는 DBMS입니다.
NoSQL 선택 가이드
이번에는 NoSQL을 선택했다고 가정하고, 가이드를 진행해 보겠습니다.
Q-1. 데이터의 양이 많은가?
A. No → Q-2로 이동
B. Yes → Document DB
Document DB는 Key-Value 형태로, value는 Document가 될 수 있습니다. 관계형 DB에서의 여러 테이블 데이터를 하나의 Document로 모아둘 수 있습니다. 그러나 NoSQL의 특성상 Join을 지원하지 않습니다.
주로 로깅 시스템, 인터넷 상거래 시스템에 사용됩니다. 종류로는 MongoDB, CouchDB 등이 있습니다.
Q-2. 데이터 접근이 빨라야 하는가?
A. No → Q-3로 이동
B. Yes → Key-Value DB
Key-Value 형태로 저장되며, 저장과 조회라는 가장 간단한 원칙에 충실한 데이터베이스입니다. 조회 속도가 굉장히 빠르며, 값에 모든 데이터 형을 허용합니다. 그러나 역시 NoSQL이기 때문에 Join을 지원하지 않는다는 단점이 있습니다.
데이터 캐싱, 장바구니 같은 일시적인 속성을 추적하는데 주로 사용되며, 종류로는 Redis가 있습니다.
Q-3. 관계를 표현해야 하는가?
A. Yes → Graph DB
Graph DB는 데이터를 노드로, 노드 사이의 관계를 엣지로 표현했습니다. RDBMS와 비교해서 퍼포먼스가 좋습니다.
주로 SNS등에 사용되며, 종류로는 Neo4j, Blazegraph가 있습니다.
B. No → Wide Column DB
행마다 키와 해당값을 저장할 때마다 각각 다른 수의 스키마를 가질 수 있습니다. 위에 이미지에서 알 수 있듯이, Bob은 email, gender, age의 세 개의 컬럼을 가지지만, Britney는 email, gender의 두 가지만 가지고 있습니다. 쿼리 동작 속도가 빠르며 확장성이 뛰어납니다. 종류로는 Cassandra, HBase가 있습니다.
'DevOps' 카테고리의 다른 글
협업 할 때 쓰이는 여러가지 Git 명령어 (0) | 2022.07.21 |
---|