TigerCow.Door



안녕하세요. 문범우입니다.

오늘은 mongoDB의 database, collection, document 들에 대해서 알아보겠습니다.

기본적인 개념들은 지난 포스트를 참고해주시고, 오늘부터는 직접적으로 생성하고 제거하는 등의 활동을 해볼게요.



지난 포스트에서 알아본 듯이 mongoDB는 아래와 같은 architecture를 가지고 있습니다.


Database_1

Collection_1

Documents_1

 

“_id” : “~~~~~~~~~~~~”,

“name” : “홍길동”,

“age” : “30”,

. . .

 

Documents_2

. . .

 

Documents_3

. . .

. . .


 

Collection_2

. . .


Database의 내부에 Collection, 그리고 Collection 내부에 Document가 존재합니다.

이번 포스팅에서는 최종적으로 Documents 를 생성하여 우리가 원하는 key와 value를 저장해보도록 하겠습니다.

물론 그러기 위해서는 아래와 같은 과정이 필요합니다.


Database 생성 -> Collection 생성 -> Documents 생성


그리고 각각을 제거해보는 것까지 함께 해보도록 하겠습니다.


Database 생성-> Collection 생성 -> Documents 생성 -> Documents 제거 -> Collection 제거 -> Database 제거




1. Database 생성

먼저 mongoDB의 server를 키고, mongoDB에 들어갑니다.

그리고 show dbs 명령어를 통해 현재 만들어진 database를 확인할 수 있습니다.



위의 사진과 같이 아무것도 뜨지 않는다는 것은 내가 만든 데이터베이스가 없거나

만든 데이터베이스 내부에 한개 이상의 Document가 존재하지 않는다는 것 입니다.

즉, 데이터베이스가 만들어져 있더라도 해당 데이터베이스 내부에 Documents가 하나도 없다면 리스트에 보이지 않습니다.

이때, 자신이 사용중인 데이터베이스를 확인하기 위해서는 db 명령어를 입력합니다.


현재 저는 test라는 database를 사용하고 있네요.

이제 새롭게 database를 생성해보고 해당 database로 진행해보겠습니다.



use newDatabase 명령어를 통해 newDatabase라는 이름을 가진 database를 새롭게 만듭니다.

(이때 만약 해당 이름을 가진 데이터베이스가 존재한다면

새롭게 만들어지지 않고 기존에 있던 데이터베이스를 사용하게 됩니다.)

db 명령어를 통해서 사용중인 database가 바뀌었음을 확인할 수 있습니다.



2. Collection 생성

이번에는 collection을 생성해보겠습니다.

collection을 생성하기 위해서는 db.createCollection(name,[options]) 이라는 명령어를 사용합니다.

이때 name은 string Type으로써, collection의 이름을 말하며 options는 document Type으로써 선택적인 매개변수입니다.

공식문서를 통해 확인해보시고 필요한 항목을 사용하시면 됩니다. collection 이름은 firstCollection 으로 만들어보겠습니다.



지금까지 만들어진 collection을 확인하기 위해서는 show collections 명령어를 통해서 가능합니다.




3. Document 추가

Document 는 함수 자체에서 insert로 명시되어 있기에 '생성'이라는 말 대신 '추가'라는 말을 사용하였습니다.

새로운 Document를 추가하기 위해선 어떤 collection에 추가할지도 함께 고려해야합니다.

즉, 명령어에는 collection의 이름과 추가될 document의 내용이 들어갑니다.

db.COLLECTION.insert([{document1},{document2}, ... ]) 가 COLLECTION 이라는 이름을 가진 collection에 새로운 document를 추가하는 명령어 입니다.

해당 명령어를 통해 이름, 성별, 전공을 가진 document를 2개 추가해 보도록 하겠습니다.



그리고 db.COLLECTION.find() 을 통해 현재까지 추가된 document를 확인합니다.





4. document 제거

document를 제거하기 위해서는 db.COLLECTION.remove(<query>,<justOne>) 함수를 사용합니다.

db.COLLECTION.remove(<query>,<justOne>)에 대한 공식문서의 설명은 아래와 같습니다.



즉, query는 삭제할 document의 기준, 조건을 말합니다. 만약 query를 비워둔다면 모든 documents 가 해당되니 유의하세요.

justOne 은 한개만 지울 것인지에 대한 변수입니다.

default로 false값을 가지며, 딱 하나의 document만 지울때는 true로 설정하면 됩니다.


저는 3번에서 입력한 document 중 pika라는 이름을 가진 document 하나만 제거해보도록 하겠습니다.



document 하나가 올바르게 지워진 것을 알 수 있습니다.



5. Collection 삭제

현재 사용하고 있는 database의 collection을 보려면, show collections 라는 명령어를 사용하면 된다고 말하였습니다.

한번 더 확인해보겠습니다.


firstCollection 이라는 collection 하나만 존재하므로 하나를 더 생성합니다.



다시 secondCollection을 지워보도록 하겠습니다.

collection을 지우는 명령어는 db.COLLECTION.drop() 입니다.




6. Database 제거

현재 제가 만들어놓은 database의 항목을 확인해보기 위해 show dbs 명령어를 입력합니다.

제거할 database를 임시로 만들기 위하여 temp 라는 database를 만듭니다.



하지만 use temp 명령어를 입력하여도 temp라는 database는 하나이상의 document를 가지고 있지 않기 때문에

show dbs 에서 리스트에 보이지 않습니다. 따라서 빠르게 document를 추가해줍니다.

이때 따로 collection을 미리 생성하지 않아도 아래 명령어가 가능합니다.

db.tempCollection.insert({"name":"jone"})




이제 사용하지 않는 temp라는 database를 제거하기 위해 해당 database를

use DATABASE_NAME 을 통해 선택하고, db.dropDatabase() 함수를 사용하여 제거합니다.




이렇게


Database 생성-> Collection 생성 -> Documents 생성 -> Documents 제거 -> Collection 제거 -> Database 제거


순서대로 진행하였습니다.


마지막으로 각각에 대한 명령어를 정리해볼게요 !



정리


 

생 성 (추 가)

확 인

제 거 (삭 제)

Database

use DATABASE

show dbs

db.dropDatabase()

Collection

db.createCOLLECTION(name,[options])

show collections

db.COLLECTION.drop()

Document

db.COLLECTION.insert({do1},{do2}, …)

db.COLLECTION.find()

db.COLLECTION.remove(<query>,<justOne>)



오늘은 Database, Collection, Document 를 직접 생성하고 확인하고 제거해보았습니다.

다음엔 입력한 데이터를 이용한 실습을 진행해보겠습니다.

문의사항은 덧글이나 이메일(doorbw@outlook.com)을 이용해주세요 :)

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요

안녕하세요. 문범우입니다.

지난 시간에는 간단하게 MongoDB를 설치해보았습니다.

이번에는 앞으로 MongoDB를 다루기 위해 필요한 NoSQL에 대한 기초적인 개념 공부를 진행하고

윈도우에서 보다 쉽게 MongoDB를 사용하기 위해 환경변수 설정을 진행해보도록 할게요!





1. NoSQL

먼저 NoSQL에 대한 개념을 공부해보겠습니다.

NoSQL 데이터베이스는 전통적인 관계형 데이터베이스에 비해 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공합니다.

NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 'Not only SQL'로 불리기도 합니다.

또한 관계형 데이터베이스가 아니므로 고정된 schema 또는 JOIN이 존재하지 않습니다.


2. Document Model

MongoDB 는 Relational Model 이 아닌 Document Model 입니다.

먼저 아래 사진을 확인해볼게요!


사진의 아래, Document Model을 확인하시면 각각의 데이터들이 Collection으로 묶인 것을 볼 수 있습니다.

MongoDB 에서는 각각의 데이터(RDMS에서는 레코드라고 하는 것)들이 Document 로써 존재합니다.

그리고 Document 들의 묶음을 MongoDB에서 Collection이라고 말합니다.

또한 Collection 들의 물리적인 컨테이너는 Database라고 하죠.


아래 사진을 보면 좀 더 이해가 가실 겁니다.



이해가 가시나요?

그럼 Document에 대해서 좀 더 알아보도록 하겠습니다.

위에서 언급했듯이 Document는 RDMS의 record와 비슷한 성격을 지닌 녀석입니다.

위 사진에서 볼 수 있듯이 하나의 Document 는 한개 이상의 key-value pair 로 이루어져 있습니다.

RDMS 에서 속성이라고 하는 것을 key라고 생각하시면 편할 것 같아요.

Document의 예를 확인해볼게요!




위의 사진을 확인하시면, _id, name, city, address, phone 라는 key를 확인하실 수 있으며 그에 대응하는 value를 확인 할 수 있습니다.

즉, 위의 Document는 총 5개의 key-value pair를 가지고 있습니다.

위의 key 중에 _id 는 12bytes 의 hexadecimal 값으로서, 각 document의 유일성을 보장합니다.

_id에 관해, 각 byte 별로 의미하는 것은 다음과 같습니다.

첫 4bytes: 현재 timestamp / 다음 3bytes: machine id / 다음 2bytes: MongoDB 서버의 프로세스 id / 마지막 3bytes: 순차번호


Document는 dynamic schema를 갖고있습니다. 같은 collection 안에 있는 document 끼리 다른 schema를 가질 수 있다는 것인데 쉽게 말해서 서로 다른 key들을 가지고 있을 수 있다라고 생각하시면 됩니다.


3.Data Modeling

간단한 데이터 모델링을 참고해보도록 할게요.

블로그를 생각해 봅시다.

블로그에서는 다수의 게시글이 존재하죠? 그리고 각 게시글은 여러개의 태그를 가질 수 있고, 각 게시글에는 여러개의 댓글을 가질 수 있습니다.

만약 RDMS에서 해당 데이터베이스를 간단히 디자인한다면 아래와 같은 3개의 테이블을 만들 것 입니다.


 Comment

Post

Tag 

*id 

*id 

*id 

Post_id 

title 

Post_id 

username 

content 

tagContent 

content 

username 

 

 time

time 

 


그리고 Comment와 Tag 테이블은 Post 테이블에 속하도록 디자인되겠죠.

하지만 NoSQL 에서는 이 모든 것을 하나의 Document 에 넣습니다. 아래와 같이 디자인 될 것 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
 _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
 },
 { 
 username: COMMENT_WRITER,
 mesage: COMMENT_MESSAGE,
 time: COMMENT_TIME
 }
 ]
}
cs


RDMS 와 NoSQL의 차이에 대해서 대략적으로 이해가 가셨나요?

추가적인 사항은 댓글을 남겨주시거나 doorBW@outlook.com 으로 메일 주세요 :)


4. MongoDB 환경변수 설정(Windows)

마지막으로 MongoDB를 좀 더 편리하게 사용하기 위해 환경변수 설정을 하도록 하겠습니다.

환경변수 설정을 통해 매번 MongoDB의 설치 경로로 이동하실 필요가 없으실 거에요.

아래 사진의 순서대로 진행하시면 됩니다.


1. 제어판 -> 시스템 및 보안 -> 시스템 -> 시스템 보호



2. 시스템 속성 창에서 환경변수 클릭



3. 변수이름 Path 를 누르고 편집 클릭




4. 새로만들기 -> MangoDB 설치경로 입력 -> 확인 클릭




이렇게 설정하시면 됩니다!

이제 확인해볼까요?




네, 정상적으로 됩니다 :)


추가적으로 데이터베이스 디텍토리를 변경하고 싶으시다면 아래 명령어를 입력하시면 됩니다.


C:\Program Files\MongoDB\Server\3.2\bin> mongod --dbpath "원하는 디텍토리"


이상으로 MongoDB 환경변수 설정을 마무리하겠습니다.


오늘 NoSQL개념 3가지와 MongoDB 환경변수 설정을 진행하였습니다.

다음 포스팅에서는 본격적으로 database를 만들고 삭제하는 등의 진행을 해볼게요 :)

문의사항은 덧글 및 이메일(doorbw@outlook.com)을 이용해주세요.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요