[MacOS] MongoDB 설치

SeJin12·2022년 9월 11일
0

MongoDB

목록 보기
1/2
post-thumbnail

NoSQL 이란?

  • non SQL, non relational SQL, not only SQL 와 같은 의미로 해석된다. SQL을 사용하지 않는다는 의미보다 SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)이다.
  • NoSQL에 대한 구체적인 정의는 없지만, 공통적인 성향이 있다.
    • 대부분 클러스터(하나의 클러스터에서 여러개의 서버를 이용하도록 설계)에서 실행할 목적으로 만들어졌기 때문에 관계형 모델을 사용하지 않는다.
      • 분산 환경에서 노드(서버)들이 잘 작동할 때, 하나의 노드 시스템에 장애가 났을 때, 문제를 해결하기 좋다.
    • Schema-less, 스키마(구조에 대한 정의) 없이 동작한다. 따라서 데이터 구조를 미리 정의할 필요가 없으며, 시간이 지나더라도 언제든지 바꿀 수 있기 때문에 비형식적인 데이터를 저장하는 데 용이하다.
    • 비일관성(Inconsistency), 게임의 로그 같은 데이터들은 매 초마다 엄청난 양이 생성되지만 한번 저장되고 난 뒤에는 수정될 일이 거의 없다. 이런 데이터의 일관성을 보장하기 위해 ACID 트랜잭션을 지원할 필요는 없다.
      • 다수가 동시에 읽고 쓰는 (Read and Write) 상황에 좋다.
  • 데이터와 트래픽이 증가함에 따라 RDBMS에서는 원활한 데이터 처리가 어려워졌다. 이를 해결하기 위해 장비의 성능을 키우는 수직적 확장(Scale-up)은 비용적인 문제가 발생한다. NoSQL에서는 수평적 확장(Scale-out)을 통해 성능을 올리기 쉽다.

MongoDB 란?

  • NoSQL DBMS의 한 종류이고, Document 모델을 사용한다.
  • mongo는 humongous를 줄인 표현이다. '겁나 큰 DB' 라는 뜻.

장점

  • Schema-less 구조로 다양한 형태의 데이터 저장이 가능하고, 데이터 모델의 유연한 변화가 가능하다.
  • Read/Write 성능이 뛰어나다.
  • 수평적 확장(Scale-out) 구조로 많은 데이터 저장이 가능하고 장비 확장이 간단하다.
  • JSON 구조로 데이터를 직관적으로 이해 가능하다.

단점

  • 데이터 업데이트 중 장애 발생 시, 데이터 손실이 가능하다.
  • 많은 인덱스 사용 시, 충분한 메모리가 필요하다.
  • 데이터 공간 소모가 RDBMS에 비해 많다. (중복 key, 데이터 발생 가능)
  • ACID 트랜잭션 지원이 RDBMS 대비 미약하다.

MongoDB 설치하기

설치 명령어

brew tap mongodb/brew
brew install mongodb-community

설치 경로: /usr/local/var/mongodb

서비스 명령어

# start
brew services start mongodb/brew/mongodb-community
mongod # deamon 프로세스로 실행. 백그라운드에서 실행
# stop
brew services stop mongodb/brew/mongodb-community

### 위 명령어로 실행하면서 오류가 계속 발생하였음
sudo su # 관리자 모드로 접속하여 아래 명령어를 통해 실행함
brew services # 서비스 확인
brew services start mongodb-community
brew services stop mongodb-community

성공적으로 서비스를 실행하였다면, 27017(mongodb 기본 포트)로 접속이 가능합니다.
Mongo Shell에 접속하기 위해, mongo 명령어로 접속하려 했지만 저는 실패(zsh: command not found: mongo)했고, MongoDB Site를 참고하여, Mongosh 명령어로 Shell 접속할 수 있었습니다.

MongoDB-Compass 설치

brew install cask
brew install mongodb-compass

Shell 명령어

# root 권한 계정 생성
use admin # admin DB 접속
db.createUser({ user:"sejin", pwd:"******", roles: ["root"] })

# root 계정으로 shell 진입
mongosh admin -u sejin -p ******

use project # 데이터베이스 생성(create), 전환(switched)
db.createUser({user:"user", pwd:"******", roles:["dbOwner"]}) # 일반 계정 생성

# 생성한 일반 계정 확인
db.getUsers()
db # 현재 사용중인 DB 확인

show dbs # DB 리스트 확인.  처음 db 명령어를 통해 확인한 DB를 확인할 수 없는데, 최소 1개의 Document 를 추가해야함

use <database name> # DB 접속

db.foo.insertOne({name:"foo"}) # 데이터 추가하기. collection은 foo로 추가, 명령어 맨 앞의 db의 현재 DB를 뜻함

db.foo.find() # 데이터 확인

show collections # collection 확인

# 1개의 데이터 추가
db.collection.insertOne({document}

# 여러 데이터 추가
db.collection.insertMany([{document1},{document2}...])

0개의 댓글