본문 바로가기

윈도우 개발환경

윈도우에 만드는 리눅스 개발 환경; 6. Docker로 MongoDB 시작하기

윈도우에 만드는 리눅스 개발 환경 목차

1. 우분투 리눅스 설치 (윈도우 10)

2. 윈도우에 Docker 설치

3. 속도 개선 후 node.js 설치

4. VSCode 설치 후 리눅스 연결

5. Docker로 MySQL시작하기

6. Docker로 MongoDB 시작하기

7. 윈도우 11에 우분투 설치

8. Docker로 PostgreSQL 시작하기

1. MongoDB에 대해

현재 NoSQL DB (SQL을 사용하지 않고 테이블 형태로 저장하는 RDB가 아닌 모든 DB) 중에서 Document DB (문서처럼 정해진 틀에서는 자유로운 형태를 가지는 DB)가 거의 50 퍼센트 가까운 점유율을 가지고 있는데, 이 중 절반의 시장을 MongoDB가 점유하고 있다고 한다.

 

10여 년 전에 회사에서 MongoDB 처음 사용했을 때,

  • JSON의 binary버전인 BSON을 사용하기 때문에 Javascript 데이터를 변환 없이 저장할 수 있고,
  • schema를 먼저 정의하고 생성해야 하는 RDB와는 달리 사용하면서 바로 collection과 document를 만들 수 있고,
  • MySQL에 비해 엄청나게 빠른 CRUD 속도

에 깜짝 놀랐던 기억이 있다. 하지만 그 당시에는 많은 양의 데이터를 메모리에 넣고 처리하다가 한 번에 flush 하기 때문에 데이터 처리량이 많아지면 가끔씩 DB가 깨어지고, 심지어 복구도 힘든 문제를 발견했고, flush 할 때마다 나타나는 일시적인 록다운 문제도 발생해서 회사 업무에는 도입하지 않았던 기억이 있다.

 

이제, 10년 이상 운영하면서 그 당시 내가 봤던 문제들은 대부분 해결하고 안정성도 확보하여, 많은 개발자들이 가장 쉽고 빠르게 사용할 수 있는 DB로 MongoDB를 선택하게 되었다. Map / Reduce는 초기에도 지원했는데, 이제는 Time Series까지 지원하고 복잡한 업무의 데이터 정합성에서 꼭 필요한 Transaction 제어까지 지원하니 정말 사용하지 않을 수 없는 DB가 되었다.

 

개발할 때, DAO (Data Access Object)만 잘 분리시켜 놓으면 언제든지 다른 DB로 전환하는 것이 가능하기 때문에, 새로운 서비스의 프로토타입이나 간단하게 MVP (Minimum Viable Product)를 만들어 테스트해 볼 때에는 개인적으로 MongoDB를 선호한다.

2. Docker를 이용한 MongoDB 구성

  • 먼저 앞에서 설치한 우분투 리눅스를 실행한다. 

  • Docker desktop을 실행한다.

우분투 콘솔 docker명령를 넣었을 때 docker가 없다는 메시지가 보이면 docker desktop을 실행해서 docker engine을 먼저 실행한다.

 

  • MongoDB을 docker로 실행한다.
docker run --name mongodb -p 27017:27017 -v "/realfolder/to/data":/data/db -d mongo

 

--name 옵션으로 docker 컨테이너의 이름을 주고 우분투 리눅스나 윈도우 프로그램으로 외부에서 접근할 수 있도록 TCP port 27017을 -p27017:27017으로 열어주고 -v 볼륨옵션으로 데이터 볼륨이 만들어질 곳을 직접 지정했다. 마지막 mongo뒤에 tag를 주지 않았으므로 최신버전 (:latest) 이미지를 가져오는데 만일 이전 버전이 필요하면 mongo:5.0과 같이 지정한다.

 

MongoDB port는

 

  • 27017: mongodb 사용을 위한 port,
  • 27018: shard server에 사용,
  • 27019: config server에 사용,
  • 27020: messaging 용으로 사용

하는 port가 있는데, 개발용으로 docker로 만든 MongoDB 하나일 경우 27017만 설정하면 된다.

 

Docker hub에 설명되어 있는 MongDB 이미지에서 지원하는 환경변수는 다음과 같다.

 

MONGO_INITDB_ROOT_USERNAME, MONGO_INITDB_ROOT_PASSWORD : 새로운 superuser를 생성한다.

MONGO_INITDB_DATABASE : 처음 실행할 때 database를 생성하고 이름을 지정한다.

 

  • MongoDB가 잘 실행되고 있는지 docker명령으로 확인한다.
docker logs mongodb

설치하면서 에러를 봤으면 여기서 찾을 수 있다. 그렇지 않으면 아래 명령으로 실행되고 있는 상태를 확인할 수 있다.

docker ps -a

3. MongoDB를 간단하게 사용해 보기

mongodb 6.0부터는 mongosh가 mongodb-client를 대신 사용되는데, javascript와 node.js 16.x을 제공하고 있기 때문에 node.js에서 사용할 명령어를 mongosh에서 그대로 테스트해 볼 수 있다. mongosh은 docker 컨테이너에 이미 설치되어 있으니 docker 컨테이너 안에서 사용해 보자.

 

  • docker명령어로 mongodb 컨테이너에 연결한다.
docker exec -it mongodb bash

-it 옵션은 interactive 하게 사용할 tty터미널을 띄우라는 약자인데, 쉽게 말하면 콘솔을 띄우라는 것이다.

 

  • 콘솔이 보이면 다음 명령으로 monghsh을 실행한다.
mongosh

 

  • monghdb에 만들어진 database나 collection을 확인하려면 show 명령을 사용한다. 
show dbs
show collections
show users

 

 

  • 이제 db를 원하는 이름으로 변경하고 document를 하나 넣어 보자. 
use hydroponix
db.sensor_value.insertOne({
	sensorid: "t1",
	time: new Date(),
	temp: 25,
	hum: 51,
	light: 521})

 

  • 방금 db에 넣은 내용는 find(), findOne() 명령으로 찾을 수 있다. 
db.sensor_value.find()

지금까지 간단한 mongodb의 사용 예제에서 볼 수 있듯이 mongodb는 db나 collection은 사용하는 시점에 자동으로 만들어지고, table을 만들어 schema를 따로 지정하지 않아도 되기 때문에 사용이 매우 간단하다. 또한, node.js에서 사용하는 명령을 그대로 사용해서 mongosh에서 테스트해 볼 수 있기 때문에 개발자가 직접 db를 핸들링하는 데에도 어려움을 느끼지 않기 때문에 프로토타입이나 MVP를 만들 때에 좋은 선택이 될 수 있다.

 

  • MongoDBCompass를 사용하면 윈도우 사용자에게 익숙한 GUI방식으로도 mongodb를 테스트해 볼 수 있다.
 

Try MongoDB Tools - Download Free Here

Free download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.

www.mongodb.com