기술/DB

[Docker/mongoDB] docker compose로 mongoDB, mongo-express build하기 (Datagrip으로 MQL 실행)

하기싫지만어떡해해야지 2024. 10. 13. 02:09

이번에 야심차게

개인 프로젝트를 진행해보려고한다

 

이미 대학원 연구실 과제에

개인 연구에

개발 외주 작업에

대학원 수업으로

초특급 바쁘긴하지만..

 

그래도 약 1년전부터

해보고싶다고 마음 먹었던건데

시작이 반이라고

개발환경이라도 셋팅해놓으면

언젠간 차근차근 하지 않을까 생각했다 ㅎㅎ

 

내가 기획하고 있는 프로젝트는

그렇게 가볍지도 않지만

또 엄청 무겁게 할 생각도 없는

개인 프로젝트이기에

어떻게 할까 고민했다가

 

backend: Spring Boot + jpa

DB: MongoDB

frontend: React + tailwind css

로 해주기로 했다

 

처음에는 backend를

node.js로 해주려고했다가

사실 가장 익숙한게 spring framework이기도 했고

spring에서 jap를 써보고 싶었기 때문이다

 

DB를 MongoDB를 선택한 이유는

jpa를 사용할 때

훨씬 더 간편해질뿐만아니라

데이터 작업에 있어서

그렇게 schema가 중요하지 않다고 생각했고

 

geospatial을 지원하는 mongoDB는

카카오 모빌리티에서 채택한 DB기에..

공간정보전공자에

geospatial 관련 연구를 하고 있는 나에게

mongoDB를 한 번 써보고 싶어서

있어서 MongoDB를 선택했다

 

그럼 시작이 반이라고

일단 MongoDB부터

다운받아서 실행해보자


나는 docker 환경에서 실행해주기로했다

 

docker-compose를 이용하면

정말 간단해서 늘 그렇게 해주는 편이다

 

우선 로컬 환경에서

docker와 docker-compose가

설치되어있다고 가정한다

 

만약 없다면

 

https://docs.docker.com/engine/install/

 

Install

Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.

docs.docker.com

 

얘를 해준다

 

나는 docker desktop을 설치했는데

그것만 설치하면

docker랑 docker-compose가

함께 설치된다

 

docker-compose는

yml 파일에 내가 원하는 셋팅만 적어주면

자동으로 docker가 빌드되게 해준다

 

따라서 yml이 중요한데

나는 아래와 같이 yml 파일을 작성해줬다

 

yml파일의 이름은

docker-compose.yml로 해줘야한다

version: '3.8'
services:
  mongodb:
    image: mongo:latest
    container_name: mongodb
    ports:
      - 27017:27017
    volumes:
      - ./data:/data
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=root

  mongo-express:
    image: mongo-express
    ports:
      - 8081:8081
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=root
      - ME_CONFIG_MONGODB_ADMINPASSWORD=root
      - ME_CONFIG_MONGODB_SERVER=mongodb

 

간단하게 설명하자면

services에 보면 mongodb와 mongo-express

2개가 있는데

이 2개의 Image를 다운받아서

컨테이너 내부에서 실행해줄거라는 뜻이다

 

mongo-express는

mongodb를 웹에서

관리할 수 있게 해주는 관리프로그램이다

 

아래처럼 웹에서

나의 mongodb를 관리해줄 수 있다

 

 

datagrip같은 DB관리 시스템이 없다면

해주는 것이 좋다

 

mongodb는 보통 27017에 띄워주고

mongo-express는 8081에 띄워주기 때문에

port넘버를 설정해주고

volumes에는 data를 저장할 path를

지정해주는데 원하는 경로를 적으면 된다

 

그리고 나머지는 영어를 읽어보면 알겠지만

DB의 username과 password를

설정해주는 것이다

 

 

이렇게 docker-compose.yml을

다 작성해줬다면

docker-compose.yml이 있는 경로에 들어가

docker-compose up -d

 

위 명령어를 실행해주자

 

-d를 붙이면

 

위와 같이 terminal의 실행문(?)이

종료되며 계속해서 해당 terminal을 사용할 수 있고

 

docker-compose up --build

 

를 사용하면 실행해준 터미널에서

계속해서 실행되며

내부의 로그를 확인할 수 있다

 

이렇게 해주면 

 

 

docker desktop에서

mongodb container가 정상적으로

실행되고 있는 것을 확인할 수 있다

 

terminal에서 확인하려면

docker ps

 

명령어를 입력하면

현재 실행 중인 container를 볼 수 있다

 

실행 중이지 않은 것까지 보고싶다면

 

docker ps -a

 

뒤에 옵션으로 -a를 붙여주면 된다

all의 약자다

 

 

이렇게 컨테이너가 실행된걸

확인해줬으면

잘 실행되는지 보기 위해서

mongo-express에 먼저 접속해보자

 

localhost:8081로 들어가준다

 

mongodb를 처음 설치하면

admin, config, local

3개의 db가 미리 생성되어있다

 

위와같은 웹이 잘 뜬다면

도커 빌드 성공!

 

mongo-express에서 위의

create database를 이용해서

새로운 db를 만들어줘도되고

각자 편한 DB 관리 시스템을 이용해줘도 된다

 

나는 datagrip에 절여져있는 사람이라

datagrip을 이용해줬다

 

datagrip에서

새로운 datasource 추가를

선택한 뒤

mongoDB를 선택하고

port번호, username, password를 입력해준다

 

 

이런 항목이 생성된다면

연동 성공

 

이제 datagrip에서 쿼리 콘솔을 사용해서

db를 생성해보자

 

새롭게 생성할 db이름은

checkitout이었기에

db이름과 함께 쿼리문을 작성해준다

use checkitout;

 

이렇게 쿼리를 입력한뒤 실행해주자

 

그럼 하단에

switched to db checkitout

과 같이 뜰 것이다

 

그럼 새로운 db가 생성되었고

현재 새롭게 생성된 db를

사용하고있다는 뜻이다

 

이제 collection을 만들어보자

collection은 RDBS에서

table과 같은 역할을 한다

 

나는 맨 처음에 User정보를 저장하는

user라는 collection을 만들어 주고싶어서

db.createCollection("users");

 

이렇게 쿼리문을 작성하고 실행했다

 

성공적으로 실행되었다면

"users"라는 collection이 생긴 것이다

 

 

새로고침을 했을 때

위와 같이 생성해준 collection이

뜬다면 성공!

 

 

mongoDB도

noSQL도 처음이지만

어찌저찌 db셋업은 잘 된 것 같아서

...

순조로운 시작인 것 같다

 

'기술 > DB' 카테고리의 다른 글

[neo4j] 자체 개발 plugin implement하기(docker)  (0) 2024.07.31