MongoDB Authentication failed

Jemin·2023년 10월 23일
0

트러블슈팅

목록 보기
7/11
post-thumbnail
post-custom-banner

문제 발생 상황

최근에 백엔드를 공부하면서 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에 대한 지식이 적기 때문에 설정하는 부분에서 무언가 빠진게 아닌가 싶어서 연동방법부터 다시 찾아보았다.

SpringBoot 에서 mongoDB 연동하기

위 글의 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
profile
경험은 일어난 무엇이 아니라, 그 일어난 일로 무엇을 하느냐이다.
post-custom-banner

0개의 댓글