이번에는 몽고DB의 기본인 Document, Collection, DataBase, _id에 대해서 알아보도록 하겠습니다.
1.Document 이란?
[Document 무엇일까?]
정렬된 키와 값의 집합이다. 가장 빠르게 이해하기 쉬운 것은 바로 JSON 객체를 떠올리면 된다.
{
"name" : "flambee",
"address" : {
"city" : "seoul"
"street" : "14-44"
},
"like" : ["music", "sushi"]
}
Document의 키는 문자열이다. 그리고 UTF-8 문자로 지원한다.
키는 \0(null)을 포함하지 않는다. 그리고 .과 $ 문자는 몇 가지 특별한 속성을 가지며 특정 상황에서만 사용해야한다. .과 $는 CRUD에 대해서 사용하게 된다. 즉, 뒤에 나올 컬렉션 접근 시에 사용된다. 마지막으로 키는 대소문자를 구분한다.
값은 데이터형(String, Int, Long, etc)이어야 한다.
2.Collection 이란?
[Collection 무엇일까?]
도큐먼트의 모음이다. RDBMS를 빚대어 표현하자면 table을 뜻한다. 특이점 동적 스키마를 가진다는 것인데 컬렉션 내에 저장된 도큐먼트들이 모두 다른 구조를 가질 수가 있다.
{
"name" : "flambee",
"address" : {
"city" : "seoul"
"street" : "14-44"
},
"like" : ["music", "sushi"]
},
{
"language" : "Rust"
}
동적 스키마를 가지기 때문에 검색, 애그리거트 묶음, 인덱스 구조를 잘 생각하여 Collection의 구조를 짜야한다. 만약 그렇지 못하면 유지보수가 힘들어질 것이다.
{
"address" : {
"city" : "seoul"
"street" : "14-44"
}
}
서브컬렉션을 가질 수 있다. 예시의 address.city, address,street 처럼 체계화를 할 수가 있다. 이에 대해서 몽고DB는 서브컬렉션을 접근하는 API를 제공한다. RDBMS의 구조를 역직렬화할 때 매우 유용하게 쓰일 것 같다.
3.DataBase 이란?
[DataBase 무엇일까?]
여러 컬렉션들이 모여서 데이터베이스를 이룬다. 몽고DB의 단일 인스턴스는 여러 데이터베이스를 호스팅 할 수 있으며, 각 데이터베이스를 완전히 독립적으로 취급할 수 있다.
사실, 해당 내용이 이해가 어려워서 ChatGPT에게 물어보았다.
질문 : 몽고DB의 단일 인스턴스는 여러 데이터베이스를 호스팅 할 수 있으며, 각 데이터베이스를 완전히 독립적으로 취급이 가능하다는데 왜 그러는 거야?
대답 :
MongoDB is a document-oriented database management system. In MongoDB, a single instance can host multiple databases, and each database is treated as a completely independent entity. This allows for greater flexibility in terms of data organization and management. Each database can have its own set of collections, users, and permissions, and can be backed up, restored, and scaled independently of other databases on the same instance. This allows for easier management of different types of data, as well as the ability to isolate different parts of an application's data storage needs.
(몽고DB가 데이터베이스에 대해서 엔터티로 관리할 수 있고, 이러한 엔터티로 관리하면 각각 독립적인 성격을 가진 엔터티의 묶음으로 사용이 가능하다는 뜻이었다.)
질문 : 어떻게 단일 인스턴스가 여러 데이터베이스를 호스팅 할 수 있는데?
대답 :
A single instance in MongoDB refers to a running instance of the MongoDB process on a given machine or cluster of machines. When you run MongoDB on your machine, it starts a single instance of the MongoDB process. This process can be configured to host multiple databases.
Each database in MongoDB is a logical container for a set of collections, where each collection holds a set of documents. This means that a single MongoDB instance can host multiple databases, each with its own set of collections and documents. This allows for easy organization of data and separation of concerns within an application. For example, one database can be used for user data and another for application logs, allowing for easier management of these distinct sets of data.
(데이터베이스를 컨테이너로 사용하기 때문에 하나의 몽고DB 인스턴스가 다른 컨테이너를 모두 접속이 가능하다는 뜻이었다.)
4._id 이란?
[_id와 ObjectId는 무엇일까?]
몽고DB에는 저장된 모든 도큐먼트는 _id를 가진다. _id 값은 어떤 데이터형이어도 상관없지만, ObjectId가 기본이다. 즉 유일한 값이고 도큐먼트를 식별할 수 있는 식별자 역할을 한다.
ObjectId로 _id의 값을 만든다면 몽고DB가 분산 데이터베이스로 설계됐기 때문에 샤딩 된 환경에서 고유 식별자를 12바이트로 만들어낸다. 12바이트로 만들어진 값은 타임스탬프 + 랜덤 + 카운터 (랜덤 시작 값)으로 만들어진다.
요번에는 몽고DB의 기본적인 Document, Collection, DataBase, _id 에 대해서 알아보았습니다. 요번 기회로 ChatGPT를 사용할 수 있어서 매우 많은 도움이 되었습니다. 다음에는 도큐먼트에 대한 추가, 수정, 삭제에 대해서 알아보도록 하겠습니다.
[참고자료]
- 몽고DB 완벽가이드
'MongoDB' 카테고리의 다른 글
[MongoDB] 몽고DB의 인덱스(Index) (0) | 2023.02.04 |
---|---|
[MongoDB] 몽고 DB란 무엇일까? (0) | 2023.01.25 |