토이 프로젝트 진행하면서 OpenAPI를 사용하는데, 요청 수 제한이 있어, 클라이언트에서 많은 요청들을 계속하여 호출하는데 무리가 있었다. (429 Too Many Requests)

백엔드 서버에서 스케줄링을 통해 데이터베이스에 API 정보를 저장한다면, 문제를 해결할 수 있을 것 같았다.

OpenAPI를 사용하다보니 RDBMS로는 데이터 정보 구조를 정의하고 관리하기에는 무리가 있을 것 같아, 비정형화 데이터를 저장할 수 있는 NoSQL을 사용하기로 했다.

오래전에 Firebase(Only 클라우드 서비스, 비용 발생 가능성)를 통해 NoSQL을 접해본 적은 있지만, 가장 많이 사용하는 NoSQL인MongoDB를 접해보고 싶었고, 환경을 직접 구축(On-premise)해보는 경험을 해보기로 했다.


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 대비 미약하다.

1. 몽고디비 설치 명령어

brew tap mongodb/brew
brew install mongodb-community

설치 위치: /usr/local/var/mongodb

 

2. 서비스 명령어

# 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

brew services start mongodb/brew/mongodb-community
Default MongoDB Port: 27017

 

Install MongoDB Community Edition on macOS — MongoDB Manual

Docs Home → MongoDB Manual MongoDB AtlasMongoDB Atlas is a hosted MongoDB service option in the cloud which requires no installation overhead and offers a free tier to get started.Use this tutorial to install MongoDB 6.0 Community Edition on macOS using

www.mongodb.com

이후 mongo shell 접속하기 위해, mongo 명령어를 통해 접속하려 했지만 실패하였다.

MongoDB 문서를 참고하여, mongosh 명령어로 접속할 수 있었음

mongosh

 

3. MongoDB-Compass 설치

brew install cask
brew install mongodb-compass

 

4. Mongo Shell 명령어

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}...])

데이터 추가하기
데이터 확인
find 조건 검색

4. 데이터베이스, 계정 생성

# 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()

 

 


 

NoSQL - 나무위키

“Not Only SQL” : 데이터를 저장하는 데에는 SQL 외에 다른 방법들도 있다. NoSQL이라고 하는 말은 대한민국이 아닌 모든 나라를 외국이라고 부르는 것과 비슷하다. 세상에는 한국 말고도 각자의 문

namu.wiki

 

[MongoDB] MongoDB 장점/단점

MongoDB 장점 Schema-less 구조 - 다양한 형태의 데이터 저장 가능 - 데이터 모델의 유연한 변화 가능(데이터 모델 변경, 필드 확장 용이) Read/Write 성능이 뛰어남 Scale Out 구조 - 많은 데이터 저장이

tychejin.tistory.com

 

+ Recent posts