RDBMS와 NoSQL의 차이와 장단점을 알아보자

요즘 구인 공고를 보면 온갖 NoSQL 써본 사람🙋‍♂️을 구하는 곳이 무척 많다. NoSQL의 장점이 대체 뭐길래 그렇게들 쓰려고 하는지, 반대로 RDBMS를 쓰는 이유는 뭔지 정리해보려고 한다.

RDBMS란?

Relational데이터베이스는 엑셀 같이 행과 열로 된 데이터로 표현된다. 구조화 된 데이터를 저장하기 좋고, 구조화 되어 있기 때문에 원하는 데이터를 뽑기도 좋다. 데이터를 조회/삽입/수정/삭제 하는 데에는 보통 SQL이라는 데이터베이스 언어를 사용한다.

Users 테이블 | user_id | name | email | age | |———|——–|——————|—–| | 1 | 홍길동 | hong@example.com | 25 | | 2 | 김철수 | kim@example.com | 30 | | 3 | 이영희 | lee@example.com | 28 |

Orders 테이블 (외래키: user_id) | order_id | user_id | product | amount | |———-|——–|———|——–| | 101 | 1 | 노트북 | 1200000 | | 102 | 2 | 스마트폰 | 800000 | | 103 | 1 | 키보드 | 50000 |

📌 RDBMS의 강점 : 여러가지가 있겠지만 트랜잭션 기능이 NoSQL에 비해 강력하다. 롤백 등의 기능으로 데이터 무결성을 보존하기 쉽기 때문에 금융권, PG서비스 등에서 필수적으로 사용한다.

NoSQL이란?

위에서 RDBMS를 사용하기 위해서는 SQL을 이용해야 한다고 했다. NoSQL이란 말 그대로 SQL 없이 사용할 수 있는 데이터베이스를 말한다. 그래서 여러가지 종류, 여러가지 형태의 NoSQL들이 등장하고 있다. 대표적인 4가지 방식에 대해 알아보자.

✅ 문서Document 기반 NoSQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[
  {
    "user_id": 1,
    "name": "홍길동",
    "email": "hong@example.com",
    "age": 25,
    "orders": [
      { "order_id": 101, "product": "노트북", "amount": 1200000 },
      { "order_id": 103, "product": "키보드", "amount": 50000 }
    ]
  },
  {
    "user_id": 2,
    "name": "김철수",
    "email": "kim@example.com",
    "age": 30,
    "orders": [
      { "order_id": 102, "product": "스마트폰", "amount": 800000 }
    ]
  }
]

MongoDB, ElasticSearch가 대표적인 문서 기반 NoSQL이다. 문서 내부에 JSON 구조로 데이터가 저장되고, RDB와 달리 한 문서 안에서 JOIN 없이 중첩 데이터 포함이 가능하다.

✅ 키-값(Key-Value) 저장소

1
2
3
4
//Redis 예시
"user:1" -> { "name": "홍길동", "email": "hong@example.com", "age": 25 }
"user:2" -> { "name": "김철수", "email": "kim@example.com", "age": 30 }
"order:101" -> { "user_id": 1, "product": "노트북", "amount": 1200000 }

대표적인 키-값 저장소로는 Redis, DynamoDB가 있다. 키를 이용해서 값을 빠르게 조회 가능하다. 캐싱이나 세션 저장에 많이 사용된다.

✅ 와이드 컬럼(Wide-Column) 저장소

카산드라에서의 Users 테이블 예시 | user_id | name | email | age | orders | |———|——–|——————|—–|—————————-| | 1 | 홍길동 | hong@example.com | 25 | {101: “노트북”, 103: “키보드”} | | 2 | 김철수 | kim@example.com | 30 | {102: “스마트폰”} |

와이드 컬럼 저장소는 Cassandra, HBase등이 있다. RDB와 비슷해 보이지만 열(Column)을 동적으로 추가 가능하다. 수평 확장(Scale out)이 용이해서 빅데이터 분석에 많이 사용된다.

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

1
2
3
(홍길동)-[:친구]->(김철수)
(김철수)-[:구매]->(스마트폰)
(홍길동)-[:구매]->(노트북)

Neo4j 같은 NoSQL이 여기에 속한다. 노드와 관계(Edge)를 저장하여 SNS나 추천 시스템에서 활용되는 NoSQL이다.

그럼 RDBMS의 강점은 뭘까?

  1. 데이터 무결성
    • 외래키나 정규화를 통한 데이터 일관성 유지가 가능하다.
      계좌 잔액이 정확해야 하는 은행 시스템에서는 데이터 일관성에 강한 RDBMS 사용이 적합하다.
  2. ACID 트랜잭션 지원
    • 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이 보장되어야 하는 트랜잭션을 지원한다.
      결제 도중 오류가 나면 롤백이 가능해야 하므로, 커머스 사이트나 PG서비스에서도 RDBMS가 필요하다.
  3. 복잡한 쿼리 처리
    • JOIN을 활용한 다중 테이블 연산이 강력하다.
      예를 들어 고객 정보와 주문 정보를 함께 확인해야 할 때, 한 번의 SQL 쿼리로 조회가 가능하다.

NoSQL의 강점은 뭘까?

  1. 유연한 데이터 모델
    • 스키마 없이 JSON, XML 등 다양한 형식으로 데이터 저장이 가능하다. 그래서 변화가 많은 데이터 구조에 적합함.
  2. 수평 확장(Scale Out)이 용이
    • 서버를 여러 대 추가하여 성능을 높이는 분산 시스템에 강하다.
  3. 빠른 데이터 처리 속도
    • Redis 같은 키-값 저장소는 조회 속도가 매우 빠르므로 빠른 조회 성능이 필요한 곳에 적합하다.
  4. 빅데이터와 실시간 처리에 최적화
    • 하둡, 카산드라 같은 NoSQL DB는 대량의 데이터를 빠르게 처리 가능해서, 로그 데이터 분석이나 IoT 센서 데이터 저장 같은 곳에 많이 사용된다.
  5. SQL 없이도 데이터 입출력을 쉽게 할 수 있다
    • SQL을 따로 배우지 않아도 서버에서 사용하던 언어로 DB를 다룰 수 있다.

결론

어느 한 쪽이 다른 방식에 비해서 낫거나 모자란 것이 아니라, NoSQL이 적합한 산업들의 규모가 커지면서 자연스럽게 NoSQL의 수요가 늘어난 것이다. 그리고 요즘은 둘 중에 하나만 반드시 골라서 사용하는 것이 아니라, 서비스의 기능 별로 필요한 곳에 필요한 방식을 취사선택 할 수도 있다. 각 방식의 특성을 이해하고, 내가 만들 서비스에 어떤 방식이 더 적합한 지 고민해보자.