관계형 데이터베이스(RDB)와 NoSQL의 차이: 데이터 모델·스키마·조인·일관성·확장 비교
관계형 데이터베이스(RDB)는 데이터를 행과 열로 이루어진 테이블로 나타내고 SQL로 질의합니다. 테이블끼리 조인한 복잡한 질의를 할 수 있고, 트랜잭션의 ACID 특성과 기본 키·외래 키 같은 제약으로 데이터의 무결성을 엄격하게 유지합니다. NoSQL은 관계형 데이터베이스가 아닌 데이터베이스를 통틀어 가리키는 말로, 키-값형, 문서형, 열 지향형(와이드 컬럼형), 그래프형 등이 있습니다. 대부분은 데이터 형식을 유연하게 하고 여러 서버에 분산해 규모를 늘리기 쉽게 하는 대신, 조인 같은 복잡한 질의나 엄격한 일관성의 일부를 포기합니다. 어느 쪽이 더 낫다기보다 데이터의 형태와 요구하는 성질에 따라 골라 씁니다.
| 비교 항목 | 관계형 데이터베이스(RDB) | NoSQL |
|---|---|---|
| 데이터 표현 방식 | 행과 열로 이루어진 테이블(릴레이션). 테이블끼리 공통 값(외래 키)으로 연결한다 | 유형에 따라 다르다. 키와 값의 쌍, JSON 같은 문서, 열의 묶음, 정점과 간선으로 이루어진 그래프 등 |
| 스키마 | 열 이름과 타입을 미리 정의한다. 바꿀 때는 ALTER TABLE 등으로 테이블 정의를 변경한다 | 미리 엄격하게 정하지 않아도 되는(스키마리스) 제품이 많아, 항목이 다른 데이터도 같은 곳에 넣을 수 있다 |
| 질의 | 표준 언어인 SQL로 조건 검색, 집계, 정렬 등을 선언적으로 쓸 수 있다 | 제품별 API나 질의 언어를 쓰는 경우가 많다. SQL과 비슷한 언어를 갖춘 제품도 있다 |
| 테이블 조인 | JOIN으로 여러 테이블을 조합한 질의를 할 수 있다 | 서툰 것이 많다. 함께 읽는 데이터를 하나의 문서나 값에 모아 두는 설계가 많다 |
| 트랜잭션과 일관성 | ACID 특성을 만족하는 트랜잭션으로 여러 행과 테이블의 갱신을 한꺼번에 확정할 수 있다 | 하나의 키나 문서 단위의 갱신에 그치는 제품이나, 복제본 사이에서 갱신이 바로 맞춰지지 않는 결과적 일관성을 허용하는 제품이 많다. ACID 트랜잭션을 갖춘 제품도 있다 |
| 확장 방식 | 서버 한 대의 성능을 높이는 스케일 업이 기본. 읽기는 복제본으로 분산할 수 있지만, 쓰기를 많은 서버로 나누기는 어렵다 | 데이터를 키로 나누어 많은 서버에 분산하는 스케일 아웃이 쉽다 |
| 정규화 | 정규화해 데이터 중복을 없애고 갱신 시의 이상을 막는다 | 읽기 속도를 우선해 같은 데이터를 중복해서 두는 경우가 많다 |
| 적합한 용도 | 회계, 재고, 수발주 등 무결성이 중요하고 데이터의 관계가 복잡한 업무 시스템 | 접근이 매우 많은 웹 서비스의 세션과 캐시, 형태가 정해지지 않은 데이터, 대량의 로그, 사람이나 사물의 연결(그래프) |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.