1단계: 문제 정의

Node.js에서 mongodb npm 패키지로 MongoDB에 연결하려 할 때 다음과 같은 traceback이 발생하는 상황입니다.

에러 로그 (원문)

1
2
3
4
5
MongoError: Server at localhost:27017 reports wire version 0, but this version of Node.js Driver requires at least 2 (MongoDB2.6).
    at /home/.../node_modules/mongodb-core/lib/topologies/server.js:377:39
    at /home/.../node_modules/mongodb-core/lib/connection/pool.js:541:18
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)

재현 코드 (원문)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var mongo = require('mongodb');
var MongoClient = mongo.MongoClient;
var DB_NAME = 'demodb';
var url = "mongodb://localhost:27017/" + DB_NAME;

MongoClient.connect(url, function(err, db) {
    if (err) {
        console.log('Error in creating DB ' + DB_NAME);
        throw err;
    }
    console.log("Database " + DB_NAME + " created successfully!");
    db.close();
});

오류 메시지는 두 개의 숫자가 언급됩니다.

  • Server ... reports wire version 0 — MongoDB 서버가 응답한 wire protocol 버전(0)
  • Driver requires at least 2 (MongoDB2.6) — mongodb 드라이버가 요구하는 최소 wire protocol 버전(2, 즉 MongoDB 2.6부터 지원)

서버가 보고한 값보다 드라이버가 요구하는 값이 더 크므로, 연결 대상 MongoDB 서버가 이 드라이버 버전에 비해 너무 오래된 것입니다.


2단계: 원인 탐구

이 오류는 코드 로직 문제가 아닌 버전 호환성 문제입니다. MongoDB는 클라이언트(드라이버)와 서버 사이의 통신 규약을 wire protocol이라는 버전 번호로 협상합니다.

  • MongoDB 서버는 응답(handshake)에서 자신이 지원하는 wire version을 알려줍니다.
  • 드라이버는 자신이 요구하는 최소 wire version을 알고 있습니다.
  • 서버가 보고하는 wire version이 드라이버의 최소 요구치보다 낮으면 연결이 거부됩니다.

이 원문 사례에서 연결 대상은 mongodb://localhost:27017/의 로컬 MongoDB 서버입니다. 서버가 wire version 0을 보고한 만큼, 대체로 MongoDB 2.6 이전 또는 매우 오래된 서버 버전이 로컬에 떠 있다는 뜻으로 해석할 수 있습니다.


3단계: 근본 원인 분석

핵심은 npm으로 최신 mongodb 드라이버를 설치했지만, 실제 MongoDB 서버 버전이 그 드라이버가 요구하는 버전에 미치지 못한다는 점입니다.

wire protocol 버전과 MongoDB 서버 버전의 대응 관계는 대략 다음과 같습니다. (일반적인 점검 기준이며 환경에 따라 다를 수 있습니다.)

MongoDB 서버 버전지원 wire protocol (대략)비고
MongoDB 2.4 이하wire version 0드라이버 요구치(2) 미달 → 이 오류 발생
MongoDB 2.6wire version 1최신 드라이버와 협상이 어려울 수 있음
MongoDB 3.0wire version 2드라이버 최소 요구치 충족
MongoDB 3.2 이후wire version 3+대부분의 현대 드라이버 호환
원인 후보확인 명령맞는 경우의 증상해결 방향
MongoDB 서버가 드라이버 요구 버전보다 오래됨mongod --version서버가 wire version 0을 보고, 드라이버는 2를 요구서버 업그레이드 또는 드라이버 다운그레이드
mongodb 드라이버 버전이 서버에 비해 너무 높음npm list mongodb최신 드라이버인데 오래된 서버에 연결 시도호환 드라이버 버전으로 변경
서버가 정상적으로 handshake하지 못하는 프록시/터널mongosh --host localhost 직접 접속직접 접속은 되지만 드라이버에서만 오류네트워크 경로 점검

증상 fingerprint 요약: 이 오류가 뜨면 대부분 서버 버전보다 드라이버 버전이 앞서 있습니다. 드라이버 자체를 최신으로 올리기보다 “현재 접속하는 MongoDB 서버 버전 + Node 버전"에 맞는 드라이버 버전을 찾는 것이 빠른 판단 기준입니다.


4단계: 코드 해결책

임시 해결책 1 — 호환 가능한 드라이버 버전 설치 (드라이버 다운그레이드)

원문 답변 작성자는 mongodb-version-list 모듈을 이용해 현재 Node 환경에서 사용 가능한 mongodb 드라이버 버전 목록을 조회한 뒤, 서버와 호환되는 버전을 골라 설치했습니다.

1
2
3
4
5
6
# 현재 Node 환경에서 사용 가능한 mongodb 드라이버 버전 목록 확인
node -e "
  require('mongodb-version-list')().then(list => {
    console.log(list.join('\n'));
  }).catch(console.error);
"

목록에서 서버 버전과 맞는 드라이버를 골라 설치합니다 (예시, --save-exact로 버전 고정 권장):

1
2
3
npm install mongodb@2 --save-exact
# 또는
npm install mongodb@<호환 버전> --save-exact

설치 후 연결을 다시 시도하면 wire version 협상이 성공할 수 있습니다.

임시/권장 해결책 2 — MongoDB 서버 업그레이드

서버 자체가 오래된 경우(예: MongoDB 2.4 이하) 드라이버를 추측 식으로 낮추기보다, MongoDB 서버를 드라이버가 요구하는 버전 이상으로 업그레이드하는 것이 장기적으로 맞는 방법입니다. 최신 드라이버에서 제공하는 기능과 보안 패치를 함께 쓸 수 있기 때문입니다.

1
2
# 서버 버전 확인
mongod --version

버전이 MongoDB 2.6 미만이라면 서버 업그레이드를 검토하세요. 프로덕션에서는 업그레이드 전 데이터 백업과 다운타임 계획이 필요합니다.


5단계: 향후 예방 조치

검증 명령

드라이버를 변경한 뒤 연결이 정상적으로 되는지 아래 명령으로 확인합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 1) 설치된 드라이버 버전 확인
npm list mongodb

# 2) MongoDB 서버 버전 확인
mongod --version

# 3) 실제 연결 테스트 (에러가 없어야 정상)
node -e "require('mongodb').MongoClient
  .connect('mongodb://localhost:27017/demodb', function(err, db) {
    if (err) { throw err; }
    console.log('DB connection OK');
    db.close();
  })"

재발 방지 체크

  • 버전 고정: package.json에서 mongodb 버전을 --save-exact로 고정하고, 호환성을 확인한 뒤에만 수동 업그레이드합니다.
  • 서버 버전 사전 확인: 배포/로컬 환경 모두에서 mongod --version으로 서버 버전을 기록해 두면 드라이버 선택 기준이 명확합니다.
  • 의존성 충돌 방지: 프로젝트에 드라이버를 루트에만 설치하고, 서로 다른 버전이 중복으로 설치되지 않게 npm ls mongodb로 트리를 점검합니다.
  • 일반적인 점검 기준: 원본 답변은 드라이버 버전 다운그레이드에 초점을 둡니다. “드라이버가 요구하는 버전 vs 서버가 보고하는 버전"을 항상 먼저 비교하세요.

출처


DevTrace verdict

이 문제의 핵심은 MongoDB 서버가 부족해서가 아니라, 접속 대상 MongoDB 서버의 wire protocol 버전(wire version 0)이 mongodb 드라이버가 요구하는 최소 수준(2, MongoDB 2.6)보다 낮은 데 있으며, 드라이버를 다운그레이드하거나 MongoDB 서버를 업그레이드해 양쪽 버전의 스펙을 맞추면 해결됩니다.