※ NoSQL 개요 및 등장 배경
NoSQL (Not Only SQL)은 기존 관계형 데이터베이스(RDBMS)의 한계를
극복하기 위해 등장한 비(非)관계형 데이터베이스입니다.
처음에는 “SQL을 사용하지 않는다”는 의미였지만,
현재는 “SQL뿐만 아니라 다양한 저장 방식”을 지원한다는 뜻으로 사용됩니다.
📌 NoSQL이 등장한 이유: 웹·모바일 환경에서 데이터 구조가 다양해짐 - 사용자 수 증가
→ 수평 확장(Scale-out) 필요 - 실시간 처리, 빅데이터, 로그 수집 등 비정형 데이터 증가
→ NoSQL은 고정된 스키마 없이 유연한 구조를 제공하고,
대규모 데이터를 빠르게 처리하는 데 특화되어 있습니다.
※ NoSQL의 주요 특징
📁 스키마 유연성 (Schema-less): 데이터 구조를 사전에 정의하지 않아도 저장 가능
🚀 고성능 & 고확장성: 수평적 확장이 용이하여 대규모 데이터 처리에 유리
🧩 다양한 데이터 모델: Key-Value, Document, Column, Graph 형태 지원
📡 분산 처리 기반: 여러 서버에 데이터를 자동 분산하여 저장
※ RDBMS vs NoSQL 비교
| 항목 | RDBMS | NoSQL |
|---|---|---|
| 데이터 구조 | 고정된 스키마, 테이블 구조 | 스키마 없음 또는 유연한 구조 |
| 확장성 | 수직 확장 (Scale-up) | 수평 확장 (Scale-out) |
| 데이터 관계 | 명확한 관계 (JOIN) | 관계보다 구조 유연성이 중요 |
| 트랜잭션 | ACID 보장 | CAP 이론 기반 (일관성보단 가용성 우선) |
| 적합한 용도 | 정형 데이터, 복잡한 쿼리 | 비정형 데이터, 대규모 트래픽 |
→ RDBMS는 “관계”와 “정합성”이 중요한 경우에,
NoSQL은 “확장성”과 “유연성”이 중요한 경우에 적합합니다.
※ MongoDB란?
MongoDB는 대표적인 문서 지향(Document-oriented) NoSQL 데이터베이스입니다.
데이터를 테이블이 아닌 JSON 유사한 형식(Document)으로 저장하며,
스키마 없이 다양한 필드를 유연하게 저장할 수 있습니다.
📁 MongoDB의 주요 특징
- JSON 기반의 문서(Document) 구조
- 동적 스키마 (필드 추가/삭제 자유로움)
- 복잡한 조인 없이 중첩 문서로 구조 표현 가능
- 자동 샤딩(Sharding) 및 수평 확장 지원
※ RDBMS vs MongoDB 용어 비교
| RDBMS | MongoDB | 설명 |
|---|---|---|
| Database | Database | 데이터를 저장하는 최상위 단위 |
| Table | Collection | 문서(Document)들의 집합 |
| Row (Record) | Document | 실제 데이터 한 건 (JSON 형태) |
| Column | Field | 문서(Document)의 속성 |
※ JSON vs BSON
MongoDB는 데이터를 내부적으로 BSON (Binary JSON) 형식으로 저장합니다.
JSON은 사람이 읽기 쉬운 텍스트 형식이고,
BSON은 저장·전송 효율을 높인 이진 포맷입니다.
// JSON 예시
{
"name": "지우",
"age": 26,
"skills": ["Python", "Kubernetes"]
}
→ 사용자는 JSON 형태로 데이터를 다루지만,
MongoDB는 내부적으로 BSON으로 처리합니다.
※ MongoDB의 기본 구조
Database → Collection → Document
// students 컬렉션의 Document 예시
{
"_id": ObjectId("6521d2..."),
"name": "지우",
"major": "AI Engineering",
"age": 26,
"skills": ["Python", "Docker", "Kubernetes"]
}
→ `_id`는 MongoDB가 자동 생성하는 고유 식별자이며, Primary Key 역할을 합니다.
※ CRUD 명령어 (insert, find, update, delete)
MongoDB의 CRUD 명령어는 JavaScript 문법과 유사하며, 매우 직관적입니다.
📥 1) INSERT – 데이터 삽입
// 단일 삽입
db.students.insertOne({
name: "민준",
major: "Data Science",
age: 24
});
// 다중 삽입
db.students.insertMany([
{ name: "수현", major: "AI", age: 25 },
{ name: "하늘", major: "Math", age: 23 }
]);
🔍 2) FIND – 데이터 조회
// 전체 조회
db.students.find();
// 조건 조회
db.students.find({ major: "AI" });
// 특정 필드만 조회
db.students.find({}, { name: 1, major: 1, _id: 0 });
✏️ 3) UPDATE – 데이터 수정
// 단일 문서 수정
db.students.updateOne(
{ name: "민준" },
{ $set: { major: "Computer Science" } }
);
// 여러 문서 수정
db.students.updateMany(
{ major: "AI" },
{ $inc: { age: 1 } } // age +1
);
🗑️ 4) DELETE – 데이터 삭제
// 단일 문서 삭제
db.students.deleteOne({ name: "하늘" });
// 조건에 맞는 여러 문서 삭제
db.students.deleteMany({ major: "AI" });
→ `$set`, `$inc`, `$push` 등 다양한 연산자를 활용하여 데이터를 유연하게 조작할 수 있습니다.
'2025 현대오토에버 모빌리티 SW 스쿨(클라우드 2기) > 데이터베이스' 카테고리의 다른 글
| [Database] Python과 DB 연동 (1) – MongoDB (0) | 2025.10.07 |
|---|---|
| [Database] MongoDB 심화 활용 (0) | 2025.10.07 |
| [Database] DML과 트랜잭션(TCL) (0) | 2025.10.07 |
| [Database] DDL과 제약 조건 (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (3) – SubQuery와 Join (0) | 2025.10.07 |