Information Security ˗ˋˏ ♡ ˎˊ˗

OS/Database

[NoSQL] MongoDB 기본지식 및 사용법 (with Docker)

토오쓰 2022. 1. 21. 14:53

MongoDB [NoSQL]

C++로 작성되었으며 NoSQL로 분류되는 오픈소스 문서 지향(Document-Oriented) Cross-platform 데이터베이스

 

1. 특징

  • DocumentDB에서 가장 유명하며, SQL을 사용하지 않는다.
  • 데이터를 JSON Document 형태로 저장한다(데이터를 Key-Value화 저장)
    • JSON: 자바스크립트의 배열 문법으로 데이터 구조를 기술하는 방법을 말한다.
  • SQL처럼 표 형태로 저장하는 것이 아니라 원하는 어떤 모양의 데이터로 저장할 수 있다.
  • MySQL의 테이블과 같은 전통적인 테이블-관계 기반의 RDBMS가 아니며 JSON 형태의 동적 스키마형 문서를 사용하는데, 이를 BSON이라고 부른다.
  • 메모리맵 형태의 파일엔진 DB이기 때문에 메모리에 의존적이다.
  • 로그 데이터, 이벤트 참여 내역, 세션 같이 삭제가 없는 경우에 적합한 DB이다.
  • Document Data Model: 속성의 이름과 값으로 이루어진 쌍의 집합
  • /var/log/m ongodb/mongod.log 로그파일 
storage: 데이터 베이스 파일 저장 위치 및 방법  
dbPath : 데이터베이스 스토리지 위치
systemlog: 로그 파일 및 로그 조작 방법
net: 네트워크 관련.
bindIp: 서버 외에서 mongo 클라이언트가 접근하려면 IP 를 입력한다.

 

2. 장점과 단점

장점 단점
다양한 형태의 데이터 저장이 가능 데이터 업데이트 중 장애 발생 시, 데이터 손실 가능
Read/Write 성능 뛰어나다. 충분한 메모리 확보 필요
JSON 구조 데이터 공간 소모가 RDBMS에 비해 많음
방대한 데이터를 빠르게 처리 가능 하드디스크로 데이터 처리하여 속도가 급격히 느려짐 

 

3. 예시

{ "_id": ObjectId("5099803df3f4948bd2f98391"),
    "username": "velopert",
    "name": { first: "A.A.", last: "Kim" }

 

4. 주요 기능

* ACID(데이터베이스의 기본원칙)

- 원자성(Atomicity): 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 것을 의미

- 일관성(Consistency): 트랜잭션의 실행이 성공적으로 완료되면 데이터베이스를 항상 일관성 있는 상태로 유지해야 한다는 의미

- 독립성 또는 고립성(Isolation): 트랜잭션이 수행되고 있을 때, 다른 트랜잭션의 연산 작업이 중간에 끼어들어 기존 트랜잭션의 작업에 영향을 주지 못하도록 독립성을 보장하는 것을 의미

- 지속성(Durability): 성공적으로 수행된 트랜잭션은 요청된 작업의 내용이 데이터베이스에 영원히 반영되어야 함을 의미

Document 데이터 구조는 한 개 이상의 key-value pair으로 이루어져 있다.
Collection MongoDB Document의 그룹, Document가 Collection 내부에 위치해 있다.
Index 다수 인덱스 설정 가능, 빠른 검색 지원한다.
복제 Master-Slave 구조 구성
장애가 발생했을 때, Slave에서 Master를 선출 가능(중단없는 서비스가 가능하다.)
mongod 해당 데몬이 데이터베이스 운영에 필요한 여러 구성에 대한 설정을 위해서
/etc/mongod.conf 구성 파일을 사용한다.
Query문  Create
Read
Update
Delete

 

5. 사용법

* Docker에서 MongoDB

 

1) mongo 이미지 검색

docker search mongo

 

2) mongo 이미지 다운로드

docker pull mongo

 

3) mongoDB 실행

docker run -d --name mongodb -p 27017:27017 mongo:4.2

--name: 컨테이너 이름 [mongodb]

-p: 포트, 호스트 port:컨테이너 port, 컨테이너의 port로 접근하기 위해서 docker의 포트 포워딩으로 연결한다.

 

 

4) mongoDB 컨테이너 접속

docker exec -it mongo-db /bin/bash

 

env

사용하여 DB의 정보를 확인한다.

 

mongo --version

MongoDB 버전 확인하기

 

5) Mongodb 접속

컨테이너 내부에 접속한다.

 

show dbs

해당 명령어를 통해서 현재 존재하는 데이터베이스 목록을 출력

 

 

6. 데이터베이스

1) 데이터베이스 시작하기

현재 사용 중인 데이터베이스를 출력

db

 사용할 데이터베이스를 선택

use config

 

현재 데이터베이스의 사용 현황을 bytes 단위로 조회

db.stats()

현재 데이터베이스 사용 현황을 상세하게 확인할 수 있다.

 

 

2) Collection 생성 

db.createCollection(name,[options])

name은 string Type/ collection의 이름을 말하며 options는 document Type

 

 

3) Document 생성

db.COLLECTION.insert([{document1},{document2}, ... ])

document 명령어에는 collection의 이름과 추가될 document의 내용이 들어간다.

 

db.firstCollection.find()

현재까지 추가된 document 확인

 

 

db.firstCollection.find().pretty()

도큐먼트 목록을 보기 예쁘게 출력

 

 

4) Document 제거

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

 

5) collection 삭제

db.COLLECTION.drop()

 

 

7. 계정 관련 설정

1) 계정 생성

Admin이나 데이터베이스를 선택하여 계정을 추가한다.

사용할 데이터베이스에 접속하여 만들거나, 계정을 만들때 데이터베이스를 할당할 수 있다.

use 데이터베이스명/admin
db.createUser({
user: "계정이름",
pwd: "비밀번호".
roles:["readWrite", "userAdmin"]
+})

db.createUser({
user: "계정이름",
pwd: "비밀번호".
roles:["userAdminAnyDatabase"]
+})

 

2) 계정 삭제

use admin
db.dropUser("계정이름")

 

 

참고

https://velopert.com/436

https://namu.wiki/w/MongoDB

https://www.youtube.com/watch?v=81JnYGT2HVQ

db사용법

https://doorbw.tistory.com/19

https://jsonobject.tistory.com/484

docker 사용법

https://msyu1207.tistory.com/entry/Docker-docker-DB-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0-mongodb-%EC%84%A4%EC%B9%98-%EC%99%B8%EB%B6%80%EC%97%90%EC%84%9C-db-%EC%A0%91%EC%86%8D