Please enable JavaScript to view the comments powered by Disqus.MongoDB local에 docker-compose로 띄우고 mongo-express로 보기
Search
🪵

MongoDB local에 docker-compose로 띄우고 mongo-express로 보기

태그
MongoDB
docker-compose
docker
spring boot
공개여부
작성일자
2023/05/01
회사에서 MongoDB를 사용하기 때문에 앞으로 NoSQL과 몽고디비에 대해서 학습이 필요할것 같다. 그러기 위해선 어디서든지 MongoDB를 쉽게 띄울 수 있을 셋팅이 필요하다.
MySQL도 docker-compose를 사용했기 때문에 MongoDB역시 docker-compose를 선택하게 되었고, 이를 쉽게 visualize할 mongo-express를 함께 정리해두고자 한다.
version: '3.8' services: mongodb: image: mongo container_name: mongodb restart: always ports: - 27017:27017 volumes: - ~/mongodb:/data/db environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=1234 - MONGO_INITDB_DATABASE=stock mongo-express: image: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: 1234 ME_CONFIG_MONGODB_URL: mongodb://root:1234@mongodb:27017
YAML
복사
docker-compose.yml
이것도 한번 설정해두고 잊어버렸으나 다시 하려고하니 은근히 삽질이 필요한것 같다.
사용한 몽고DB 이미지는 docker pull mongo 에서 나오는 이미지와 mongo-express이다.
다음과 같은 기능들을 제공한다.
Connect to multiple databases
View/add/delete databases
View/add/rename/delete collections
View/add/update/delete documents
Preview audio/video/image assets inline in collection view
Nested and/or large objects are collapsible for easy overview
Async on-demand loading of big document properties (>100KB default) to keep collection view fast
GridFS support - add/get/delete incredibly large files
Use BSON data types in documents
Mobile / Responsive - Bootstrap 3 works passably on small screens when you're in a bind
Connect and authenticate to individual databases
Authenticate as admin to view all databases
Database blacklist/whitelist
Custom CA and CA validation disabling
Supports replica sets
로컬에 datagrip과 같은 client가 이미 설치되어 있다면 굳이 사용할 필요는 없지만 이런것이 없다면 상당히 유용하다. 설치 후 http://localhost:8081/ 로 들어가면 아래와 같은 화면이 나타난다.
여기서 바로 새로운 collection을 만들어 application에 적용할 수 있다.
새로운 collection인 stock이 추가되었다.
간단한 테스트 코드를 실행해 보자
@Test fun `create and get`() { val stock = Stock( id = "AAPL", name = "Apple Inc", low = 100.0, high = 250.0, open = 120.0, close = 220.0, ) runBlocking { stockRepository.save(stock) stockRepository.findById("AAPL")?.also { assertThat(it.name).isEqualTo(stock.name) } } }
Kotlin
복사
Apple 주식을 추가했고, 해당 주식이 MongoDB에 올바르게 저장되어 있는지 확인하는 테스트이다.
코드를 실행하였고, 테스트가 통과하였다. 이걸 mongo-exporess 에서 확인하면 아래와 같다.
생성한 Stock collection에 들어가면 내가 생성한 Apple 주식이 저장되어 있음을 확인할 수 있다.
version: '3.8' services: mongodb: image: mongo container_name: mongodb restart: always ports: - 27017:27017 volumes: - ~/mongodb:/data/db environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=1234 - MONGO_INITDB_DATABASE=stock mongo-express: image: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: 1234 ME_CONFIG_MONGODB_URL: mongodb://root:1234@mongodb:27017
Kotlin
복사
이 설정에서 주의깊게 볼 사항은 mongodb://root:1234@mongodb:27017 이다.
보면 127.0.0.1 혹은 localhost가 아닌 mongodb라는 이름으로 접속할 수 있다.
이것은 docker network 덕분이며 services 아래 mongodb 라는 container에 접속하는 것이기 때문이다.
이러한 도커의 기능을 알맞게 이용하면 jib를 이용해서도 쉽게 셋팅할 수 있다.