티스토리 뷰

Computer Science/DB

mongoDB에 모든것

devel0per 2024. 6. 17. 16:37

몽고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의 공식 문서와 튜토리얼을 참고하여 실습을 통해 익히는 것도 중요합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크