일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DevOps
- event loop
- 자바스크립트
- EKS
- dockerfile
- Python
- elasticsearch
- terraform
- leetcode
- EC2
- YAML
- IAM
- docker
- Service
- asyncio
- ebs
- Deployment
- Kubernetes
- AWS
- github
- ansible
- WSGI
- 쿠버네티스
- intervals
- asgi
- Django
- K8S
- POD
- IAC
- FastAPI
- Today
- Total
궁금한게 많은 개발자 노트
RDBMS와 NoSQL의 차이 본문
RDMS와 NoSQL의 차이에 대해 명확히 알아보고자 정리를 해보려 합니다.
개인적인 정리 차원에서 시작한 것도 있지만, 많은 분들에게 도움이 되었으면 하는 마음에 작성하게 되었습니다.
DB의 구성요소나 DBMS의 장단점 등 세부적인 내용에 집중하기 보다, 주제인 RDBMS와 NoSQL의 차이점에 대해 살펴보려 합니다. 그럼 우선, 간단히 각 키워드에 대해 소개하고 RDBMS와 NoSQL의 차이점에 대해 자세히 알아보려 합니다.
DataBase는 조직이나 개인이 관리하는 데이터의 체계적인 집합으로, 효율적으로 관리하기 위해 구성된 구조화된 데이터 모음입니다. 간단히 말해서 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 컴퓨터 시스템에 전자 방식으로 저장되어 관리하는 데이터의 집합입니다.
DataBase는 구조화된 데이터를 저장하는데 사용되는 특정한 소프트웨어인 DBMS(DataBase Management System)에 의해 관리됩니다. DBMS는 데이터베이스를 생성, 수정, 관리하고 검색하는데 사용되는 일련의 소프트웨어 도구와 서비스를 제공합니다. 간단히 말하면 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 생성된 데이터베이스를 관리해주는 소프트웨어입니다.
DBMS의 역할로는 데이터를 보호하고 유지해줍니다. 관리하는 데이터의 무결성, 일관성, 보안, 백업 및 복구 등을 보장하여 데이터베이스의 안정성과 신뢰성을 유지시켜 줍니다.
DBMS는 사용 목적과 요구 사항에 따라 다양한 유형으로 분류됩니다. 계층형, 관계형, 객체지향, NoSQL 등이 있으며 여기서 관계형 DBMS와 주로 비교되는 NoSQL DBMS에 대해 보다 자세히 알아보려 합니다.
이름에서 알 수 있듯 NoSQL은 SQL을 사용하지 않고 RDBMS는 사용하는 것 같은데 SQL은 무엇인지 알아보겠습니다.
SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터를 저장, 검색, 수정, 삭제하는 데 사용되는 표준 언어입니다. 즉, 관계형 데이터베이스 관리 시스템에 저장된 데이터를 관리하기 위해 설계된 언어입니다.
SQL은 DBMS에서 지원되며 명령어와 함수로 이루어져 있습니다. 가장 기본적인 명령어가 잘 알고 있는 CRUD를 지원하기 위한 SELECT, INSERT, UPDATE, DELETE등입니다. SQL은 간단하고 직관적이어서 강력한 언어이며, 데이터베이스에서 대규모 데이터 집합을 처리하는데 유용하게 사용합니다.
그렇다면 이러한 SQL을 사용하는 RDMS는 어떤 장단점이 있으며, 또 강력하다고 소개된 SQL을 사용하지 않는 NoSQL DBMS는 어떤 장단점이 있을지, 각각은 어떤 용도로 사용하는지 알아보면 좋을 것 같습니다.
RDBMS(Relational DBMS)는 관계형 데이터베이스입니다. 데이터를 테이블 형태로 저장하고 관리하는 데이터베이스로, 일반적으로 앞서 설명드린 SQL을 사용해서 데이터를 관리합니다. 데이터를 저장하는 테이블은 Row, Column 열과 행으로 구성되며 Column은 특정 데이터 타입에 따라 정의됩니다. 이러한 데이터를 저장하는 테이블간에 관계를 설정할 수 있으며 외래 키(Foreign Key)를 사용하여 설정합니다.
이러한 특징을 가지고 있는 RDBMS는 장단점이 뚜렷합니다.
장점으로는 표준화된 언어인 SQL을 사용하여 데이터를 조작하므로, 데이터 분석 및 검색이 용이합니다.
또한, 대규모 데이터 처리에도 뛰어난 성능을 보장합니다. 동시에 여러 사용자가 사용하더라도 데이터 일관성 및 무결성을 유지하는데에도 용이합니다. 그래서 가장 일반적으로 많이 사용되는 데이터베이스 관리 시스템 중 하나입니다.
하지만, 단점으로는 한번 생성한 DBMS의 테이블 정의인 스키마를 변경이 쉽지 않습니다. 스키마가 변경되면 모든 데이터를 일관되게 업데이트해야 하므로 대규모 데이터베이스의 경우 시간과 복잡성에 대한 비용이 매우 클 수 있습니다.
또한, 수평적 확장이 어려울 수 있습니다. RDBMS는 ACID (원자성, 일관성, 고립성, 지속성)특성을 유지하기 위해 트랜잭션을 사용하는데, 트랜잭션은 일련의 작업을 수행하고 작업이 모두 성공하면 DB를 일관된 상태로 유지하며, 실패하는 경우 이전 상태로 롤백할 수 있는 기능입니다.
수평적 확장은 데이터베이스를 분산시켜서 처리 능력을 확장하는 방식인데, 이를 구현하기 위해서 여러 대의 서버에 데이터를 분산시켜야 합니다. 그러나 데이터를 분산시키면 트랜잭션의 일관성을 유지하기가 어렵습니다.
예를 들어, 여러 대의 서버에 동일한 데이터의 일부가 저장되어 있을 때, 서버 간 데이터의 일관성을 유지하면서 동시에 각각의 서버에 트랜잭션을 수행하는 것은 매우 어려우므로 보통 RDBMS는 수직적 확장을 사용합니다.
수직적 확장: CPU, RAM등을 증가시켜 데이터베이스 서버 자체를 강화
보통 대규모 데이터의 수집과 저장, 비정형 데이터 처리, 소셜 미디어, IoT 등에서 사용되며 대표적은 RDBMS는 다음과 같습니다.
그렇다면 NoSQL은 위 RDBMS의 단점을 커버해주는 역할을 하지 않을까 생각됩니다.
NoSQL(Not Only SQL)은 비 관계형 데이터베이스로 데이터를 저장할 때 데이터 모델을 사용하며 key-value, document, graph등으로 데이터를 저장합니다. 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다. 이 때문에 RDBMS의 스키마 변경이 어려운 문제를 해결할 수 있습니다. 예를 들어 데이터 구조가 변경되더라도 데이터베이스 구조 전체를 변경하지 않습니다.
NoSQL의 등장 배경으로는 BigData의 등장으로 데이터와 트래픽이 기하 급수적으로 증가함에 따라 RDBMS의 단점인 성능을 향상시키기 위해 장비가 좋아야하는 수직적 확장(Scale-up)의 비용이 기하 급수적으로 따라 증가하는 것을 해결하기 위해 데이터 일관성은 포기하더라도 비용을 고려하여 여러 대의 서버에 데이터를 분선 저장하는 수평적 확장(Scale-out)을 지원하는 목표로 등장했다고 합니다.
그래서 RDBMS의 단점인 수평적 확장이 가능하며, 분산 환경에서 대규모 데이터 처리가 용이하다는 장점이 있습니다.
하지만, 단점도 뚜렷합니다.
NoSQL은 일관성, 가용성, 분할 허용성의 특징을 가지는 CAP(Consistency, Availability, Partitioning Tolerance)이론에 따라 설계되었습니다. 이 중에서 가용성을 우선적으로 고려하여 일관성은 상대적으로 낮은 수준에서 보장됩니다.
분산 환경에서 데이터 일관성을 유지하는 것은 매우 어려운 일로, 각 대규모 분산 서버에 데이터를 일관성 있는 복제 방법을 사용해야 일관성이 유지되는데, 이 때 지연 시간이 매우 큽니다.
또한 복제된 데이터 간의 충돌을 방지하기 위한 복잡한 알고리즘도 구현해야 합니다. 그러므로 NoSQL 데이터베이스는 일부 데이터의 일관성을 희생하고, 대신 높은 가용성과 처리 능력을 보장하는 것이 일반적입니다. 이러한 특징은 데이터 일관성이 중요하지 않거나, 일시적인 데이터의 손실이 허용되는 경우에 적합합니다
추가로, NoSQL DBMS는 관계형 데이터베이스와는 다른 데이터 모델을 사용하기 때문에, 기존의 관계형 데이터베이스에 익숙한 개발자들은 새로운 데이터 모델에 대한 학습 및 추가적인 적응이 필요합니다. 특히, NoSQL DBMS 각각은 고유한 API를 제공하기 때문에, 이러한 API를 사용하여 데이터를 조작하는 방법을 학습해야 합니다. 개발자의 추가적인 적응 기간이 필요하다는 단점이 있습니다.
NoSQL과 RDBMS의 차이점을 분석해본 이유 중 하나로는 수집한 Map데이터나 좌표 데이터를 통해 스트리밍하거나 리플레이를 해야하는 경우 어떤 DBMS가 좀 더 적합할까를 판단하기 위해서였습니다.
분석해본 결과 좌표 데이터나 맵 데이터와 같이 구조가 복잡하고 계층적인 데이터는 NoSQL에 더 적합할 것이라고 판단하였습니다. 이는 NoSQL 데이터베이스가 유연하게 데이터를 저장하고 쿼리할 수 있기 때문입니다.
또한 NoSQL 데이터베이스는 분산형 아키텍처를 가지고 있어 대규모 데이터를 처리하고 수평적으로 확장할 수 있어 대량의 좌표 데이터나 맵 데이터를 처리하는 데 유리하여 목적에 부합할 것이라고 생각합니다.
현재 사용 중인 AWS의 DynamoDB를 사용한다면 JSON과 같은 문서형 데이터 모델을 지원하기 때문에, 복잡한 데이터를 쉽게 가공하고 처리할 수 있습니다. 특히 지리 정보와 관련된 커리를 수행할 때, 지리 위치를 기반으로 검색 쿼리를 작성할 수도 있습니다. 가장 큰 장점으로는 AWS의 다른 서비스와 통합이 가능하여, 데이터를 보다 쉽게 처리하고 분석할 수 있을거라 예상됩니다.
읽으신 분들도 이러한 RDBMS와 NoSQL DBMS의 장단점을 잘 알고, 현재 적용해야할 시스템의 요구 사항과 잘 비교하여 어떤 DBMS를 사용하면 적합할지를 고민해보는 시간을 가지면 더 나은 시스템이 될 수 있지 않을까 생각합니다.
긴 글 읽어주셔서 감사합니다. 제가 분석한 글이 조금이나마 업무에 도움이 되셨으면 좋겠습니다.
많은 피드백 환영합니다 😁👍
'Back End' 카테고리의 다른 글
[ Python ] Django에 대한 이해 (0) | 2023.07.17 |
---|---|
[ Django ] psycopg2 psycopg2-binary 차이 (0) | 2023.05.16 |
[ Spring ] JPA란? (0) | 2022.10.24 |
[ Spring ] Java Config, Configuration Annotation (0) | 2022.10.24 |
[ FastAPI ] Middleware에서 request body 사용 불가 (2) | 2022.10.05 |