개발에 있어 필수인 데이터베이스를 이해하기 위해서는 기본적인 개념부터 알아야 한다. 오늘은 비개발자도 쉽게 이해할 수 있는 데이터베이스의 개념을 소개하고 RDBMS와 비관계형 데이터베이스인 NoSQL의 차이점 그리고 각각 어떤 상황에 사용해야 할지에 알아 보자.
데이터베이스와 DBMS
데이터베이스(DB)란 무엇일까? 데이터베이스는 쉽게 말하면 데이터의 집합이다. DB에는 다양한 유형이 존재하는데, 계층형, 망형, 관계형, 객체지향형, 객체관계형 등이 있다.
DB와 함께 많이 언급되는 DBMS는 Database Management System의 약자로 데이터베이스를 관리하고 운영하는 소프트웨어이다. 다양한 데이터가 저장된 데이터베이스는 여러 사용자 혹은 응용 프로그램에 데이터를 공유해야 하고 동시에 접근할 수 있어야 한다. 이렇게 동시에 접근할 수 있도록 해 주는 것이 DBMS의 역할이다. 대표적인 관계형 DBMS로는 MySQL, 오라클, MariaDB, PostgreSQL 이다.
RDBMS(관계형 데이터베이스)란?
관계형 데이터베이스에는 핵심적인 특징이 두 가지 있다. 데이터가 정해진 데이터 스키마에 따라 테이블에 젖아된다는 점과 데이터가 관계를 통해 여러 테이블에 분산된다는 점이다. 조금 더 쉽게 말하자면 테이블의 구조와 데이터 타입 등을 사전에 정의해야만 하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 잇는 것이다. 따라서 데이터를 정확하게 입력했다면 매우 수월하게 사용할 수 있다.
NoSQL(비관계형 데이터베이스)란?
NoSQL 데이터베이스는 테이블 형식이 아니며, 관계형 테이블과는 다른 방식으로 데이터를 저장한다. 데이터 유형에 따라 다양한 유형을 갖추고 있으며, 주요 유형으로는 문서, 키, 값, 와이드 컬럼, 그래프 등이 있다.
NoSQL이라고 해서 꼭 스키마가 없는 것은 아니다. 유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장할 수 있다는 점이 큰 장점이다. 또한 데이터를 읽어올 떄 스키마에 따라 데이터를 읽어 온다.
RDBMS VS NoSQL, 차이점
RDBMS의 경우 데이터를 SQL 언어를 통해 테이블에 저장한다. 미리 저장된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야만 한다.
NoSQL의 경우 Key-Value, document, wide-column, graph 등의 방식으로 데이터를 저장한다.
스키마는 데이터베이스 전체 또는 일부의 논리적인 구조를 표현하는 것으로 데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타낸다.
RDBMS를 사용하려면 고정된 스키마가 필요하다. 처리하려는 데이터 속성별로 열에 대한 정보를 미리 정해야만 데이터 처리가 가능한 것이다. 스키마는 나중에 변경할 수 잇지만, 데이터베이스 전체를 수정하거나 오프라인으로 전환해야할 수도 있기 때문에 처음에 신중하게 스키마를 정의해야 한다.
NoSQL에서는 관계형 데이터베이스에 비해 유연하게 스키마의 형태를 관리할 수 있다. 행을 추가할 떈 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다.
쿼리는 데이터베이스에 대해서 정보를 요청하는 행위이다. SQL 기반의 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야 한다. 요청하는 방식이 정해져 있기 때문에, SQL언어와 같이 구조화된 쿼리 언어를 사용하는 것이다.
NoSQL의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있기 때문에 구조화되지 않은 쿼리 언어로도 데이터를 요청할 수 있다. 이를 UnQL이라고 부른다.
SQL 기반의 관계형 데이터베이스는 수직적으로 확장하며 높은 메모리아 CPU를 사용한다. 데이터베이스가 구축된 하드웨어의 성능을 많이 사용하므로 비용이 비싼 편이며, 여러 개의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 오래 걸리는 것이 단점이다.
NoSQL로 구성된 데이터베이스는 반대로 수평적으로 확장한다. NoSQL 데이터베이스를 위한 서버를 추가로 구축하게 되면 많은 트래픽을 편리하게 처리할 수 있다는 장점이 있다. SQL보다 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅 할 수 있어 상대적으로 비용이 저렴한 것이 특징이다.
어떤 데이터베이스를 사용할까?