[MongoDB] Connection String에 DB이름 적을시 접속안되는 문제 해결


이번에 Node.js로 예약 작업을 구현하기 위해서 Agenda 라는 라이브러리를 사용하게 되었습니다.

Agenda는 다른 예약 라이브러리들과 다르게 예약 작업을 DB에 직접 저장해둬서 서버를 껐다 켜도 예약 작업 들이 날라가지 않습니다.

여기서 저장할때 사용하는 DB가 MongoDB라서 진행하는 프로젝트는 강제로 MongoDB를 사용하게 되었습니다.

 

어쨌던 MongoDB 연결을 위해서 MongoDB 연결주소(?) Connection String URI 란 것을 제공해줘야 MongoDB 서버에 접속 가능합니다.

 

mongodb://your_id:password@server_ip:27017/

다음과 같은 주소를 이용하면 쉽게 데이터베이스에 접속할 수 있었습니다.

그러나 저렇게 접속하는 것은 특정 DB에 접속하는게 아니라 상위의 루트로써 접근하게 됩니다.

 

저는 sms라는 DB를 만들어 놓고 sms에 바로

접근하고 싶었습니다.

그래서 메뉴얼을 따라 아래처럼 작성했습니다.

mongodb://your_id:password@server_ip:27017/sms

당연히 잘될것이라는 기대와는 다르게 codeName: 'AuthenticationFailed'  인증에 실패했다는 오류가 뜹니다.

이 문제로 상당히 골머리를 앓았는데 역시 검색만 잘한다면 없는게 없는 Stack Over Flow 에서 힌트를 얻을 수 있었습니다. 

 

mongodb://your_id:password@server_ip:27017/sms?authSource=admin

끝에 쿼리스트링으로 다음과 같이 authSource를 추가해서 어디서 인증할 것인지 명시해줍니다.

아마 DB 이름을 특정해줘서 접속하게 되면 인증도 그 DB에서 수행하나 봅니다.

admin 이라는 곳에서 인증을 할것이라고 명시해주니 제대로 접속이 되었습니다.

 

* 시놀로지 Docker MongoDB 설치 기준입니다.

 

추가적으로 이 문제에 대해 MongoDB 문서도 100% 확실하게 내용을 다루지 않았다고 합니다 ㅡㅡ;

찾는데 한참 걸렸네요 

 

sms DB로 바로 접속을 하게 하니 이렇게 잘 작동을 하게 되었습니다! ^^

 

참고

https://stackoverflow.com/questions/62818786/mongoose-connection-error-when-using-db-name-in-connection-string

 

Mongoose connection error when using db name in connection string

When I try to connect to Mongo instance using this connection string mongodb://root:password@localhost:27017/ everything works, however, when I try to specify the database name in the connection st...

stackoverflow.com

 

COMMENT WRITE