데이터베이스 작업을 하다 보면 MongoServerError: bad auth : authentication failed 에러를 만나게 되는 경우가 종종 있습니다. 특히 MongoDB Atlas를 사용하거나 새로운 프로젝트를 시작할 때 이런 인증 오류로 막막해하신 분들이 많을 것입니다. 이 글에서는 MongoDB 인증 실패 에러의 원인부터 실제 해결 방법까지, 실무에서 바로 활용할 수 있는 단계별 가이드를 제공해드리겠습니다. 각 해결책에는 실제 코드 예시와 함께 상황별 대응 방법을 담았으니, 차근차근 따라해보시기 바랍니다.

 

1. MongoDB 인증 에러의 주요 원인들

MongoDB에서 인증 실패가 발생하는 원인은 생각보다 다양합니다. 가장 흔한 원인들을 먼저 파악해보겠습니다.

잘못된 사용자 정보

가장 기본적이지만 놓치기 쉬운 부분입니다. 사용자명이나 비밀번호에 오타가 있거나, MongoDB Atlas 로그인 비밀번호와 데이터베이스 사용자 비밀번호를 혼동하는 경우가 많습니다.

인증 데이터베이스 문제

MongoDB에서는 사용자가 생성된 데이터베이스와 실제 연결하려는 데이터베이스가 다를 수 있습니다. 예를 들어, 사용자가 admin 데이터베이스에 생성되었는데 test 데이터베이스로 직접 연결하려고 하면 인증이 실패합니다.

네트워크 접근 제한

MongoDB Atlas의 경우 IP 화이트리스트 설정이 제대로 되어있지 않으면 인증 자체가 불가능합니다.

특수문자 인코딩 문제

비밀번호에 특수문자가 포함된 경우, URL 인코딩이 제대로 되지 않아 인증에 실패하는 경우가 있습니다.

 

 

2. 기본 인증 정보 확인하기

먼저 가장 기본적인 부분부터 체크해보겠습니다.

사용자명과 비밀번호 재확인

MongoDB Compass나 다른 클라이언트 도구를 사용해서 실제로 연결이 되는지 확인해보세요.

// 올바른 연결 문자열 예시
const uri = "mongodb+srv://username:password@cluster0.abc123.mongodb.net/myDatabase?retryWrites=true&w=majority";

MongoDB Atlas 사용자 비밀번호 vs 계정 비밀번호

많은 분들이 실수하는 부분입니다. MongoDB Atlas 웹사이트 로그인 비밀번호와 데이터베이스 사용자 비밀번호는 완전히 다른 것입니다.

데이터베이스 사용자 비밀번호를 확인하려면:

  1. MongoDB Atlas 대시보드 접속
  2. Database Access 메뉴 클릭
  3. 해당 사용자의 Edit 버튼 클릭
  4. Edit Password로 새 비밀번호 설정

 

 

3. 연결 문자열 문제 해결하기

authSource 매개변수 추가

가장 효과적인 해결책 중 하나입니다. 사용자가 admin 데이터베이스에 생성되었다면 연결 문자열에 authSource=admin을 명시해야 합니다.

// authSource를 명시한 연결 문자열
const uri = "mongodb+srv://username:password@cluster0.abc123.mongodb.net/myDatabase?retryWrites=true&w=majority&authSource=admin";

특수문자 인코딩 처리

비밀번호에 @, #, ! 등의 특수문자가 있다면 URL 인코딩이 필요합니다.

특수문자 인코딩 결과
@ %40
# %23
! %21
$ %24
% %25
// 특수문자 인코딩 예시
// 원본 비밀번호: p@ssw0rd!
// 인코딩된 비밀번호: p%40ssw0rd%21
const uri = "mongodb+srv://username:p%40ssw0rd%21@cluster0.abc123.mongodb.net/myDatabase";

 

 

4. MongoDB Atlas 특별 케이스 해결법

IP 화이트리스트 설정

MongoDB Atlas에서는 보안을 위해 특정 IP에서만 접근을 허용합니다.

  1. MongoDB Atlas 대시보드에서 Network Access 메뉴 접속
  2. Add IP Address 클릭
  3. 현재 IP 주소 추가 또는 0.0.0.0/0 (모든 IP 허용) 설정

주의: 프로덕션 환경에서는 0.0.0.0/0 설정을 권장하지 않습니다.

클러스터 연결 문자열 확인

MongoDB Atlas에서 제공하는 연결 문자열을 정확히 복사했는지 확인하세요.

// MongoDB Atlas에서 제공하는 표준 연결 문자열 형식
mongodb+srv://<username>:<password>@<cluster-url>/<database>?retryWrites=true&w=majority

환경 변수 사용 시 주의사항

환경 변수를 사용할 때는 변수명 확인과 서버 재시작이 중요합니다.

// .env 파일
DB_USER=myusername
DB_PASS=mypassword
DB_NAME=mydatabase

// 사용 코드
const uri = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@cluster0.abc123.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority`;

 

 

5. 드라이버별 해결 방법

Node.js (Mongoose)

const mongoose = require('mongoose');

const connectDB = async () => {
  try {
    const conn = await mongoose.connect(process.env.MONGO_URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });
    console.log(`MongoDB Connected: ${conn.connection.host}`);
  } catch (error) {
    console.error('MongoDB connection failed:', error.message);
    process.exit(1);
  }
};

Python (PyMongo)

from pymongo import MongoClient
import urllib.parse

username = urllib.parse.quote_plus("myusername")
password = urllib.parse.quote_plus("mypassword")
client = MongoClient(f"mongodb+srv://{username}:{password}@cluster0.abc123.mongodb.net/myDatabase?retryWrites=true&w=majority")

 

 

6. 그럼에도 해결 안되면, 추가적인 해결 방법으로 해보세요!

인증 메커니즘 확인

MongoDB 버전에 따라 지원하는 인증 메커니즘이 다를 수 있습니다.

// 특정 인증 메커니즘 지정
const uri = "mongodb+srv://username:password@cluster0.abc123.mongodb.net/myDatabase?authMechanism=SCRAM-SHA-256";

연결 풀 설정 조정

동시 연결 수가 많은 경우 연결 풀 설정을 조정해야 할 수 있습니다.

const uri = "mongodb+srv://username:password@cluster0.abc123.mongodb.net/myDatabase?maxPoolSize=10";

SSL/TLS 설정

일부 환경에서는 SSL 설정을 명시적으로 지정해야 합니다.

const uri = "mongodb+srv://username:password@cluster0.abc123.mongodb.net/myDatabase?ssl=true";

 

 

7. 마지막으로, 이런 순서로 점검해보세요!

인증 문제를 체계적으로 해결하기 위한 단계별 체크리스트입니다.

기본 확인 사항

  • [ ] 사용자명과 비밀번호 정확성
  • [ ] MongoDB Atlas vs 로컬 MongoDB 구분
  • [ ] 연결 문자열 복사 오류 확인
  • [ ] 특수문자 인코딩 여부

네트워크 관련

  • [ ] IP 화이트리스트 설정
  • [ ] 방화벽 설정 (포트 27017)
  • [ ] DNS 해석 문제 확인
  • [ ] 회사 네트워크 제한 사항

환경 설정

  • [ ] 환경 변수 정확성
  • [ ] 서버/애플리케이션 재시작
  • [ ] 드라이버 버전 호환성
  • [ ] MongoDB 서버 버전 확인

 

MongoDB 인증 에러는 처음에는 복잡해 보이지만, 원인을 파악하고 체계적으로 접근하면 충분히 해결할 수 있는 문제입니다. 이 가이드의 단계별 해결책을 통해 빠르게 문제를 해결하시는데 도움이 되었으면 합니다.

 

댓글 남기기