응애개발자
article thumbnail
Published 2024. 5. 27. 15:33
[Database] RDBMS와 NoSQL CS/DB
728x90

📌RDB (Relational Database)

관계형 데이터베이스는 데이터를 테이블 형식으로 저장하고, 이 테이블들이 서로 관계를 맺도록 하는 데이터베이스를 의미한다. RDB는 데이터 모델을 설명하는 용어이다.

 

📌RDBMS (Relational Database Management System)

RDBMS은 RDB를 관리하는 소프트웨어를 말한다. 즉, RDB를 생성하고 수정하고 관리할 수 있는 소프트웨어이다. 그리고 이러한 RDBMS는 주로 SQL을 이용하여 데이터를 조회하고, 관리한다.

 

RDMBS 특징

  1. 2차원 데이터(테이블)로 표현된다. (행/열)
  2. 상호관련성을 가진 테이블의 집합으로 구성된다.
  3. 테이블 사이의 관계를 외래키로 나타낸다.
  4. 스키마 변경이 어렵다.
  5. 수직확장이 용이하지만 수평확장은 어렵다.
  6. ACID(원자성, 일관성, 고립성, 지속성) 특성을 제공하여 데이터 일관성과 안정성을 보장한다.
더보기

스키마 : 데이터 베이스에서 사용되는 전체 데이터 구조를 정의하는 개체

트랜잭션의 ACID

Atomicity (원자성) : 트랜잭션은 모두 수행되거나 모두 수행되지 않는다. 트랜잭션안의 단 하나의 작업이라도 실패시 전체를 롤백하여 원자성을 보장한다.
Consistency (지속성) : 하나의 트랜잭션 이후 데이터베이스 상태는 이전과 같이 유효해야 한다. 트랜잭션이 일어난 이후에도 데이터베이스의 제약이나 규칙을 만족한다.
Isolation (격리성) : 트랜잭션 수행 중에 다른 트랜잭션의 작업이 끼어들지 못한다. 트랜잭션 간에는 서로 독립적으로 수행된다.
-> 4단계로 구성 (Read Uncommitted, Read Committed, Reapetable Read, Serializable)
Dependency (영속성) : 트랜잭션이 성공시 적용된 결과는 영구적으로 지속된다. 시스템이 다운되거나, 기타 문제가 발생해도 트랜잭션 결과는 유지된다.
(트랜잭션이 커밋되면, 변경 사항이 로그 파일에 기록 , 시스템이 다운되거나 장애가 발생하면, db는 재시작할때 로그 파일을 사용하여 마지막 커밋 이후의 모든 트랜잭션을 재적용)

 

스키마 변경이 어렵다.

ex) 데이터 타입 변경

상황 : 사용자가 테이블의 'birthday' 컬럼 데이터 타입을 VARCHAR에서 DATE로 변경하려고 한다.

 

기존에 테이블에 VARCHAR로 저장되어 있으므로  이를 DATE로 변환해야한다. 이때 이 컬럼을 참조하는 모든 쿼리와 코드도 수정해야 한다. 또한 저장되어 있는 정보를 변경해주어야 하기 때문에 기존 테이블을 복제해서 수정을 한 뒤, 기존 테이블과 교체하는 방식을 택한다.

 

수직확장이 용이하지만 수평확장은 어렵다.

그 이유는 데이터가 여러 테이블에 의존해 있기때문이다. 

ex) 2번 사람이 쓴 게시글의 댓글을 조회하는데 각각 다른 db에 있다고 가정하자.

A 에는 사용자 정보, B에는 게시글 정보, C에는 댓글 정보가 있다고 가정한다면 A에서 2번 사람을 조회하고, B에서 게시글 의정보를 확인한 뒤 C에서 댓글을 조회한다.

이처럼 DB가 확장될수록 RDB는 수평 확장에 대한 관리가 한없이 복잡해진다.

 

📌NoSQL (Not Only SQL)

NoSQL이란 RDBMS와 달리 테이블 간 관계를 정의하지 않는다. 테이블 간의 관계를 정의하지 않아서 일반적으로 테이블 간 Join도 불가능하다.

 

NoSQL 특징

  1. 다양한 방식으로 데이터를 표현한다.
  2. 테이블 사이에 명시된 제약이나 규칙이 없다.
  3. 스키마가 고정적이지 않고, 매우 유연하다
  4. 수평확장이 쉽다.
  5. 연산이 빠르다.

다양한 방식으로 데이터를 표현한다.

NoSQL은 다양한 방식의 데이터 모델을 사용할 수 있다.

  • Document 모델 : Key와 Document 형태로 데이터를 저장한다. 자유로운 스키마 구조를 갖고 있으며 구조가 확정되지 않은 데이터를 밀어넣고, 자유롭게 작업하기 좋다. ex) Mongo DB
  • Graph 모델 : 데이터를 버텍스와 Edge로 그래프에 표현하는 방식이다. 데이터 사이의 유기적인 관계를 표현하기에 적합하다. ex) Neo4j
  • Key-value 모델 : 하나의 Key에 값을 매핑하는 해시 구조의 데이터 모델이다. 빠르게 데이터에 접근할 수 있는 장점이 있다. ex) Redis
  • Wide-column 모델 : 테이블의 형태지만 행마다 갖고 있는 컬럼의 형태가 고정되어 있지 않은 데이터 모델이다.
    ex) HBase

🔎RDMBS 와 NoSQL의 장단점

✅ RDMBS

 RDBMS 장점

  • 스키마에 따라 데이터를 저장하므로 명확한 데이터 구조를 보장한다.
  • 각 데이터를 중복없이 한 번만 저장하여 데이터의 정합성을 보장한다.

 RDBMS 단점

  • 테이블간의 관계를 맺고 있기 때문에 시스템이 커질 경우 (Join 문이 많을 경우) 복잡한 쿼리가 만들어 진다.
  • 성능 향상을 위해서는 Scale-Up(수직확장) 을 지원한다. 이로 인해 비용이 높아진다.
  • 스키마로 인해 데이터가 유연하지 못하다. 스키마가 변경될 경우 번거롭다.

NoSQL 

NoSQL 장점

  • 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가진다.
  • 데이터 분산이 용이하며 성능 향상을 위한 Scale-Out 이 용이하다.

NoSQL 단점

  • 데이터 간 중복이 발생할 수 있으며 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행을 해야 한다.
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어려울 수 있다.

 

🔎RDMBS 와 NoSQL 언제 사용해야 할까?

RDBMS

데이터 구조가 명확하여 변경될 가능성이 적고, 명확한 스키마가 중요한 경우에 사용하는 것이 좋다. 데이터 중복을 피하고 데이터 무결성을 유지할 수 있으며, 관계를 맺고 있는 데이터가 자주 변경되는 시스템에 적합하다. 자주 수정되는 데이터와

트랜잭션이 중요한 데이터 (ex : 사용자 프로필)를 저장하는데 특히 유용하다.

 

NoSQL

NoSQL은 읽기 중심의 데이터나 대규모 데이터를 저장하는 데 적합하다. 데이터 구조가 유연하며, 변경이나 확장이 자주 일어날 수 있는 경우에 사용하는 것이 좋다. NoSQL은 데이터 중복이 발생할 수 있으며, 중복된 데이터가 변경될 시 모든 컬렉션에서 수정을 해야 하는 단점이 있다. 따라서 업데이트가 많이 이루어지지 않는 시스템에 적합하다. 또한 NoSQL의 수평확장 특성을 활용하여 막대한 데이터를 저장하고 처리해야 하는 시스템에 유리하다.

 

요약

  • RDBMS: 데이터 구조가 명확하고, 스키마가 중요하며, 자주 수정되는 데이터와 트랜잭션이 중요한 데이터를 저장하는 데 적합하다. 데이터 무결성을 유지하며, 관계형 데이터베이스의 특성을 최대한 활용할 수 있다.
  • NoSQL: 읽기 중심의 데이터나 대규모 데이터를 저장하는 데 적합하다. 유연한 데이터 구조를 지원하며, 데이터 확장과 변경이 자주 발생하는 경우에 유용하다. 대규모 데이터 저장과 Scale-out이 필요한 시스템에 적합하다.
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!