요즘 구인 공고를 보면 온갖 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 |
|
MongoDB, ElasticSearch
가 대표적인 문서 기반 NoSQL이다. 문서 내부에 JSON 구조로 데이터가 저장되고, RDB와 달리 한 문서 안에서 JOIN 없이 중첩 데이터 포함이 가능하다.
✅ 키-값(Key-Value) 저장소
1 |
|
대표적인 키-값 저장소로는 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 |
|
Neo4j
같은 NoSQL이 여기에 속한다. 노드와 관계(Edge)를 저장하여 SNS나 추천 시스템에서 활용되는 NoSQL이다.
그럼 RDBMS의 강점은 뭘까?
- 데이터 무결성
- 외래키나 정규화를 통한 데이터 일관성 유지가 가능하다.
계좌 잔액이 정확해야 하는 은행 시스템에서는 데이터 일관성에 강한 RDBMS 사용이 적합하다.
- 외래키나 정규화를 통한 데이터 일관성 유지가 가능하다.
- ACID 트랜잭션 지원
- 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이 보장되어야 하는 트랜잭션을 지원한다.
결제 도중 오류가 나면 롤백이 가능해야 하므로, 커머스 사이트나 PG서비스에서도 RDBMS가 필요하다.
- 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이 보장되어야 하는 트랜잭션을 지원한다.
- 복잡한 쿼리 처리
- JOIN을 활용한 다중 테이블 연산이 강력하다.
예를 들어 고객 정보와 주문 정보를 함께 확인해야 할 때, 한 번의 SQL 쿼리로 조회가 가능하다.
- JOIN을 활용한 다중 테이블 연산이 강력하다.
NoSQL의 강점은 뭘까?
- 유연한 데이터 모델
- 스키마 없이 JSON, XML 등 다양한 형식으로 데이터 저장이 가능하다. 그래서 변화가 많은 데이터 구조에 적합함.
- 수평 확장(Scale Out)이 용이
- 서버를 여러 대 추가하여 성능을 높이는 분산 시스템에 강하다.
- 빠른 데이터 처리 속도
- Redis 같은 키-값 저장소는 조회 속도가 매우 빠르므로 빠른 조회 성능이 필요한 곳에 적합하다.
- 빅데이터와 실시간 처리에 최적화
- 하둡, 카산드라 같은 NoSQL DB는 대량의 데이터를 빠르게 처리 가능해서, 로그 데이터 분석이나 IoT 센서 데이터 저장 같은 곳에 많이 사용된다.
- SQL 없이도 데이터 입출력을 쉽게 할 수 있다
- SQL을 따로 배우지 않아도 서버에서 사용하던 언어로 DB를 다룰 수 있다.
결론
어느 한 쪽이 다른 방식에 비해서 낫거나 모자란 것이 아니라, NoSQL이 적합한 산업들의 규모가 커지면서 자연스럽게 NoSQL의 수요가 늘어난 것이다. 그리고 요즘은 둘 중에 하나만 반드시 골라서 사용하는 것이 아니라, 서비스의 기능 별로 필요한 곳에 필요한 방식을 취사선택 할 수도 있다. 각 방식의 특성을 이해하고, 내가 만들 서비스에 어떤 방식이 더 적합한 지 고민해보자.