해당 글에서는 NoSQL에 대해 이해하며 Document DB의 MongoDB에 대해서 이해하고 메서드를 확인해 봅니다.
1) NoSQL
💡 NoSQL이란?
- ‘Not Only SQL’ 또는 ‘Non-Relational SQL’이라는 의미를 가지며 관계형 데이터베이스 관리 시스템(RDBMS)이 아닌 다른 형태의 데이터 저장소를 의미합니다. - NoSQL은 대용량 분산 데이터 처리를 위해 개발되었으며 데이터의 구조적 유연성과 확장성을 제공합니다.
[ 더 알아보기 ] 💡 대용량 분산 데이터 처리란?
- 매우 큰 데이터 집합을 여러 대의 컴퓨터로 분할하여 처리하는 것을 말합니다. - 이렇게 분산된 데이터를 처리하면 빠른 속도와 높은 확장성을 제공할 수 있습니다. 대규모 데이터 처리를 위해서는 대용량 분산 데이터 처리 기술이 필수적입니다.
1. NoSQL 종류
💡 NoSQL의 종류로는 문서 저장소(Doucment Store), 키-값 저장소(Key-Value Store), 열 지향 데이터베이스(Wide-Column Store), 그래프 저장소(Graph Store)의 형태를 가지고 있습니다
데이터에 대한 사전 정의가 필요하지 않아 데이터 모델링이 간단하고 유연한 데이터 저장과 검색이 가능합니다.
수평적 확장이 가능합니다
더 많은 서버를 추가함으로써 데이터베이스 처리 능력을 향상시킬 수 있다. 대규모 데이터 처리에 유용합니다.
다양한 데이터 모델을 제공합니다
각각의 데이터 형식에 맞게 Key-value, document, column family, graph 등 다양한 형태의 데이터 모델을 제공합니다.
높은 가용성을 보장합니다
다수의 노드를 이용하여 데이터를 저장하므로 한 노드가 다운되어도 다른 노드에서 데이터를 읽을 수 있다. 대규모 서비스에서 매우 중요한 요소 중 하나입니다.
[ 더 알아보기 ] 💡 수평적 확장과 수직적 확장은 뭘까?
- 수평적 확장 : 서버 수를 늘리는 것을 의미합니다. NoSQL 데이터베이스에서는 데이터를 여러 노드에 분산하여 저장하고 처리함으로써 시스템의 용량과 처리량을 확장할 수 있습니다.
- 수직적 확장 : 서버의 성능을 향상시키기 위해 하드웨어를 업그레이드하는 것을 의미합니다. 일반적으로 CPU, 메모리, 디스크 등의 하드웨어 요소를 더 강력한 것으로 교체하거나 추가하여 시스템의 성능을 개선하는 방법입니다.
💡NoSQL은 왜 수평적인 확장이 가능한가?
- NoSQL 데이터베이스가 데이터를 여러 노드에 분산하여 저장하고 처리할 수 있는 구조를 가지고 있기 때문입니다. 데이터를 여러 노드에 분산하여 저장함으로써 데이터베이스의 용량과 처리량을 확장할 수 있으며, 이를 통해 대규모 데이터 및 트래픽을 처리하는데 더 효율적이고 확장 가능한 시스템을 구축할 수 있습니다.
💡 NoSQL의 수평적인 확장을 하는 방법
- 샤딩(Sharding): 데이터를 파티션으로 나누어 여러 노드에 분산 저장합니다. 각 노드는 자체 하위 집합 데이터를 관리하며, 이렇게 분산된 데이터는 전체 시스템에서 처리됩니다.
- 레플리케이션(Replication): 데이터를 여러 노드에 복제하여 저장합니다. 이는 데이터의 가용성과 내구성을 향상시키는 데 도움이 됩니다. 레플리케이션은 읽기 작업을 분산하여 처리하고, 장애 발생 시 데이터의 손실을 방지할 수 있습니다.
- 로드 밸런싱(Load Balancing): 요청이 균등하게 분산되도록 트래픽을 조절하는 메커니즘을 구현합니다. 이를 통해 각 노드의 작업 부하를 균형 있게 분산시킬 수 있습니다.
- 자동 스케일링(Auto Scaling): 시스템의 부하에 따라 자동으로 노드를 추가하거나 제거하여 수평적인 확장을 지원합니다. 이는 대량의 데이터나 트래픽이 발생할 때 유연하게 확장할 수 있는 장점을 제공합니다.
3. NoSQL vs RDBMS 차이 비교
비교항목
NoSQL
RDBMS
데이터 모델
비 관계형 모델
관계형 모델
스키마
동적
정적
확장성
수평적
수직적
쿼리 언어
제한적
SQL
데이터 일관성
유연
일관성 보장
트랜잭션 처리
제한적
ACID 보장
데이터 무결성
제한적
높음
대규모 분산처리
지원
어려움
용도
대규모 분산 DB
정형 데이터 DB
[ 더 알아보기 ] 💡 ACID 란?
- 데이터베이스 관리 시스템에서 데이터의 일관성, 독립성, 지속성, 격리성을 보장하기 위한 속성을 의미합니다. ACID는 다음과 같은 의미를 가집니다.
- Atomicity (원자성): 트랜잭션의 모든 작업이 완료되거나, 아니면 전혀 수행되지 않아야 함. - Consistency (일관성): 트랜잭션이 완료된 후에도 데이터베이스가 항상 일관된 상태를 유지해야 함. - Isolation (격리성): 여러 트랜잭션이 동시에 실행될 때, 각각의 트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 함. - Durability (지속성): 트랜잭션에 의해 변경된 데이터는 영구적으로 유지되어야 함.
💡 NoSQL과 RDBMS의 트랜잭션 속도는 어떤 것이 더 빠를까? ⭐️⭐️⭐️
- RDBMS는 트랜잭션 처리를 위해 ACID 원칙을 따릅니다. 이는 데이터 일관성을 보장하기 위해 매우 엄격한 접근 방식을 취하며, 이로 인해 처리 속도가 느릴 수 있습니다. 또한, 트랜잭션 처리를 위해 ACID 원칙을 완전히 따르지 않습니다. 이는 속도를 높이기 위해 데이터 일관성을 제한할 수 있기 때문입니다. 따라서, 트랜잭션 처리 속도를 중요하게 생각하는 경우 RDBMS를 선택하는 것이 좋습니다. 그러나 대용량 데이터 처리를 위해 높은 처리 속도가 필요한 경우, mongoDB가 더 적합할 수 있습니다.
💡 NoSQL과 RDBMS의 조회(SELECT) 속도는 무엇이 더 빠를까? ⭐️⭐️⭐️
- 일반적으로 MongoDB는 RDBMS보다 더 빠르게 SELECT 쿼리를 처리합니다. 이는 MongoDB가 NoSQL 데이터베이스이며 RDBMS와는 다른 방식으로 데이터를 저장하고 쿼리를 실행하기 때문입니다. 그러나 이는 모든 상황에서 유효하지 않을 수 있습니다. 데이터 스키마, 인덱싱, 쿼리 복잡성 등 상황에 따라 MongoDB와 RDBMS의 성능이 다를 수 있습니다.
2) Document DB & Mongo DB
💡 DocumentDB - NoSQL 데이터베이스의 한 유형으로 ‘비 정형 데이터’를 저장하고 조회하기 위해 사용되는 데이터베이스입니다.
- 문서 데이터베이스는 JSON 또는 XML과 같은 문서 형식으로 데이터를 저장하며, 각 문서는 고유한 식별자를 가지고 있습니다. 이러한 데이터베이스는 유연하고 확장 가능하며, 대규모의 데이터를 처리하는 데 효율적입니다.
💡 MongoDB 란? - ‘비 관계형 데이터베이스 관리시스템’으로 테이블과 행 대신에 유연한 문서를 활용해 다양한 데이터 형식을 처리하고 저장합니다. - NoSQL 모델 중 Document DB로 데이터 및 메타데이터는 데이터베이스 내의 JSON 기반 문서에 계층적으로 저장됩니다.
3) RDBMS와 비교하여 MongoDB의 차이는 무엇인가?
💡 RDBMS와 비교하여 MongoDB의 차이⭐️⭐️⭐️ 1. 테이블 구조
- RDBMS는 테이블 구조를 가지는 형태로 데이터가 저장이 됩니다. No-SQL의 경우는 테이블 구조를 따르지 않고 Key-Value, Document, Graph 등의 형태로 저장이 됩니다.
2. ACID, 데이터 무결성
- RDBMS는 ACID (원자성, 일관성, 고립성, 지속성) 특성을 보장하며, 데이터의 무결성과 일관성을 유지합니다. No-SQL의 경우는 ACID 특성을 보장하지 않으며, 데이터 일관성과 무결성을 보장하지 않기에 데이터 신뢰성이 떨어질 수 있습니다.
3. 데이터 처리의 최적화
- RDBMS의 경우 상대적으로 대용량 데이터 처리에 효율적이지 않습니다. No-SQL의 경우는 대용량 데이터 처리에 효율적입니다.
4. 조회 속도
- Document DB가 텍스트 형태로 구성되어 있어서 상대적으로 RDBMS보다 조회 속도가 빠릅니다.
5. 등록, 수정, 삭제 속도
- RDBMS가 Document DB보다 속도가 더 빠릅니다.
6. 사용 목적
- RDBMS는 데이터 일관성과 신뢰성을 중요시하는 경우에 적합하며, 등록, 수정, 삭제 작업이 빈번한 애플리케이션에 적합합니다. NoSQL(Document)은 대규모 데이터를 다루는 경우와 데이터 모델링이 자주 변경되는 경우에 적합합니다. 또한 수평적 확장이 가능하기 때문에 대규모 데이터 처리에 유리합니다
1. 컬렉션의 이름은 대소문자를 구분합니다 ex) Collection과 collection은 다른 이름입니다. 2. 컬렉션의 이름에는 알파벳 소문자, 대문자, 숫자, 하이픈(-) 및 밑줄(_)만 사용할 수 있습니다. 또한 공백을 포함해서는 안됩니다. 3. 컬렉션의 이름의 길이 제한은 64자 미만입니다. 4. 컬렉션의 이름은 숫자로 시작해서는 안 됩니다.
- update()는 기존의 Document를 업데이트하고 필드의 값을 변경하거나 추가할 수 있습니다. - replace()는 기존의 Doucment를 대체합니다. 새로운 Document를 전달하여 기존의 Doucument를 완전히 대체합니다. (대체를 하게 되면 새로운 도큐먼트의 필드와 값을 쌍으로 구성이 됩니다.)
9. db.collection.deleteOne()
💡 db.collection.deleteOne()
- 지정된 Collection에서 ‘단일’ Doucument를 ‘삭제’하는 메서드입니다.
파라미터
필수여부
설명
filter
필수
이 파라미터는 삭제할 도큐먼트를 선택하는 필터 조건을 지정합니다.
options
선택
삭제에 대한 옵션을 지정하는 객체입니다.
collation
선택
작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 통해 사용자는 문자 대소문자 및 악센트 표시 규칙과 같은 문자열 비교를 위한 언어별 규칙을 지정할 수 있습니다.