처음 데이터 베이스에 대해 배울 때, Oracle을 배웠기 때문에 모든 데이터 베이스가 Oracle과 같은 줄 알았다. 하지만 정보처리기사를 준비하면서 Oracle 같은 관계형 데이터베이스만 있는 게 아니라 NoSQL이라는 것도 있다는 것을 알게 되었고 이번에 정리해보는 기회를 가지려고 한다.
기본 개념
DataBase란?
→ 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리하는 데이터의 집합.
DBMS란?
→ DataBase Management System의 줄임말로, 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터 베이스를 관리해주는 소프트 웨어이다.
SQL이란?
→ Structured Query Language의 줄임말로, 관계형 데이터베이스에 저장된 데이터를 관리하기 위해 설계된 프로그래밍 언어.
스키마란?
→ 데이터베이스를 구성하는 개체, 속성, 관계 및 제약조건 등에 관해 전반적으로 정의한 메타데이터의 집합.
이 정도면 앞으로 설명할 RDBMS와 NoSQL을 이해하기 위한 기초 지식을 습득했다고 할 수 있다.
지금부터 RDBMS와 NoSQL에 대해 알아보도록 하자!
관계형 데이터베이스 관리 시스템(RDBMS)란?
앞에서 설명한 DBMS에서 R이 추가된 모습이다. RDBMS의 풀네임을 적어보면 'Relational DataBase Management System'이다. 번역하면 위에 소제목과 같이 '관계형 데이터베이스 관리 시스템'이다.
그러면 관계형 데이터베이스(Relational DataBase)는 뭘까?
관계형 데이터베이스는 관계형 데이터 모델에 기초를 둔 데이터베이스이다. 여기서 말하는 관계형 데이터 모델은 데이터를 구성하는 방법 중 하나로 모든 데이터를 2차원 테이블 형태로 표현하는 것을 말한다.
그러면 관계형 데이터베이스는 2차원 테이블 형태로 표현한 데이터베이스라고 할 수 있고, 각각의 속성과 값을 가진 테이블들은 서로 관계를 맺으며 존재한다.
더 나아가 관계형 데이터베이스 관리 시스템(RDBMS)은 2차원 테이블 형태로 표현한 데이터베이스를 생성하고 저장, 관리하는 소프트웨어라고 할 수 있다.
RDBMS의 특징
- 모든 데이터를 2차원 테이블로 표현 → 테이블은 row와 column으로 이루어진 기본 데이터 저장 단위.
- 관계를 맺은 테이블의 집합이다.
[장점]
- 만들고 이용하는 것이 쉽고, 확장이 용이하다.
- 데이터의 분류, 정렬, 탐색 속도가 빠르다.
- 작업의 완전성을 보장한다.
- 데이터의 UPDATE가 빠르다.
- 구조화된 언어인 SQL로 데이터를 다룰 수 있다.
[단점]
- 스키마로 인해 데이터가 유연하지 못하다. 스키마가 변경할 경우 매우 번거롭고 어렵다.
- 테이블 간 관계를 맺으므로 Join을 사용할 경우 쿼리문이 복잡해진다.
- 시스템 성능 향상을 위해 Scale-up만 지원하며, 많은 비용이 발생한다.
NoSQL이란?
NoSQL은 'Not only SQL'의 줄임말이다. 이 말의 뜻은 NoSQL이 등장하게 된 계기를 보면 이해할 수 있다.
오랫동안 사용되던 RDBMS방식으로는 처리할 수 없을 만큼 복잡하고 큰 데이터들의 등장으로, 그리고 SNS와 같은 빠른 처리속도를 요구하는 서비스가 등장하면서 NoSQL이 부각되기 시작했다. 즉, RDBMS의 한계를 극복하고자 사용하는 것이 NoSQL이다.
NoSQL의 특징
- RDBMS와 달리 테이블 간의 관계를 설정하지 않는다.
- RDBMS에 비해 대용량의 데이터를 저장할 수 있다.
- 분산형 구조이다. → 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 발생해도 데이터 유실이나 서비스 중지가 발생하지 않도록 한다.
- 고정된 스키마가 없다.
[장점]
- RDBMS에 비해 저렴한 비용으로 분산처리와 병렬 처리가 가능하다.
- 비정형 데이터 구조 설계로 설계 비용이 감소한다.
- Big Data 처리에 효과적이다.
- 가변적인 구조로 데이터를 저장할 수 있다.
- 데이터 모델의 유연한 변화가 가능하다.
[단점]
- 데이터 업데이트 중에 장애가 발생하면 데이터 유실이 발생할 수 있다.
- 많은 인덱스를 사용하려면 충분한 메모리가 필요하다.
- 데이터 일관성이 항상 보장되지 않는다.
어느 쪽이 더 좋은 기술인가?
RDBMS의 한계를 극복하기 위해 등장한 NoSQL이 더 좋은 기술이라고 할 수 있을까?
당연히 'NO'다. 양쪽 중 어느 쪽이 좋은 기술인지 따지는 것 자체가 무의미한 인력 낭비이다. 차라리 그 시간에 어떤 경우에 RDBMS와 NoSQL을 사용하는 것이 좋을지 찾아보는 게 더 유익하다.
○ RDBMS를 사용하기 좋은 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션일 경우에 좋다. (→ NoSQL에서는 여러 컬렉션을 모두 수정해야 하기 때문)
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우에 좋다.
○ NoSQL을 사용하기 좋은 경우
- 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우에 좋다.
- 읽기 처리는 자주 하지만, 데이터를 자주 변경할 일이 없는 경우에 좋다. (→ 한 번의 변경으로 수 십 개의 문서를 업데이트할 필요가 없는 경우)
- 데이터 베이스를 수평으로 확장해야 하는 경우에 좋다. (→ 막대한 양의 데이터를 다뤄야 하는 경우)
▽ 도움을 주신 분들
'DataBase' 카테고리의 다른 글
[Oracle] ORA-01008 : not all variables bound (0) | 2023.02.13 |
---|---|
[MariaDB] Truncated incorrect decimal value '' (0) | 2023.02.02 |
[DataBase] 기본 키를 여러 개 설정한다고?? (2) | 2022.09.29 |
[DataBase] 정규화에 대해 알아보자! (0) | 2022.07.21 |
[DataBase] Join을 왜 써야 하지?(+ Join 종류) (0) | 2022.07.07 |