최근에 백엔드를 공부하면서 MongoDB와 SpringBoot를 연결하다가 발생한 문제다.
MongoDB는 AWS EC2를 사용해 ubuntu의 Docker 컨테이너로 환경을 구축해놨다.
admin 데이터베이스에서 유저를 생성했고 SpringBoot에서는 아래와 같이 설정했다.
# MongoDB Connection
spring.data.mongodb.host=[host]
spring.data.mongodb.port=27017
spring.data.mongodb.database=web-toy
spring.data.mongodb.username=MyUser
spring.data.mongodb.password=1234
spring.data.mongodb.auto-index-creation=true
타임리프를 사용해 생성한 view에서 데이터를 저장하는 post 요청을 보냈고 아래와 같은 에러 문구가 SpringBoot에서 출력됐다.
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server 43.201.127.238:27017. The full response is {"ok": 0.0, "errmsg": "Authentication failed.", "code": 18, "codeName": "AuthenticationFailed"}
에러 문구로 검색해봤을 때 제일 많이 보이는 해결법은 admin 데이터베이스에 user를 생성해야 한다는데, 나는 이미 admin 데이터베이스에서 생성했기 때문에 해당되지 않았다.
아무래도 SpringBoot에 대한 지식이 적기 때문에 설정하는 부분에서 무언가 빠진게 아닌가 싶어서 연동방법부터 다시 찾아보았다.
위 글의 yml 설정부분에서 힌트를 얻을 수 있었다.
spring:
data:
mongodb:
host: 546.465.445
port: 27017
authentication-database: admin
username: qweqwe
password: 123
database: qwerqwer
# uri: mongodb: //546.465.445:27017/qwerqwer
이 부분이 빠져있는 것 같았다.
authentication-database: admin
application.properties
파일에서 authentication-database 설정을 추가해주었다.
대부분 로컬에서 DB와 연동해서 사용하는 예제이지만 현재 DB를 다른 IP에서 구동중이기 때문에 외부로 접속할 경우 설정해주어야 한다고 한다.
# MongoDB Connection
spring.data.mongodb.host=43.201.127.238
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin // 이 부분 추가
spring.data.mongodb.database=web-toy
spring.data.mongodb.username=MyUser
spring.data.mongodb.password=1234
spring.data.mongodb.auto-index-creation=true