docker-compose.yml
을 다음과 같이 작성합니다.
version: '3.8'
services:
mongodb:
image: mongo:latest
container_name: mongodb
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: master
MONGO_INITDB_ROOT_PASSWORD: master
volumes:
- mongo_data:/data/db
volumes:
mongo_data:
driver: local
그다음 아래 명령어를 통해 docker-compose
를 실행합니다.
docker-compose up -d
그러면 다음과 같이 설치 및 실행된 모습을 확인할 수 있습니다.

정상적으로 띄워진 상태인지 확인하려면 다음 명령어를 사용하면 됩니다.
docker-compose ps

그다음 docker 터미널에 접속하기 위해 다음 명령어를 실행해보면?! 아마 접속이 안되실거에요... 😂
docker exec -it mongodb mongo -u master -p master --authenticationDatabase admin
저는 접속이 안되고 아래와 같은 문구만 뜨더라고요.
OCI runtime exec failed: exec failed: unable to start container process: exec: "mongo": executable file not found in $PATH: unknown
이러한 문제는 MongoDB 4.2 버전부터는 mongosh
를 사용하여 shell에 접근하기 때문에 발생합니다. 명령어를 다음과 같이 바꿔주면 바로 접속하실 수 있으실 거에요.
docker exec -it mongodb mongosh -u master -p master --authenticationDatabase admin

사실 초기화를 할 때는 docker exec -it mongodb mongosh
라고 입력해도 무관하다고 하는데, 전 확실하게 username, password, 연결 db 설정하고 싶어서 다 입력했어요.
mongo shell에 접속되었으니, db 설정을 해야 합니다. 계정 정보는 모두 admin
db에 저장하므로 db를 변경해줍니다.
use admin
현재 master
계정의 설정은 다음 명령어를 통해 확인할 수 있습니다.
db.getUser('master')
실제로 볼 수 있는 내용은 다음과 같습니다.

init 계정이기에 자동으로 root
권한을 부여 받았으나, admin db에 대한 권한만 정의된 상태입니다.
이 상태인 계정을 spring 프로젝트에 연동하고 Create API를 만들어 실행하면 다음과 같은 에러를 만나게 됩니다.
2024-11-16T13:44:02.163+09:00 ERROR 94169 --- [fan-signal-api] [ Thread-11] b.f.exception.GlobalExceptionHandler : Exception occurred: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='master', source='fan-signal', password=<hidden>, mechanismProperties=<hidden>}
사용하려는 DB인 fan-signal
에 대한 권한을 주어야 정상적으로 동작하게 됩니다.
실제로 사용하려는 DB명을 입력해주시면 됩니다.
db.grantRolesToUser("master", [{ role: "readWrite", db: "fan-singal" }])
그다음 조회해보면 다음과 같이 fan-signal db에 대한 권한이 생긴 것을 확인할 수 있습니다.
