Docker를 사용하여 MongoDB 사용해 보기
현재 진행 중인 프로젝트에서 일대일 DM 기능과 단체톡을 구현해야 하는데, RDBMS를 사용해도 되지만, NoSQL을 사용해 보자는 의견이 나와서 MongoDB를 사용해보려고 했다.
MongoDB를 docker-compose.yml 파일을 이용해 docker에 자동으로 띄우고 사용해보려고 했는데, 그 과정에서 매우 많은 시행착오를 겪었다.
그 이유는.. mongoDB 버전이 최신화되며 명령어가 일부 변경되었기 때문이었다.
그 과정을 기록하고자 이 글을 쓴다.
문제점을 바로 보시려면 "mongo: not found" , "해결법" 부분을 봐주세요!
docker-compose.yml
아래와 같이 docker-compose 파일에 mongodb 관련 내용을 추가하고 실행하면 정상적으로 docker container에 image가 띄워지는 것을 확인할 수 있다.
mongodb:
image: mongo
container_name: mongodb
ports:
- 27017:27017
volumes:
- data:/data
environment:
- MONGO_INITDB_ROOT_USERNAME=rootuser
- MONGO_INITDB_ROOT_PASSWORD=rootpass
- MONGO_INITDB_DATABASE=usports
networks:
- backend
volumes:
data: {}
networks:
backend:
name: backend
driver: bridge
Docker container mongodb
mongo: not found
대부분의 글에서 "mongo" 명령어를 이용해서 mongoDB를 시작할 수 있다고 하였다.
그러나.. 왜인지 모르게 아래 이미지와 같이 mongo 명령어를 찾을 수 없다는 에러가 발생하였다.
해결법
아주 간단하다.
"mongo" 명령어는 mongoDB.6.0 버전부터 제거되고, "mongosh"로 변경되었다고 한다.
아래 stackoverflow 글에서 발견했다.
https://stackoverflow.com/questions/73582703/mongo-command-not-found-on-mongodb-6-0-docker-container
위의 이미지에서 mongo 명령어는 동작하지 않고, mongosh 명령어로 mongodb를 시작할 수 있는 것을 볼 수 있다.
해결 과정
이번에 docker를 사용해 보는 것도 거의 처음이다. 그래서 docker의 기능에 대한 확신이 없었다. 그래서 문제는 "mongo" 명령어가 존재하지 않는다는 것인데, 이 부분을 생각하지 못하고 다른 것들에서 문제를 찾았던 것 같다.
우선 내가 작성한 docker-compose.yml에 문제가 있는지 여러 번 확인해 봤지만, 문제가 없었다.
그다음엔, docker에 mongodb를 직접 pull 해보기로 했다. 아래 글에 잘 정리되어 있어서 첨부한다.
https://poiemaweb.com/docker-mongodb
일단 mongoDB를 사용해 보고 Spring project에서 사용법을 익히는 게 우선이었기 때문에 로컬에서 직접 mongoDB를 설치해 보기로 마음먹고, 딱 30분만 더 시도해 보고 안되면 로컬에 직접 설치해 보자..라는 생각을 했다.
그러다 위의 stackoverflow에서 mongoDB 명령어가 변경되었단 사실을 알게 되었다.
성찰
이 문제는 일단 갑자기 뜬금없이 mongo: not found라는 에러가 발생한 것부터 시작되었다.
이 에러가 발생했을 때 바로 구글에 해당 내용을 검색했으면 금방 해결했을 것 같다. 그러나 docker 기술에 대한 이해가 부족했기 때문에 다른 곳에서 문제를 찾으려다가 많은 시간을 소요했다. 다음부턴 조금 더 침착하게 가장 명확한 문제부터 알아보아야겠단 생각을 했다.
어제는 인생 처음으로 aws instance를 생성하고 Spring Boot Project를 배포해 보며 수많은 시행착오를 겪었다.
그리고 오늘은 docker를 이용하여 mongoDB 사용을 시작하는 과정에서부터 수많은 시행착오를 겪었다.
이런 시행착오들을 겪으며 점점 해결 능력이 좋아지지 않을까라는 생각이 든다.
그리고.. 파일 시스템을 기반으로 동작하는 리눅스 시스템에 대한 이해와 리눅스 명령어들이 단 이틀 사이에 많이 향상된 것 같다 ㅋㅋㅋ...