본문 바로가기

- Programming/- MongoDB

★ 1. MongoDB 강좌 1편

반응형

이 강좌에서는 MongoDB에 대한 소개 및 설치 방법

그리고 데이터가 어떤 식으로 구성 되어있는지에 대해 알아보겠습니다.



MongoDB란?


MongoDB는 c++로 작성된 오픈 소스 문서 지향(Document Oriented)적인 Cross Platform 데이터베이스입니다.

뛰어난 확장성과 성능을 자랑하며 가장 유명한 NoSQL 데이터베이스 시스템입니다.



NoSQL이란?

NoSQL 데이터베이스는 전통적인 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및
검색을 위한 매커니즘을 제공합니다. 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와
스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적입니다.
이 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 합니다.


Document란?
MongoDB를 오픈 소스 문서 지향(Document Oriented) 데이터베이스라고 했는데 여기에서 Document는 무엇일까요?
그냥 문서라고 번역하기에는 조금 애매합니다. 여기서 말하는 Document는 RDMS의 record와 비슷한 개념으로
보시면 됩니다. 데이터의 구조가 한 개 이상의 key와 value의 pair로 이루어져있습니다.
샘플 Document를 확인해보겠습니다.

1
2
3
4
5
{
    "_id"ObjectId("5099803df3f4948bd2f98391"),
    "username""documan",
    "name": { first: "G.W.", last: "An" }
}
cs

이 소스에서 _id, username, name은 Key이고 오른쪽의 있는 값들이 Value입니다.
_id는 12bytes의 hexadecimal 값이며 각 document의 유일함(uniqueness)을 제공합니다.
이 값은 첫 4bytes는 현재 timestamp, 다음 3bytes는 machine id, 다음 2bytes는
MongoDB 서버의 프로세스id, 마지막 3bytes는 순차 번호입니다. 순차 번호는 추가될 때마다 값이 올라갑니다.
Document는 동적(dynamic)의 스키마(schema)를 가지고 있습니다. 같은 컬렉션(Collection) 안에 있는
Document끼리 다른 스키마를 가지고 있을 수 있습니다.
모든 스키마가 동일하지 않은 Key값을 가지고 있을 수 있습니다.


Collection란?

콜렉션(Collection)은 MongoDB Document의 그룹을 뜻합니다.
Document들이 Collection 내부에 위치하게 됩니다.
RDMS의 table과 비슷한 개념이지만 스키마를 따로 가지고 있지는 않습니다.
그 이유는 Document들이 서로 다른 schema를 가지고 있을 수 있기 때문입니다.


Database란?

데이터베이스(Database)는 Collection들의 물리적인 컨테이너라고 보시면 됩니다.
각 데이터베이스 파일 시스템에 여러 파일들로 저장되어 있습니다.


MongoDB와 RDMS 비교

RDMS가 생소하신 분들을 위해 간단히 설명해드리겠습니다.
Relational Database Management System (관계형 데이터베이스 관리 시스템)은
행과 열로 이루어진 2차원의 table로 데이터를 관리하는 데이터베이스 시스템입니다.
RDMS 시스템으로는 Mysql, Oracle Database, DB2 등이 있습니다.

 MongoDB

 DBMS

 Database

 Database

 Collection

 Table

 Document

 Tuple / Row

 Key / Field

 Column

 Embedded Documents

 Table Join

 Primary Key (_id)

 Primary Key

 Database server & Client

 

 mongod

 mysqld

 mongo

 mysql



MongoDB의 장점

 [ 1 ] Schema-less - Schema가 없습니다. 같은 Collection 안에 있더라도 서로 다른 Schema를 가지고 있을 수 있습니다.

 [ 2 ] 각 객체의 구조가 뚜렷합니다.

 [ 3 ] 복잡한 JOIN이 없습니다.


 [ 4 ] Deep Query Ability (문서 지향적 Query Language를 사용하여 SQL만큼 강력한 Query 성능을 제공합니다.)

 [ 5 ] 어플리케이션에서 사용되는 객체를 데이터베이스에 추가할 때 Conversion / Mapping이 필요 없습니다.


MongoDB 설치

윈도우

[1] MongoDB 공식 홈페이지의 다운로드 페이지에서 MSI 파일을 다운로드합니다.
다운로드가 완료되고 설치하게되면 C:\Program Files\MongoDB\Server\3.4\bin\에 설치됩니다.

[2] cmd 창을 열고 위의 디렉토리로 들어간 후 mongod를 입력하시면 서버가 실행됩니다.

[3]
기본 데이터베이스 위치는 C:\data\db 입니다. 실행 전에 폴더를 반드시 수동으로 만드셔야 합니다.

1
2
3
4
5
C:\User\my>cd C:\Program Files\MongoDB\Server\3.4\bin
 
C:\Program Files\MongoDB\Server\3.4\bin>mkdir C:\data\db
 
C:\Program Files\MongoDB\Server\3.4\bin>mongod
cs
[주황 색으로 표시된 3.4에는 본인이 설치한 버전을 입력해주시면 됩니다.]

데이터 베이스 디렉토리를 자신이 원하는 디렉토리로 변경하고 싶다면 다음과 같이 입력하시면 됩니다.

1
C:\Program Files\MongoDB\Server\3.4\bin>mongod --dbpath "C:\change_forder"
cs

매번 MongoDB 설치 경로로 이동해서 사용하기 번거로우시다면
해당 디렉토리를 환경 변수의 path에 추가하시면 됩니다.

제어판 > 시스템 > 고급 탭 > 환경 변수 > path를 선택해 편집을 누르시고
C:\Program Files\MongoDB\Server\3.4\bin 을 추가하시면 됩니다.

리눅스

Ubuntu 에서 MongoDB를 설치해보겠습니다.
다른 리눅스 사용자는 https://docs.mongodb.org/manual/installation/ 를 참조하시면 됩니다.
Cloud9을 사용하신다면 1, 2번은 생략하셔도 됩니다.

[1] MongoDB Public GPG Key 등록

sudo apt-key adv --keyserver hkp:\\keyserver.ubuntu.com:80 --recv EA312927

cs


[2] MongoDB를 위한 list file 생성 (자신의 버전에 맞게 입력하시면 됩니다.)

# Ubuntu 12.04
$ echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
 
# Ubuntu 14.04
$ echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
cs

[3] apt-get을 이용하여 설치

$ sudo apt-get update
 
# latest stable version 설치
$ sudo apt-get install -y mongodb-org
cs

[4] 서버 실행

$ sudo service mongod start
# 서버가 제대로 실행됐는지 확인
$ cat /var/log/mongodb/mongod.log
# [initandlisten] waiting for connections on port <port>
cs

기본 포트는 27017이고 방화벽을 사용하시는 분은 해당 포트를 오픈해주셔야 합니다.
포트는 /etc/mongod.conf 에서 변경 가능합니다.

OS X

brew update
brew install mongodb
 
mkdir -/data/db
mongod
# dbpath 지정
mongod --path <path>
cs

자세한 내용은 https://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/
에서 확인하시면 됩니다.


MongoDB 서버 접속

터미널이나 CMD에서 mongo라고 입력해주시면 됩니다.
환경 변수를 설정하지 않았다면 해당 디렉토리로 이동하신 후 입력하시면 됩니다.


MongoDB Data 살펴보기

MongoDB 명령어들을 배우기 이전에 데이터들이 기본적으로 어떻게 구성되어 있는지 살펴보겠습니다.

스키마(Skema)를 디자인 고려사항

[ 1 ] 사용자 요구에 따라 Schema를 디자인한다.

[ 2 ] 객체들을 함께 사용하게 된다면 한 Document에 합쳐서 사용한다.
  그렇지 않으면 따로 사용하고 join을 사용하지 않는다는 것을 확실히 해둔다.

[ 3 ] 읽을 때 join 하는 것이 아니라 데이터를 작성할 때 join한다.

예제

간단한 블로그 데이터베이스를 디자인한다 가정하였을 때 요구 사항을 나열해보겠습니다.


- 게시글에는 작성자 이름, 제목, 내용이 담겨져 있습니다.
- 각 게시글은 0개 이상의 태그를 가지고 있습니다.
- 게시글엔 덧글을 달 수 있으며 덧글은 작성자의 이름, 내용, 작성 시간을 담고 있습니다.

만약 RDMS에서 데이터베이스 스키마를 디자인한다면 이 것과 비슷할 것입니다.

RDMS라면 이렇게 테이블 3개로 만들어야 효율적이라고 부르겠지만

NoSQL에서는 모든 것을 하나의 Document에 넣습니다.


{
 _id: POST_ID,
 title: POST_TITLE,
 content: POST_CONTENT,
 username: POST_WRITER,
 tags: [ TAG1, TAG2, TAG3 ],
 time: POST_TIME
 comments: [
 { 
 username: COMMENT_WRITER,
 mesage: COMMENT_MESSAGE,
 time: COMMENT_TIME
 }
 ]
}
cs



다음 강좌에서는 데이터베이스를 서버에서 직접 다뤄보겠습니다.
감사합니다.

해당 포스트는 위키 백과와
https://velopert.com/436 를 참고로하여 포스팅하였습니다.


반응형