[Spring] RDBMS, NoSQL

김한준 Hanjun Kim·2024년 4월 14일

TIL(New)

목록 보기
9/9

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

RDBMS

RDBMS(Relational Database Management System) : 관계형 데이터베이스 관리 시스템

R : 관계형, 테이블 하나로는 얻을 수 없는 상황에서 관계를 통해 유의미한 데이터를 추출합니다.
DB : 데이터베이스, 데이터들을 저장하는곳.
MS : 관리 시스템, DB의 데이터들을 검색, 삽입, 수정, 삭제한다는 뜻입니다.

관계형 데이터 베이스를 생성하고 수정하고 관리하는 소프트웨어라는 뜻입니다.

엑셀처럼, 데이터들을 테이블 형식으로 나누고 SQL(Structured Query Language)을 사용하여 데이터를 관리합니다.
테이블은 행과 열로 이루어져 있으며, 각 행은 고유한 식별자를 가지고 있습니다.
데이터의 일관성과 무결성을 보장하기 위해 ACID (원자성, 일관성, 고립성, 지속성) 트랜잭션을 지원합니다.
대표적인 RDBMS로는 MySQL, PostgreSQL, Oracle Database 등이 있습니다.

RDBMS의 특징(feat. ACID)

RDBMS의 특징은 일관성, 무결성, 독립성 등등 여러가지가 있지만 그 중 처음보는 ACID 특징에 대해 정리하겠습니다.

ACID트랜잭션 관리의 중요한 원칙을 정의하는 네 가지 속성입니다.

( * 트랜잭션(Transaction) : 데이터베이스에서 수행되는 단일 논리적 작업 단위를 나타냅니다.
즉, 하나 이상의 데이터베이스 작업이 모두 성공하거나 실패할 때까지 모두 적용되거나 모두 롤백되어야 하는 작업 그룹을 의미합니다.)

이는 RDBMS가 데이터의 무결성과 일관성을 보장하기 위해 따라야 하는 기준입니다.

1. 원자성(Atomicity)

  • 트랜잭션의 모든 작업이 완벽히 수행되거나 전혀 수행되지 않아야 한다는 원칙입니다.
    트랜잭션 중 일부 작업만 수행된 상태로 남는 것을 허용하지 않습니다. 만약 트랜잭션 도중 오류가 발생하면, 모든 작업은 원래 상태로 롤백(rollback)됩니다.

2. 일관성 (Consistency):

  • 트랜잭션이 완료된 후 데이터베이스가 일관된 상태를 유지해야 한다는 원칙입니다.
    트랜잭션 전후에 데이터베이스의 무결성 제약 조건이 모두 만족되어야 합니다.

3. 격리성 (Isolation):

  • 각 트랜잭션은 독립적으로 수행되어야 하며, 동시에 실행되는 트랜잭션이 서로의 작업에 영향을 미치지 않아야 합니다.
    이를 통해 트랜잭션 간의 간섭을 방지합니다.

4. 지속성 (Durability):

  • 트랜잭션이 성공적으로 완료된 후에는 시스템 오류나 충돌이 발생하더라도 그 결과가 영구적으로 저장되어야 한다는 원칙입니다.
    이는 로그를 사용하여 보장됩니다.

RDBMS를 사용하는 경우

  1. 데이터 구조가 명확하며 데이터의 변경 가능성이 낮은 경우

  2. 데이터 변경이 자주 이루어지는 시스템
    ( 중복된 데이터가 없어 변경이 용이하기 때문 )

단점은 RDBMS의 한계를 극복하기 위해서 등장한 NoSQL에서 서술하겠습니다.


NoSQL

NoSQL (Not Only SQL) : 비관계형 데이터베이스 관리 시스템

관계형 모델을 사용하지 않는 데이터베이스 시스템으로,
RDBMS의 한계를 극복하기 위해 설계된 비관계형 데이터베이스입니다.

RDBMS는 성능을 향상시키기 위해선 저장소의 크기를 늘리는 Scale-up 만 지원합니다.
이렇게 되면 비용이 기하급수적으로 커질 수 있고,
또한 스키마의 존재로 인해 나중에 변경이 필요한 경우 번거롭고 어렵다는 단점이 있습니다.
( * 스키마 : 데이터베이스를 구성하는 레코드의 크기, 키(key)의 정의, 레코드와 레코드의 관계, 검색 방법 등을 정의한 것.)

그래서 여러 대의 저장소에 정보를 나누어 저장하는 Scale-out 을 목표로 등장하였습니다.

NoSQL의 특징

1. 스키마의 유연성

  • 스키마가 필요 없으며, 동적으로 스키마를 변경할 수 있습니다. 즉, 요구사항이 자주 변경되는 환경에서 유연합니다.

2. 수평적 확장성

  • 위에서 언급한 Scale-out의 특징을 지녔습니다.
    이로 인해 성능적으로 향상되었습니다.

3. 다양한 데이터 모델 지원

  • 키-값, 문서, 열 가족, 그래프 등 다양한 데이터 모델을 지원하여 각기 다른 애플리케이션 요구 사항에 맞게 선택할 수 있습니다.

NoSQL 데이터베이스 유형

1. 키-값 저장소 (Key-Value Stores)

  • 간단한 키-값 쌍으로 데이터를 저장합니다. 매우 빠른 읽기 및 쓰기 성능을 제공합니다.
    예: Redis, Riak, Amazon DynamoDB

2. 문서 지향 데이터베이스 (Document-Oriented Databases)

  • JSON, BSON 등의 형식으로 데이터를 저장하여 구조화된 문서를 지원합니다. 복잡한 데이터 구조를 쉽게 저장하고 쿼리할 수 있습니다.
    예: MongoDB, CouchDB

3. 열 가족 저장소 (Column Family Stores)

  • 데이터를 행과 열로 구성하되, 각 행은 다양한 수의 열을 가질 수 있습니다. 대규모 데이터 분석에 적합합니다.
    예: Apache Cassandra, HBase

4. 그래프 데이터베이스 (Graph Databases)

  • 노드와 엣지로 구성된 그래프로 데이터를 저장하여 복잡한 관계와 연결을 효과적으로 표현합니다.
    예: Neo4j, Amazon Neptune

NoSQL 사용하는 경우

  1. 실시간 빅 데이터 처리: 높은 속도로 생성되는 데이터를 빠르게 저장하고 처리해야 하는 경우 (예: IoT 데이터 수집)

  2. 유연한 스키마 필요: 데이터 구조가 자주 변경되거나 미리 정의하기 어려운 경우 (예: 소셜 미디어 애플리케이션)

  3. 고성능 요구: 빠른 응답 시간과 높은 처리량이 필요한 경우 (예: 캐싱 시스템)

  4. 복잡한 관계 데이터: 데이터 간의 복잡한 관계를 저장하고 탐색해야 하는 경우 (예: 추천 시스템, 소셜 네트워크 분석)

NoSQL의 단점

  1. 복잡한 관계 데이터를 처리하기에 어렵습니다.

  2. 제한된 쿼리 기능


RDBMS와 NoSQL은 각각의 장단점을 가지고 있기 때문에, 어느 한 쪽이 정답은 아닙니다.
사용되는 목적에 따라 올바른 데이터베이스를 고르는 것이 정답입니다.

profile
개발이 하고싶은 개발지망생

1개의 댓글

comment-user-thumbnail
2024년 5월 7일

이것도 NoSQL이라니!!

답글 달기