일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 코틀린
- 알고리즘
- BOJ
- 카카오 코딩테스트
- 1189
- 백준 #백준알고리즘 #BOJ #자바 #JAVA #알고리즘 #1076 #저항
- 논클러스터인덱스
- SQL
- 카카오 코테
- java
- 무중단배포
- 백준
- 전쟁-전투
- 프로그래머스
- kotlin
- functioinalinterface
- 회전하는큐
- 스프링
- 백준 #백준알고리즘 #BOJ #자바 #JAVA #알고리즘 #4344 #평균은넘겠지
- JPA
- DP
- 코딩테스트
- Redis
- 카카오
- 백준알고리즘
- 데이터베이서
- DB
- 도메인주도설계
- 자바
- 백준 #백준알고리즘 #BOJ #자바 #JAVA #알고리즘 #1475 #방번호
- Today
- Total
달나라
[DB] RDB vs NoSQL 본문
데이터를 다루기 위해서 가장 먼저 해야하는 것은 RDB를 사용할 것인지, NoSQL을 사용할 것인지에 대한 선택이다.
그러기 위해서는 RDB와 NoSQL이 뭔지, 각각의 장점과 단점에 대해서 알아야 하기 때문에 이 포스팅에서 그 내용을 정리해보려고 한다.
RDB 란?
RDB는 관계형 데이터 베이스(Relational DataBase)의 약자로, 관계형 모델을 기반으로 하는 데이터베이스를 말한다.
RDB는 데이터를 테이블의 형태로 저장하고, 각각의 컬럼에 맞춰서 데이터를 저장하여, 1개의 로우가 한개의 데이터가 된다.
또한, 여러 데이터 간의 1:1, 1:N, N:M 상관관계를 가지고 데이터가 저장된다. 그래서 RDB는 관계를 가진 테이블의 집합이라고 할 수 있다.
대표적으로 MySQL, Oracle, PostgreSQL, MSSQL 등이 있다. 각각의 플랫폼마다 사용방법은 조금씩 다르지만, RDB라는 틀 안에서 만들어졌기 때문에 개념은 비슷하다.
RDB 장단점
장점
- 데이터의 구조(스키마)가 명확하게 정의되어있다.
- 데이터의 무결성이 보장된다.
- 테이블 간의 관계를 가지고 있기 때문에, 데이터 간의 관계를 표현하기 쉽다.
- 데이터를 중복없이 저장할 수 있다.
- 트랜잭션에 대한 처리가 쉽다.
단점
- 데이터 구조(스키마)의 변경이 어렵다.
- 시스템이 커지면 JOIN문이 많아져서 복잡한 쿼리가 만들어질 수 있고, 성능이 저하될 수 있다.
- 성능 향상을 위해 수직적 확장(Scale-up)만 가능하기 때문에 예상보다 많은 비용이 발생할 수 있다.
NoSQL 이란?
NoSQL은 비관계형 데이터베이스를 지칭할 때 사용하는 단어로, 관계형 데이터 모델을 지양하고, 대량의 분산 데이터를 저장하고 조회하는 데 특화된 데이터베이스이다. SQL과는 다르게 스키마가 없이 데이터가 저장되며, 데이터 간의 관계를 가지지 않는다.
대표적으로 MongoDB, Redis 등이 있으며, NoSQL은 틀이 정해져있지 않기 때문에 각각의 플랫폼마다 특성이 다 다르다.
Key-Value 형태, Wide Column, Document, 그래프 형태 등 다양한 형태로 데이터가 저장된다.
NoSQL 장단점
장점
- 스키마가 정의되어 있지 않기 때문에 유연하게 데이터의 구조를 설계하고 저장할 수 있다.
- 데이터 모델의 변경이 쉽다.
- 다양한 형태로 데이터의 표현이 가능하다.
- 수평적 확장(Scale-out)이 가능하다.
- 빅데이터 처리에 효과적이다.
단점
- 데이터가 중복될 수 있으며, 관계가 없기 때문에 데이터 수정을 위해서는 모든 컬렉션에서 데이터를 수정해야한다.
- 트랜잭션 처리가 어렵다.
- 데이터의 일관성이 없다.
Scale Up과 Scale Out
RDB와 NoSQL의 특징에서 수직 확장과 수평 확장이 있다. 두 종류의 데이터베이스는 확장이라는 개념에서 큰 차이를 가지고 있다.
Scale up이란, 데이터베이스 서버의 성능을 향상시키는 것을 말한다. CPU의 성능을 향상시키고, 저장공간을 늘리는 등 하드웨어적인 부분을 향상시키는 것을 말한다. Scale up은 하드웨어 성능의 한계가 있기 때문에 무제한 확장이 불가능하다. 그렇기 때문에 시스템이 커져 데이터베이스의 성능을 향상시켜야하는 시점에 대한 고민이 필요하다.
Scale out이란, 기존의 데이터베이스 서버를 그대로 두고, 다른 장비를 추가하여 하나의 장비처럼 소프트웨어적으로 묶는 것을 말한다. 이것도 하드웨어적인 향상이지만, 기존의 것의 성능을 높이는 것이 아닌 다른 서버의 추가를 의미한다. Scale out은 이론적으로 무제한 확장이 가능하다. 성능을 높이기 위해서 똑같은 성능의 하드웨어를 구입하여 옆에 두고 사용하면 된다. 물론 소프트웨어적인 처리는 필요하다.
왜 RDB는 Scale up만 가능한 것일까?
RDB도 Scale out이 가능하다고 한다. 하지만 트랜잭션 처리 때문에 성능에 대한 이슈가 있다고 한다.
그 이유를 알기 위해서 RDB의 수평확장에 대해서 고민을 해봐야 할 것 같다.
Scale out이 되면, 여러개의 디바이스에 데이터가 분산저장이 되어야한다. 만약 같은 데이터가 저장이 된다면 의미가 없다.
RDB에서 데이터는 관계를 가지고 있기 때문에 관계 테이블이 존재한다. 관계를 가지고 있는 테이블이 여러개의 디바이스에 분산되어 저장된다면, 관계 테이블은 A라는 데이터와 관계를 가지고 있는 데이터가 어느 디바이스에 저장되어있는지를 알고 있어야한다. 최악의 경우 모든 디바이스에서 데이터를 불러오는 상황이 발생할 수도 있다. Scale up과 Scale out은 모두 성능의 향상을 위한 것인데 오히려 성능이 안좋아지는 기적을 보게 될 수도 있다.
RDB의 수평확장을 위해서 샤딩이라는 개념이 있는데, 이 부분에 대해서 우아한 형제들 테크 블로그에 잘 정리가 되어있어서 참고하면 좋을 것 같다.
https://techblog.woowahan.com/2687/
DB분산처리를 위한 sharding | 우아한형제들 기술블로그
{{item.name}} 소개 저희는 신사업부문에서 Thiiing(띠잉)서비스를 만들고 있는 송재욱/전병두입니다. 이번에는 두 명이 함께 기술블로그를 작성했습니다. 🙂 서비스 오픈전에 아름다운 J곡선 그래프
techblog.woowahan.com
정리 및 사견
RDB는 데이터 구조가 명확하고, 변경이 일어나지 않을 것으로 예상될 때 사용하면 유리하다.
NoSQL은 데이터의 구조가 명확하지 않고, 변경/확장이 빈번하게 일어날 것으로 예상될 때 사용하면 유리하다.
물론 데이터 구조 이외에도 많은 조건들이 RDB와 NoSQL을 선택하는 데 영향을 줄 것이다. RDB와 NoSQL 각각의 장단점이 뚜렷하기 때문에 뭐가 더 좋고 나쁘다 보다는 어떤 상황에 더 어울릴지에 대한 선택을 하는 것이 중요할 것 같다.
이 포스팅에서 많은 내용을 정리하지 않았기 때문에 예외상황이 존재하고, 장점이 단점으로 변하는 순간도 존재할 것이다. 하지만 각각의 기본적인 구조나 내용에 대해서 알고 있다면 실무에 적용을 고민할 때 더 나은 선택을 할 수 있을 거라고 생각한다.
'공부 > CS' 카테고리의 다른 글
[DB] drop, truncate, delete의 차이 (0) | 2023.08.22 |
---|---|
[클린코드] 깨끗한 코드란 무엇인가? (0) | 2023.06.01 |
[DB] 데이터베이스의 정규화 (0) | 2023.01.02 |
도메인 주도 설계? DDD? (0) | 2023.01.01 |
MSA(MicroService Architecture)와 MA(Monolithic Architecture) (0) | 2023.01.01 |