[DB] RDBMS와 NoSQL

thereisname·2024년 6월 11일

DB

목록 보기
1/2

0. 용어 정리

데이터베이스 스키마(database schema)

데이터베이스(Database) 전체 또는 일부의 논리적인 구조를 표현하는 것으로 데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타냄.

트랜잭션

데이터베이스에서 하나의 작업 단위. 하나의 트랜잭션은 여러 개의 데이터 조작 언어(DML) 명령어를 포함할 수 있으며, 이러한 명령어는 모두 성공적으로 수행되거나 전혀 수행되지 않아야 함.

데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
데이터베이스의 상태를 변화시킨다?? ⇒ 간단하게 말해서 아래의 질의어(DML)를 이용하여 데이터베이스를 접근 하는 것을 의미

데이터 무결성

데이터베이스 시스템에서 데이터가 정확하고 일관되며 신뢰할 수 있는 상태를 유지하는 것을 의미
참조 무결성 : FK는 참조하는 테이블의 PK와 일치해야 하며, FK 값이 존재하지 않거나 NULL 가능.




1. 관계형 데이터베이스(RDBMS, SQL) 특징

ACID란?

ACID는 데이터베이스 관리 시스템에서 트랜잭션이 안정적으로 처리되도록 보장하는 네 가지 속성이다.

Atomicity (원자성)
Consistency (일관성)
Isolation (격리성)
Durability (지속성)

(1) Atomicity (원자성)

트랜잭션의 모든 작업이 전부 반영(Commit)되거나 전혀 반영되지 않아야(Rollback) 한다. 즉, 하나의 트랜잭션은 모두 성공하거나 모두 실패해야 한다.

(2) Consistency (일관성)

트랜잭션이 수행된 후 데이터가 항상 정확하고 일관된 상태로 유지되어야 한다. 이는 데이터가 데이터베이스의 규칙과 제약 조건을 준수하고, 모든 트랜잭션이 올바르게 반영되어 데이터 무결성이 유지됨을 의미한다.

개발자는 데이터베이스의 일관성을 유지하기 위해 데이터 무결성에 대해 크게 신경 쓰지 않아도 되며, 데이터베이스가 알아서 일관성을 보장함.

(3) Isolation (격리성)

트랜잭션이 동시에 수행될 때 서로 영향을 미치지 않고 독립적으로 실행되도록 보장하는 성질이다.

트랜잭션이 진행 중일 때 다른 트랜잭션이 중간에 끼어들지 못하게 합니다. 이를 통해 데이터의 일관성과 무결성을 유지할 수 있다.

격리 수준 (Isolation Level) : 트랜잭션 독립의 정도를 정의

  • Read Uncommitted (0 Level): Dirty Read 발생
  • Read Committed (1 Level): Non-Repeatable Read 발생
  • Repeatable Read (2 Level): Phantom Read 발생
  • Serializable (3 Level): 어떠한 에러도 발생하지 않지만, 성능 저하

격리 수준이 높을수록 데이터 일관성은 높아지지만, 동시성은 낮아져 성능이 떨어질 수 있다. 따라서 데이터베이스는 다양한 격리 수준을 제공하여 성능과 일관성 간의 균형을 맞추는게 중요하다.

(4) Durability (지속성)

트랜잭션이 완료된 후 그 결과는 영구적으로 데이터베이스에 반영되어야 한다. 시스템 장애가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않는다. 이를 위해 로그 및 백업을 사용해야 한다.

트랜잭션이란?

트랜잭션은 데이터베이스 상태를 변화시키기 위해 수행하는 작업의 단위. 트랜잭션은 다음과 같은 속성을 가짐.

  • 작업의 단위: 트랜잭션은 일련의 작업들을 하나의 단위로 묶어 처리
  • 상태 변화: 트랜잭션은 데이터베이스의 상태를 변화
  • 독립성 보장: 트랜잭션은 다른 트랜잭션에 의해 방해받지 않도록 보호
  • 트랜잭션은 성공적으로 완료되면 Commit되고, 중간에 문제가 발생하면 Rollback되어 이전 상태로 되돌아갑니다.

Pessimistic Lock (비관적 잠금)

비관적 잠금은 데이터베이스가 데이터에 대한 접근을 제어하여 충돌을 방지한다. 이는 여러 사용자가 동시에 데이터를 수정하려 할 때 충돌이 발생하지 않도록 한다.

  • 작동 방식: 데이터를 수정할 때, 다른 트랜잭션이 동시에 접근하지 못하도록 미리 락을 걸어둔다. 데이터가 자주 충돌할 가능성이 높다고 가정하고, 데이터가 변경되기 전에 다른 접근을 차단한다.
  • 데이터 무결성이 높아지나 동시성이 떨어질 수 있다.
  • 읽기/쓰기 중 주로 쓰기 비중이 높을 경우 사용.



2. 비관계형 데이터베이스(NoSQL)

NoSQL 데이터베이스는 관계형 데이터베이스(RDBMS)와는 다른 방식으로 데이터를 저장하고 관리한다. NoSQL은 특히 대규모 데이터 처리와 높은 확장성 및 가용성을 요구하는 현대 웹 애플리케이션과 빅데이터 환경에 적합함.

High Scalability (확장성)와 Availability (가용성)

NoSQL은 분산 시스템의 특성을 활용하여 높은 확장성과 가용성을 제공한다. 이를 통해 수평적 확장(노드 추가)을 쉽게 할 수 있어 대규모 데이터와 트래픽을 효율적으로 처리할 수 있다.

Eventual Consistency (어쨌든 일관성)

NoSQL은 최종적으로 일관성을 보장하는 방식을 사용한다. 즉, 데이터가 여러 노드에 분산되어 저장될 때, 모든 노드가 일시적으로는 일관되지 않을 수 있지만, 일정 시간이 지나면 결국 일관된 상태가 된다.

개발자는 잠재적으로 비일관한(Inconsistent) 데이터를 처리하기 위해 애플리케이션 레벨에서 신경 써야 합니다.

Optimistic Lock (낙관적 잠금)

Optimistic Lock은 실제로 물리적인 락을 사용하는 것이 아니라, 데이터 충돌이 발생할 가능성이 낮다고 가정하고, 충돌이 발생하면 이를 감지하고 처리하는 방식이다. 락이라는 단어가 포함되어 있지만, 실제로는 락을 거는 의미가 아니다.

작동 방식:
1. 데이터 읽기: 트랜잭션이 데이터를 읽고, 이때 데이터의 버전 정보를 함께 가져온다.
2. 데이터 수정: 트랜잭션이 데이터를 수정
3. 충돌 감지: 데이터를 저장할 때, 데이터의 현재 버전 정보와 트랜잭션 시작 시 읽었던 버전 정보 비교
4. 충돌 처리: 버전 정보가 다르면 충돌이 발생한 것으로 간주하고, 트랜잭션을 재시도하거나 실패로 처리. 버전 정보가 같으면 데이터를 저장하고 버전 정보를 업데이트 진행

Optimistic Concurrency Control (OCC): 낙관적 동시성 제어로, 락을 사용하지 않고 트랜잭션 충돌을 감지하고 해결하는 방식이다. 이는 주로 데이터 충돌이 적은 환경에서 사용된다.

Transaction 미지원

NoSQL은 전통적인 트랜잭션을 지원하지 않는다. 이는 데이터 무결성을 보장하지 않음을 의미한다.

  • 데이터 변조: 트랜잭션이 없기 때문에 데이터 변조가 일어날 가능성 있음.
  • Lock 미적용 이유:
    • 분산 데이터베이스 노드 중 하나에 Lock을 적용해도, 다른 노드에 Write가 되기 때문에 의미 없음
    • 모든 노드에 Lock을 적용하면 성능 저하 발생

데이터 구조 형태

NoSQL 데이터베이스는 트리 구조 데이터를 사용하여 데이터 간 종속성을 표현한다. 이는 복잡한 데이터 구조와 비정형 데이터를 저장하는 데 유리하다.

  • 비정형성: 복잡한 데이터 구조를 저장 가능하며, JSON, XML 등의 포맷을 지원하여 Schemaless 구조로 데이터 저장.
  • 대용량 처리: 방대한 트래픽과 데이터를 처리하기 위해 수평적 확장에 유리한 분산 저장 방식 사용

BASE 특성

NoSQL은 ACID의 데이터 무결성을 희생하고, 확장성 및 가용성을 얻기 위해 트랜잭션 포기.

BASE databases abandon the consistency requirements of the ACID model pretty much completely. One of the basic concepts behind BASE is that data consistency is the developer's problem and should not be handled by the database

BASE 데이터베이스는 ACID 의 데이터 일관성을 버리는데, BASE 의 기본 컨셉 중 하나가 데이터 일관성은 데이터베이스가 처리할것이 아니라 개발자가 처리해야할 문제라는것이다.

  • Basically Available (기본적인 가용성): 분산 시스템의 특징으로, 부분 고장 시 나머지 시스템이 이를 커버합니다.
  • Soft state (소프트 상태) = Eventual Consistency (어쨌든, 최종적으로는 일관성)

종류

key-value Stores

데이터를 키와 값의 쌍으로 저장. 각 키는 고유하며 이를 통해 데이터를 빠르게 검색할 수 있다. 이 유형의 데이터베이스는 단순한 구조로 인해 매우 빠른 읽기 및 쓰기 성능을 제공한다.

  • 예시: Redis, Amazon DynamoDB, Riak
  • 사용 사례: 세션 관리, 캐시, 사용자 프로필 저장

Document Stores

문서 저장소는 데이터를 JSON, BSON, XML 등의 형식으로 저장한다. 각 문서는 고유한 키를 가지며, 문서 내의 데이터는 구조화된 형태로 저장된다. 이는 비정형 데이터나 복잡한 데이터를 저장하는데 적합하다.

  • 예시: MongoDB, CouchDB, RavenDB
  • 사용 사례: 콘텐츠 관리 시스템(CMS), 사용자 데이터 저장, 전자 상거래 데이터

Column-Family Stores

열 기반 저장소는 데이터를 행과 열의 구조로 저장하지만, 각 행의 열 수와 구조가 다를 수 있다. 이는 대규모 데이터 분석 및 처리에 적합하며, 읽기 및 쓰기 성능이 뛰어나다.

  • 예시: Apache Cassandra, HBase, ScyllaDB
  • 사용 사례: 실시간 데이터 분석, 시계열 데이터 저장, 로그 데이터 저장

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

그래프 데이터베이스는 데이터를 노드와 엣지의 형태로 저장한다. 노드는 엔터티를 나타내며, 엣지는 엔터티 간의 관계를 나타낸다. 이는 복잡한 관계를 모델링하고 쿼리하는 데 적합하다.

  • 예시: Neo4j, Amazon Neptune, ArangoDB
  • 사용 사례: 소셜 네트워크, 추천 시스템, 사기 탐지



3. 관계형과 비관계형 비교

profile
개발을 공부하는 주니어 개발자

0개의 댓글