티스토리 뷰
몽고DB(MongoDB)는 문서 지향(document-oriented) 데이터베이스로, JSON과 유사한 BSON(Binary JSON) 포맷을 사용하여 데이터를 저장합니다. 관계형 데이터베이스(RDBMS)와는 다르게 스키마가 없고, 유연하고 확장성이 뛰어난 구조를 가지고 있습니다. MongoDB를 효과적으로 사용하기 위해 알아야 할 필수 개념들을 정리하면 다음과 같습니다:
1. 기본 개념
- 문서(Document): MongoDB의 기본 데이터 단위로, JSON과 유사한 구조를 가진 BSON(Binary JSON) 형식의 데이터입니다. 필드와 값의 쌍으로 이루어져 있으며, 각 필드는 다양한 데이터 타입을 가질 수 있습니다.
- 컬렉션(Collection): 비슷한 구조의 문서들을 그룹화한 것입니다. 관계형 데이터베이스의 테이블과 유사하지만, 엄격한 스키마를 가지지 않습니다.
- 데이터베이스(Database): 여러 개의 컬렉션을 포함하는 컨테이너입니다. 한 개의 MongoDB 인스턴스에는 여러 개의 데이터베이스가 존재할 수 있습니다.
2. 스키마 설계
- 스키마리스(Schema-less): MongoDB는 스키마가 없는 구조를 가지고 있어서, 각 문서가 동일한 필드를 가질 필요가 없습니다. 이는 매우 유연한 데이터 모델링을 가능하게 합니다.
- 임베디드 문서(Embedded Documents): 문서 내에 다른 문서를 포함할 수 있습니다. 이는 복잡한 계층 구조를 단일 문서로 표현할 수 있게 합니다.
- 참조(References): 한 문서에서 다른 문서로의 참조를 통해 관계를 표현할 수 있습니다. 이는 RDBMS의 외래 키와 유사한 개념입니다.
3. CRUD 연산
- 생성(Create): insertOne(), insertMany() 메소드를 사용하여 문서를 컬렉션에 추가합니다.
db.users.insertOne({
name: "John Doe",
age: 30,
status: "active"
});
db.users.insertMany([
{ name: "Jane Smith", age: 25, status: "inactive" },
{ name: "James Brown", age: 35, status: "active" }
]);
- 읽기(Read): find(), findOne() 메소드를 사용하여 문서를 조회합니다. 필터를 사용하여 특정 조건을 만족하는 문서만 조회할 수 있습니다.
db.users.find({ status: "active" });
db.users.findOne({ age: 30 });
- 업데이트(Update): updateOne(), updateMany(), replaceOne() 메소드를 사용하여 문서를 수정합니다. $set, $unset, $inc 등 다양한 연산자를 사용할 수 있습니다.
db.users.updateOne(
{ name: "John Doe" },
{ $set: { status: "inactive" } }
);
db.users.updateMany(
{ age: { $gte: 30 } },
{ $set: { status: "inactive" } }
);
db.users.replaceOne(
{ name: "John Doe" },
{ name: "John Smith", age: 32, status: "active" }
);
- 삭제(Delete): deleteOne(), deleteMany() 메소드를 사용하여 문서를 삭제합니다.
db.users.deleteOne({ name: "John Doe" });
db.users.deleteMany({ status: "inactive" });
4. 인덱싱
- 인덱스(Index): 데이터 조회 속도를 높이기 위해 컬렉션의 특정 필드에 인덱스를 생성할 수 있습니다. createIndex() 메소드를 사용하며, 복합 인덱스, 텍스트 인덱스 등 다양한 인덱스 타입이 있습니다.
- 복합 인덱스(Compound Indexes): 여러 필드를 조합하여 하나의 인덱스를 생성할 수 있습니다.
- 텍스트 인덱스(Text Indexes): 문자열 검색을 위한 인덱스로, 텍스트 필드의 내용에 대해 효율적인 검색을 제공합니다.
5. 집계 프레임워크(Aggregation Framework)
- 집계(Aggregation): 데이터의 복잡한 변환 및 분석을 위해 사용하는 강력한 도구입니다. aggregate() 메소드를 사용하여 파이프라인 형식으로 여러 단계의 연산을 수행할 수 있습니다.
- 파이프라인(Pipeline): 여러 개의 스테이지로 구성되며, 각 스테이지는 입력을 받아서 변환한 후 다음 스테이지에 전달합니다.
- 스테이지(Stages): $match, $group, $sort, $project 등 다양한 연산자가 있습니다.
6. 복제와 샤딩
- 복제(Replication): 데이터의 고가용성과 내결함성을 위해 복제 세트(replica set)를 구성합니다. 주(primary) 노드와 여러 개의 보조(secondary) 노드로 구성됩니다.
- 샤딩(Sharding): 매우 큰 데이터베이스를 여러 서버에 분산하여 저장하는 방법입니다. 샤드 키(shard key)를 사용하여 데이터를 분할하고, 각 샤드에는 데이터의 일부가 저장됩니다.
7. 트랜잭션
- 트랜잭션(Transaction): ACID 속성을 지원하는 트랜잭션을 사용하여 여러 문서에 걸친 일관된 데이터 변경을 보장할 수 있습니다. startTransaction(), commitTransaction(), abortTransaction() 메소드를 사용합니다.
8. 보안
- 인증(Authentication): 사용자의 신원을 확인하는 과정으로, 다양한 인증 메커니즘을 지원합니다.
- 권한 부여(Authorization): 사용자가 수행할 수 있는 작업을 제한합니다. 역할 기반 액세스 제어(Role-Based Access Control, RBAC)를 통해 세밀하게 권한을 설정할 수 있습니다.
- 암호화(Encryption): 전송 중 데이터 암호화(TLS/SSL)와 저장 데이터 암호화(Encryption at Rest)를 통해 데이터 보안을 강화할 수 있습니다.
9. 성능 최적화
- 쿼리 최적화(Query Optimization): 적절한 인덱스 사용, 쿼리 프로파일링을 통해 성능을 개선할 수 있습니다.
- 조정(Tuning): 데이터베이스 설정 및 하드웨어 리소스를 최적화하여 성능을 향상시킬 수 있습니다.
10. 도구 및 인터페이스
- Mongo Shell: MongoDB와 상호 작용하기 위한 기본 CLI 도구입니다.
- MongoDB Compass: GUI 도구로, 데이터를 시각화하고 쿼리를 실행하며 데이터베이스 상태를 모니터링할 수 있습니다.
- 드라이버(Drivers): 다양한 프로그래밍 언어에서 MongoDB를 사용할 수 있게 해주는 드라이버가 제공됩니다. (예: Node.js, Python, Java 등)
11. 데이터 백업 및 복원
- 백업(Backup): mongodump, mongorestore 도구를 사용하여 데이터를 백업하고 복원할 수 있습니다.
- 스냅샷(Snapshots): 파일 시스템 스냅샷을 사용하여 데이터를 백업할 수 있습니다.
이러한 개념들을 이해하고 익히면 MongoDB를 효율적으로 사용할 수 있을 것입니다. MongoDB의 공식 문서와 튜토리얼을 참고하여 실습을 통해 익히는 것도 중요합니다.
'Computer Science > DB' 카테고리의 다른 글
mongoDB 데이터베이스 Full Backup (2) | 2024.12.01 |
---|---|
mongoDB(생성/제거/추가) (0) | 2024.06.17 |
티베로(tibero) 테이블명 조회, 컬럼명 조회, 상세정보 조회 (0) | 2024.01.30 |
티베로(tibero) 테이블 컬럼(추가, 수정, 삭제) (0) | 2024.01.30 |
NoSQL이란? (0) | 2022.11.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
링크