본문 바로가기
Study/MongoDB

[study] MongoDB 완벽 가이드 3판 - 몽고DB 기본

by hi_senii 2021. 10. 26.

Mongo DB의 기본 개념

1. 도큐먼트

정렬된 키와 연결된 값의 집합으로 이루어짐

도큐먼트 표현 방식

프로그래밍 언어 마다 다르지만,

대부분의 언어는 맵(map), 해시(hash), 딕셔너리(dictionary)와 같이 도큐먼트를 자연스럽게 표현하는 자료구조를 가짐

 

도큐먼트의 키는 문자열이다. 예외 몇 가지를 제외하면 어떤 UTF-8 문자든 쓸 수 있다.

-> 키는 null 문자를 포함하지 않는다. \0은 키의 끝을 나타내는 데 사용된다.

-> ,과 $ 문자는 몇 가지 속성을 가지는데 이는 다음 장에서 설명할 특정 상황에만 사용된다. 이 문자들은 보통 예약어(reserved word)로 취급해야 한다. 부적절하게 사용하면 드라이버에서 경고를 발생

 

Mongo DB는 대소문자를 구별하고, 5와 "5"는 다른 도큐먼트로 취급한다.

또한, 키는 중복될 수 없다.

 

2. 컬렉션

도큐먼트의 모음이다.

컬렉션은 관계형 데이터베이스의 테이블에 대응된다.

또한, 동적 스키마를 가진다.

컬렉션의 동적 스키마에 대해 알아보겠다.

 

동적스키마는 하나의 컬렉션 내 도큐먼트들이 모두 다른 구조를 가질 수 있음을 뜻한다.

다음과 같은 도큐먼트들을 하나의 컬렉션에 저장할 수 있음

{"greeting" : "Hello, world!", "views" : 3}
{signoff" : "Good night, and good luck"}

 

 

여기서 두가지의 의문이 생길 수 있다.

1. 다른 구조의 도큐먼트를 같은 컬럼에 저장할 수 있는데 왜 별도의 컬렉션이 필요한가

2. 도큐먼트에 별도의 스키라마가 필요없는데 왜 하나 이상의 컬렉션이 필요한가

 

첫 째, 개발자와 관리자에게 번거로운 일이 생긴다.(특정 데이터만 지워야하는 경우)

둘 째, 컬렉션별로 목록을 뽑으면 한 컬렉션 내 특정 데이터형별로 쿼리해서 목록을 뽑을 때보다 빠르다.

셋 째, 같은 종류의 데이터를 하나의 컬렉션에 모아두면 데이터 지역성(data locality)에도 좋다.

넷 째, 인덱스를 만들면 도큐먼트는 특정 구조를 가져야한다.(같은 유형의 도큐먼트들이 있으면 컬렉션을 효율적으로 인덱싱 할 수 있음)

 

 

다음으로, 컬렉션은 이름으로 식별된다. 컬렉션 명은 어떤 UTF-8 문자열이든 쓸 수 있지만 몇가지 제약조건이 있다.

-> 빈문자열, \0(null 문자), system.으로 시작하는 예약어, $를 포함하는 예약어는 사용해서는 안됨

 

또한, .(마침표) 문자를 사용하여 컬렉션을 체계화한다.(Mongo DB의 데이터를 체계화하는 훌륭한 방법)

ex) 블로그 기능이 있는 애플리케이션 blog.posts와 blog.authors라는 컬렉션을 가질 수 있음

-> 이는 blog컬렉션이나 자식 컬렉션과는 아무 관계가 없음

 

 

3. 데이터베이스

MongoDB는 컬렉션에 도큐먼트를 그룹화할 뿐 아니라 데이터베이스에 컬렉션을 그룹 지어 놓는다.

MongoDB의 단일 인스턴스여러 데이터베이스를 호스팅할 수 있음.(각 데이터 베이스를 독립적으로 취급가능)

 

데이터베이스는 컬렉션과 같이 이름으로 식별한다.

컬렉션과 이름 제약 조건이 유사하지만 / \ . ' ' * < > : | ? $ (단일공간) \0과 같은 문자를 포함할 수 없고, 최대 64바이트다.

또한, 직접 접근을 가능하지만 특별한 의미론을 갖는 예약된 데이터베이스 명도 있다.

- admin

인증(authentication)과 권한부여(authorization) 역할을 함

* admin에 대한 자세한 내용은 나중에 알아보자.

 

- local

단일 서버에 대한 데이터를 저장한다.

 

- config

샤딩(sharding)된 MongoDB 클러스터는 config 데이터베이스를 사용해 각 샤드(shard)의 정보를 저장한다.

 

 

 

 

 

 

 

오늘은 MongoDB의 기본개념에 대해 알아보았다. 그동안 배웠던 개념과 유사한 것도 있고 새로운 것도 있어서 흥미로웠다. 이 다음부터는 MongoDB를 깔고 실습과 겸하여 배우게 된다. 그렇게 된다면 더 MongoDB에 대해 잘 알게 될 것 같다. 아직까지는 MongoDB가 매우 흥미롭다. 별로 안 공부하긴 했지만;;; ㅎㅎ, 여기에 기록된 내용은 책을 바탕으로 작성 되었지만 공부하면서 쓴 내용이라 많은 내용이 요약되어 있다. 더 자세히 알고 싶다면 책을 구매해서 보는 것을 추천한다. 배우면 배울수록 더 재밌는 공부가 되길 바라면서 오늘은 이만 정리를 마치겠다.

 

 

* 이 글은 몽고 DB 완벽 가이드 3판<한빛미디어> 책을 토대로 작성되었습니다.