본문 바로가기

공부

RDBMS와 NoSQL의 차이

RDBMS(Relational Database Management System)와 NoSQL은 데이터를 저장하고 관리하는 두 가지 주요 유형의 데이터베이스 시스템

각 시스템은 고유한 데이터 모델과 사용 사례에 맞게 설계

  • RDBMS: 관계형 데이터베이스 관리 시스템으로, 데이터를 테이블 형식으로 저장하며, 각 테이블은 열(필드)과 행(레코드)로 구성
    SQL(Structured Query Language)을 사용하여 데이터를 정의, 관리, 쿼리
    데이터 간의 관계를 명확히 정의하고, 스키마를 통해 데이터 무결성을 유지하는 것이 특징
    예시로 MySQL, PostgreSQL, Oracle, SQL Server 등

  • NoSQL: 관계형 데이터베이스의 제약을 벗어나 다양한 데이터 저장 모델(문서, 키-값, 그래프, 열 기반 등)을 사용하는 데이터베이스
    스키마가 유연하며, 대량의 데이터를 빠르게 처리
    구조화된 쿼리 언어 대신 각 데이터베이스 시스템마다 고유한 API를 통해 데이터를 조작
    MongoDB, Cassandra, Redis, DynamoDB 등이 대표적인 NoSQL 데이터베이스입니다.

장점:

  • RDBMS:
    • 데이터 무결성 및 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 보장하여 트랜잭션 관리
    • 데이터 관계와 정규화가 잘 정의되어 있어 중복을 줄이고, 데이터 일관성 유지
    • 강력한 쿼리 언어(SQL)를 통해 복잡한 쿼리와 조인이 가능
  • NoSQL:
    • 스키마가 없거나 유연하여 구조가 자주 변경되는 데이터를 쉽게 관리
    • 수평적 확장이 용이하여 대규모 분산 시스템을 구성
    • 대용량 데이터 처리와 고성능을 요구하는 애플리케이션에 적합

단점:

  • RDBMS:
    • 수직적 확장(서버 성능 향상)에 한계가 있으며, 수평적 확장(서버 추가)이 어려움
    • 대량의 비정형 데이터나 빈번한 스키마 변경을 처리하기에 부적합
    • 데이터의 크기와 복잡성에 따라 성능 저하 가능성
  • NoSQL:
    • 데이터 일관성과 무결성 관리가 어려울 수 있으며, 복잡한 트랜잭션 관리 어려움
    • ACID 속성을 완전히 보장하지 않는 경우가 많아 애플리케이션 레벨에서 보완이 필요
      • 원자성(Atomicity) : 트랜잭션에 속한 각각의 문(데이터를 읽기, 쓰기, 업데이트 또는 삭제하기 위함)을 하나의 단위로 취급합니다. 문 전체를 실행하거나 그 문의 어떤 부분도 실행하지 않거나 둘 중 하나입니다. 이 속성이 있으면 예컨대 스트리밍 데이터 소스가 스트리밍 중에 갑자기 오류를 일으키더라도 데이터 손실과 손상이 방지됩니다.
      • 일관성(Consistency) : 트랜잭션이 테이블에 변경 사항을 적용할 때 미리 정의된, 예측할 수 있는 방식만 취합니다. 트랜잭션 일관성이 확보되면 데이터 손상이나 오류 때문에 테이블 무결성에 의도치 않은 결과가 생기지 않습니다
      • 격리성(Isolation) : 여러 사용자가 같은 테이블에서 모두 동시에 읽고 쓰기 작업을 할 때, 각각의 트랜잭션을 격리하면 동시 트랜잭션이 서로 방해하거나 영향을 미치지 않습니다. 각각의 요청이 실제로는 모두 동시에 발생하더라도, 마치 하나씩 발생하는 것처럼 발생할 수 있습니다
      • 영속성(Durability) : 트랜잭션 실행으로 인해 데이터에 적용된 변경 사항이 저장되도록 보장합니다. 시스템 오류가 발생해도 마찬가지입니다
      • 출처: https://www.databricks.com/kr/glossary/acid-transactions
    • 쿼리 언어와 접근 방식이 각 데이터베이스마다 달라 학습 곡선이 높음
  • 사용 사례 비교:
    • RDBMS: 금융 시스템, 재고 관리, 예약 시스템과 같이 데이터 무결성과 관계가 중요한 애플리케이션에 적합
    • NoSQL: 소셜 네트워크, 로그 데이터 분석, IoT 데이터 저장 등 대용량 데이터와 빠른 확장이 필요한 애플리케이션에 적합

사용 예시:

 

  • RDBMS 사용 예시 - MySQL로 사용자 데이터 관리: 관계형 데이터베이스에서 테이블을 정의하고, 데이터를 삽입 및 조회하는 기본적인 SQL
CREATE TABLE Users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO Users (username, email) VALUES ('john_doe', 'john@example.com');

SELECT * FROM Users WHERE username = 'john_doe';
  • NoSQL 사용 예시 - MongoDB로 문서 데이터 관리: MongoDB에서는 데이터가 JSON 형태로 저장되며, 스키마를 엄격하게 정의하지 않고도 데이터를 쉽게 추가하고 조회 가능
// MongoDB 사용 예시 (Node.js 환경)
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

async function run() {
  try {
    await client.connect();
    const database = client.db('mydatabase');
    const users = database.collection('users');

    // 데이터 삽입
    await users.insertOne({ username: 'john_doe', email: 'john@example.com', createdAt: new Date() });

    // 데이터 조회
    const user = await users.findOne({ username: 'john_doe' });
    console.log(user);
  } finally {
    await client.close();
  }
}

run().catch(console.dir);

'공부' 카테고리의 다른 글

서버 스케줄링이란  (0) 2024.08.31
시스템 설계란  (0) 2024.08.31
Spring과 Node.js  (1) 2024.08.30
백엔드 아키텍처란  (2) 2024.08.30
블록킹(Blocking), 논블록킹(Non-Blocking)이란?  (0) 2024.08.29