지난번에 찾아본 데이터베이스에 대해 발표 준비를 하며 다시 자료를 보니 좀 더 찾아보고 추가할 수 있는 부분이 있을 것 같아 추가로 조사를 해보았고 그 내용을 간단하게 정리해보았다.
1. 수직 확장과 수평 확장
NoSQL의 경우 수평 확장성이 뛰어나다는 특징을 가진다라고 정리를 해두었으나 사실 이게 어떤 의미인지는 정확하게 알지 못했고 그리하여 조금 더 찾아보게 되었다.
먼저 수직 확장이란 단일 서버를 더 좋은 스펙의 서버로 업그레이드 하는 것을 말한다. CPU를 더 좋은 것으로 업그레이드 하거나 아니면 용량이 더 큰 서버로 업그레이드를 하는 것을 말한다.
위와 같이 더 좋은 스펙의 서버로 업그레이드 하는 것이 아니라 여러 대의 서버를 추가하는 방식을 수평 확장이라고 한다. 계속에서 서버를 추가할 수 있기 때문에 이론적으로는 확장에 제약이 없어서 무한으로 확장할 수 있다.
2. NoSQL의 수평 확장성
그렇다면 NoSQL이 수평 확장에 유리한 이유는 무엇일까?
간단한 예시를 들어 살펴보자
- RDBMS의 경우
<상품 목록 테이블>
상품 ID | 상품명 | 가격 |
1 | 새우깡 | 1300 |
2 | 감자깡 | 1500 |
3 | 옥수수깡 | 1700 |
<구매 내역 테이블>
주문번호 | 상품 ID | 구매자 ID | 구매개수 |
101 | 1 | 11 | 1 |
102 | 3 | 22 | 5 |
103 | 2 | 33 | 2 |
104 | 3 | 11 | 4 |
105 | 2 | 33 | 3 |
106 | 1 | 22 | 1 |
107 | 1 | 44 | 2 |
108 | 3 | 11 | 2 |
109 | 2 | 33 | 1 |
위와 같은 2개의 테이블이 있다고 해보자. 그리고 이 데이터들을 각각 서버 1, 2, 3에 나눠서 저장해야한다고 생각해보자.
<저장 방식>
서버 1 → 상품 1
서버 2 → 상품 2
서버 3 → 상품 3
서버 1 → 구매내역 101~103
서버 2 → 구매내역 104~106
서버 3 → 구매내역 107~109
위와 데이터들이 저장된 상황이라면 상품 ID 1(새우깡)에 대한 상품 구매 내역을 조회하려면 서버 1,2,3을 모두 조회해야한다. (주문번호 101, 106, 107) 위와 같은 상황이라면 RDBMS에서는 이렇게 특정 상품에 대한 주문 내역들을 조회해내기가 힘들다.
RDBMS에서는 관계가 복잡하고 데이터가 늘어날수록 수평확장을 관리하는 것이 복잡하고 어려워진다.
- NoSQL의 경우
key - 상품 ID 1 | key - 상품 ID 2 | key - 상품 ID 3 |
value - 상품명 : 새우깡 상품가격 : 1300 주문내역 : (주문 번호: 101, 구매자ID: 11, 구매 개수: 1) (주문 번호: 106, 구매자ID: 22, 구매 개수: 1) (주문 번호: 107, 구매자ID: 44, 구매 개수: 2) |
value - 상품명 : 감자깡 상품가격 : 1500 주문내역 : (주문 번호: 103, 구매자ID: 33, 구매 개수: 2) (주문 번호: 105, 구매자ID: 33, 구매 개수: 3) (주문 번호: 109, 구매자ID: 33, 구매 개수: 1) |
value - 상품명 : 옥수수깡 상품가격 : 1700 주문내역 : (주문 번호: 102, 구매자ID: 22, 구매 개수: 5) (주문 번호: 104, 구매자ID: 11, 구매 개수: 4) (주문 번호: 108, 구매자ID: 11, 구매 개수: 2) |
RDBMS는 테이블 형식으로 특정 열에 숫자 데이터가 들어가면 나머지 데이터의 모든 행도 숫자가 들어가야 한다. 하지만 NoSQL에서는 정해진 데이터 형식이 없어서 어떤 데이터든 상관없이 들어갈 수 있다. 따라서 위와 같은 형태로도 데이터를 저장할 수 있다.
똑같이 위의 데이터들을 서버 1, 2, 3에 각각 나눠담아야 한다고 해보자.
<저장 방식>
서버 1 → 상품 ID 1
서버 2 → 상품 ID 2
서버 3 → 상품 ID 3
어떻게 분할해야할지 정하기도 쉬울 뿐더러, 상품 ID 1(새우깡)에 대한 주문 내역을 모두 가져오려면 서버 1 하나만을 조회하면 된다. 상품의 수가 많아져도 서버를 추가하여 확장하는 것이 어렵지 않다.
하지만 NoSQL의 경우는 특정 컬렉션(RDBMS에서의 테이블과 비슷하다)에 모든 데이터가 저장되기 때문에 데이터의 중복이 있다는 단점 역시 존재한다
간단히 든 예시는 내가 이해한 바를 토대로 아주 단순히 만든 것이라 아주 정확하지는 않을 것이다. 수 많은 경우가 있을 것이고 상황에 따라 RDBMS와 NoSQL 중에 적합한 DBMS를 택하면 될 것이다.
3. 오늘 알게된 것
- 몰랐던 부분을 알게되어 흥미로웠다. 어려워 보이는 개념도 생각보다 쉽게 이해할 수 있었다.
- DB에 대해 알아는 보았지만 아직 사용은 제대로 못해봤기 때문에 앞으로가 기대된다.
'오늘 배운 것' 카테고리의 다른 글
24-03-30 정규 표현식 (2) (0) | 2024.03.30 |
---|---|
24-03-29 정규 표현식 (0) | 2024.03.29 |
24-03-27 Kotlin 컬렉션 집계하기 (2) (0) | 2024.03.27 |
24-03-26 Kotlin 컬렉션 집계하기 (0) | 2024.03.26 |
24-03-25 데이터베이스와 쿼리 (0) | 2024.03.25 |