이미 써봤던 RDBMS외에도 다른 DB를 공부해보고 싶어서 작성하게 되었습니다.
프로젝트 당시 Redis를 썼었는데, 이것도 NoSQL이라고 합니다

RDBMS(Relational Database Management System) : 관계형 데이터베이스 관리 시스템
R : 관계형, 테이블 하나로는 얻을 수 없는 상황에서 관계를 통해 유의미한 데이터를 추출합니다.
DB : 데이터베이스, 데이터들을 저장하는곳.
MS : 관리 시스템, DB의 데이터들을 검색, 삽입, 수정, 삭제한다는 뜻입니다.
관계형 데이터 베이스를 생성하고 수정하고 관리하는 소프트웨어라는 뜻입니다.
엑셀처럼, 데이터들을 테이블 형식으로 나누고 SQL(Structured Query Language)을 사용하여 데이터를 관리합니다.
테이블은 행과 열로 이루어져 있으며, 각 행은 고유한 식별자를 가지고 있습니다.
데이터의 일관성과 무결성을 보장하기 위해 ACID (원자성, 일관성, 고립성, 지속성) 트랜잭션을 지원합니다.
대표적인 RDBMS로는 MySQL, PostgreSQL, Oracle Database 등이 있습니다.
RDBMS의 특징은 일관성, 무결성, 독립성 등등 여러가지가 있지만 그 중 처음보는 ACID 특징에 대해 정리하겠습니다.
ACID는 트랜잭션 관리의 중요한 원칙을 정의하는 네 가지 속성입니다.
( * 트랜잭션(Transaction) : 데이터베이스에서 수행되는 단일 논리적 작업 단위를 나타냅니다.
즉, 하나 이상의 데이터베이스 작업이 모두 성공하거나 실패할 때까지 모두 적용되거나 모두 롤백되어야 하는 작업 그룹을 의미합니다.)
이는 RDBMS가 데이터의 무결성과 일관성을 보장하기 위해 따라야 하는 기준입니다.
1. 원자성(Atomicity)
2. 일관성 (Consistency):
3. 격리성 (Isolation):
4. 지속성 (Durability):
데이터 구조가 명확하며 데이터의 변경 가능성이 낮은 경우
데이터 변경이 자주 이루어지는 시스템
( 중복된 데이터가 없어 변경이 용이하기 때문 )
단점은 RDBMS의 한계를 극복하기 위해서 등장한 NoSQL에서 서술하겠습니다.
NoSQL (Not Only SQL) : 비관계형 데이터베이스 관리 시스템
관계형 모델을 사용하지 않는 데이터베이스 시스템으로,
RDBMS의 한계를 극복하기 위해 설계된 비관계형 데이터베이스입니다.
RDBMS는 성능을 향상시키기 위해선 저장소의 크기를 늘리는 Scale-up 만 지원합니다.
이렇게 되면 비용이 기하급수적으로 커질 수 있고,
또한 스키마의 존재로 인해 나중에 변경이 필요한 경우 번거롭고 어렵다는 단점이 있습니다.
( * 스키마 : 데이터베이스를 구성하는 레코드의 크기, 키(key)의 정의, 레코드와 레코드의 관계, 검색 방법 등을 정의한 것.)
그래서 여러 대의 저장소에 정보를 나누어 저장하는 Scale-out 을 목표로 등장하였습니다.
1. 스키마의 유연성
2. 수평적 확장성
3. 다양한 데이터 모델 지원
1. 키-값 저장소 (Key-Value Stores)
2. 문서 지향 데이터베이스 (Document-Oriented Databases)
3. 열 가족 저장소 (Column Family Stores)
4. 그래프 데이터베이스 (Graph Databases)
실시간 빅 데이터 처리: 높은 속도로 생성되는 데이터를 빠르게 저장하고 처리해야 하는 경우 (예: IoT 데이터 수집)
유연한 스키마 필요: 데이터 구조가 자주 변경되거나 미리 정의하기 어려운 경우 (예: 소셜 미디어 애플리케이션)
고성능 요구: 빠른 응답 시간과 높은 처리량이 필요한 경우 (예: 캐싱 시스템)
복잡한 관계 데이터: 데이터 간의 복잡한 관계를 저장하고 탐색해야 하는 경우 (예: 추천 시스템, 소셜 네트워크 분석)
복잡한 관계 데이터를 처리하기에 어렵습니다.
제한된 쿼리 기능
RDBMS와 NoSQL은 각각의 장단점을 가지고 있기 때문에, 어느 한 쪽이 정답은 아닙니다.
사용되는 목적에 따라 올바른 데이터베이스를 고르는 것이 정답입니다.
이것도 NoSQL이라니!!