회사에서 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
이것도 한번 설정해두고 잊어버렸으나 다시 하려고하니 은근히 삽질이 필요한것 같다.
다음과 같은 기능들을 제공한다.
•
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를 이용해서도 쉽게 셋팅할 수 있다.