
안녕하세요.
알고있는 지식도 다시 한번 소프트웨어 엔지니어 김종철 입니다.
오늘은 springboot <-> Mongodb를 연결하며 경험한 내용들을 끄적여 봅니다.
정말 기본적이지만 저 같은 경우는 셋팅하는데도 한 세월이 걸렸거든요... ㅎ
구글링해도 다 영어나 애매한 답변들 뿐이라 필요하신 분들이 있을 것 같아 남깁니다!!
(업무 때문에 바빠서 간단히만 정리해 놓고 추후 조금 더 상세히 정리 할 예정입니다!)
#### Srpingboot MongoDB 연결 방법 (IP나 포트의 경우는 셋팅하신대로 기입하시면 됩니다.)
version: '3.8'
services:
mongodb:
image: mongo:latest
container_name: mongodb
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=[계정명]
- MONGO_INITDB_ROOT_PASSWORD=[계정비밀번호]
- MONGO_INITDB_DATABASE=[DB명]
** build.gradle (기존 builde.gradle에 아래 내용 추가 필요)
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
** application.properties
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=[계정명]
spring.data.mongodb.username=[계정비밀번호]
spring.data.mongodb.password=[DB명]
이렇게만 설정하고 바로 스프링 부트를 실행하여 테스트를 해보았습니다.
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.'
하지만 바로 에러 발생.. ㅎ
분명 docker-compose에 입력한 정보와 application.properties에 입력한 정보를 동일하게 맞추었는데 안되더라구요.
RDBMS만 사용하던 1인으로는 이해가 되지 않았습니다.
거두절미하고 에러코드의 이유는 DB에 해당 계정이 없어서 발생하는 문제 였습니다.
해당 부분 해결하는 방법은 아래와 같습니다!
- cmd 실행
- 해당하는 컨테이너 접속 (docker exec -it Container명 /bin/bash)
- apt-get update 명령어 실행 (vim 사용을 위함)
- apt-get install vim 명령어 실행
- vi /etc/mongo.conf.orig 명령어 실행
- Security 부분 내용 수정 (mongosh 로그인 및 계정 생성을 위한 보안 disable 설정)
security:
authorization:disabled
- mongdoDB 재기동 (저같은 경우는 도커를 내렸다가 올렸습니다.)
- mongosh 명령어 실행
- use [데이터베이스명] 실행
- db.createUser( { user: "계정명", pwd: "비밀번호", roles: [{ role:"readWrite", db: "DB명"}] }) 실행
: 다른 블로그에서는 Any~ 가 붙은 role로 지정하라고 하지만 실제로 우리는 해당 DB에서만 조작할 것이기 때문에 해당 권한까지는 필요 없음.
- db.auth('계정명','패스워드') 실행
결과값이 ok:1이 나오면 정상
위 방법대로 순차적으로 진행 한 뒤 스프링부트 재기동 후 다시 테스트 하면 정상 되는 걸 확인 하실 수 있습니다. 👍