Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Node.js 드라이버
/ /

연결 풀로 연결 관리

이 가이드 에서는 Node.js 운전자 연결 풀을 사용하여 MongoDB deployment 에 대한 연결을 관리 방법과 애플리케이션 에서 연결 풀 설정을 구성하는 방법에 대해 학습 합니다.

연결 풀 Node.js 운전자 에 의해 유지 관리되는 개방형 데이터베이스 연결의 캐시 입니다. 애플리케이션 MongoDB 에 대한 연결을 요청하면 Node.js 운전자 풀에서 원활하게 연결을 가져오고, 작업을 수행하고, 재사용을 위해 풀에 연결을 반환합니다.

연결 풀은 애플리케이션 지연 시간 줄이고 Node.js 운전자 에서 새 연결을 생성하는 횟수를 줄이는 데 도움이 됩니다.

모든 MongoClient 인스턴스 에는 MongoDB 토폴로지 의 각 서버 에 대한 내장 연결 풀 있습니다. minPoolSize 옵션을 구성하지 않으면 연결 풀이 필요에 따라 소켓을 열어 애플리케이션 에서 MongoDB 에 대한 동시 요청을 지원 .

MongoClient 인스턴스 에서 다음 연결 풀 설정을 지정할 수 있습니다.

설정
설명

maxPoolSize

The maximum number of concurrent connections that the pool maintains. If the number of in-use connections to a server reaches the specified value, the next request to that server waits until a connection becomes available.

Default: 100

maxConnecting

The maximum number of connections that each pool can establish concurrently.

minPoolSize

The minimum number of concurrent connections that the pool maintains.

Default: 0

maxIdleTimeMS

The maximum number of milliseconds that a connection can remain idle in the pool.

Default: 0 (no limit)

waitQueueTimeoutMS

The maximum number of milliseconds that a request can wait for a socket to become available.

Default: 0 (no limit)

애플리케이션의 요청을 지원 데 필요한 소켓 외에도 각 MongoClient 인스턴스 서버 상태 모니터링 위해 MongoDB 토폴로지 에서 서버 당 최대 두 개의 연결을 엽니다.

예시 들어, 3노드 복제본 세트 에 연결된 클라이언트 6개의 모니터링 소켓을 엽니다. 애플리케이션 maxPoolSize 기본값 설정을 사용하고 프라이머리 (기본값) 노드 만 쿼리하는 경우 연결 풀 에는 최대 106 개의 열린 소켓과 100 개의 연결이 있을 수 있습니다. 애플리케이션 읽기 설정 (read preference) 사용하여 세컨더리 노드를 쿼리 경우 이러한 연결 풀이 커지고 개방형 모니터링 소켓을 포함하여 총 연결 수가 306 개가 될 수 있습니다.

하나의 프로세스 내에서 많은 수의 동시 MongoDB 요청을 지원하려면 maxPoolSize를 늘리면 됩니다.

다음 코드는 options 객체 에 maxPoolSize 옵션을 지정하여 최대 연결 풀 크기가 200MongoClient 인스턴스 를 생성합니다.

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
maxPoolSize: 200
});

연결 풀 속도 제한 연결 설정. maxConnecting 옵션은 풀이 언제든지 병렬로 생성할 수 있는 연결 수를 결정합니다. 예시 를 들어 maxConnecting 값이 2인 경우 연결을 동시에 체크아웃하려는 세 번째 요청 다음 경우 중 하나가 발생할 때만 성공합니다.

  • 연결 풀에서 연결 생성이 완료되었으며 풀에 연결 수가 maxPoolSize 미만입니다.

  • 기존 연결이 풀로 다시 확인됩니다.

다음 코드는 options 객체 에 maxConnecting 옵션을 지정하여 풀당 동시에 설정할 수 있는 최대 2 연결을 가진 MongoClient 인스턴스 만듭니다.

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
maxConnecting: 2
});

minPoolSize 옵션을 사용하여 각 서버 에 대한 최소 연결 수를 설정하다 수 있습니다. 운전자 연결 풀 에 minPoolSize 옵션으로 설정하다 연결 수가 항상 최소한 있는지 확인합니다. 소켓이 닫혀 총 소켓 수(사용 중인 소켓과 유휴 상태 모두)가 최소값 아래로 떨어지면 최소값에 도달할 때까지 더 많은 소켓이 열립니다.

다음 코드는 options 객체 에 minPoolSize 옵션을 지정하여 최소 연결 풀 크기가 10MongoClient 인스턴스 생성합니다.

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
minPoolSize: 10
});

참고

maxIdleTimeMS 로 구성된 MongoClient0 로 설정하다 minPoolSize 는 활동량이 지속적으로 낮은 워크로드에 최적입니다. 이 구성을 사용하면 연결 풀 비활성 기간 동안 사용하지 않는 연결을 닫을 수 있습니다.

6.18.0 이전 버전에서는 비활성 기간 동안 minPoolSize 이(가) 0 (으)로 설정하다 되었을 때 Node.js 운전자 유휴 연결을 닫지 않았습니다. 버전 6.18.0부터 연결 풀 minPoolSize 설정에 관계없이 유휴 연결을 올바르게 닫습니다.

maxIdleTimeMS 옵션을 설정하여 연결이 풀에서 유휴 상태로 유지될 수 있는 최대 시간(밀리초)을 설정할 수 있습니다. 연결이 maxIdleTimeMS 동안 유휴 상태이면 연결 풀이 이를 제거하고 교체합니다. 이 옵션의 기본값은 0(제한 없음)입니다.

다음 코드는 options 객체 에 maxIdleTimeMS 설정을 지정하여 최대 유휴 시간이 10000 밀리초(10 초)인 MongoClient 인스턴스 생성합니다.

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
maxIdleTimeMS: 10000
});

MongoClient 여러 개의 동시 요청을 지원합니다. 각 프로세스에 대해 클라이언트를 만들어 프로세스의 모든 작업에 재사용합니다. 이 방법은 각 요청에 대해 클라이언트를 만드는 것보다 더 효율적입니다.

드라이버는 소켓이 사용 가능해질 때까지 기다릴 수 있는 요청 수를 제한하지 않으며, 부하 급증 시 해당 풀의 크기를 대기 중인 제한으로 제한하는 것은 애플리케이션의 책임입니다. 요청은 waitQueueTimeoutMS 옵션에 지정된 시간 동안 대기하며 기본값은 0(제한 없음)입니다.

소켓에 대해 waitQueueTimeoutMS에 정의된 시간보다 오래 기다리는 요청은 연결 오류를 발생시킵니다. 모든 작업을 완료하는 것보다 부하가 급증하는 동안 작업 기간을 제한하는 것이 더 중요한 경우 이 옵션을 사용합니다.

다음 코드는 options 객체 에서 선언하여 최대 대기열 시간 제한이 10000 밀리초(10 초)인 MongoClient 인스턴스 생성합니다.

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
waitQueueTimeoutMS: 10000
});

요청 이 MongoClient.close()을(를) 호출하면 Node.js 운전자 다음 조치를 수행합니다.

  • 연결 풀 의 모든 유휴 소켓을 닫습니다.

  • 풀로 반환될 때 사용 중인 모든 소켓을 닫습니다.

  • 관련 작업이 완료될 때만 사용 중인 모든 소켓을 닫습니다.

MongoClient.close() 를 호출하면 비활성 소켓만 닫히고 진행 중인 작업이 직접 종료되지 않습니다.

참고

MongoClient.close() 메서드는 기존 세션과 트랜잭션을 닫으며, 이는 진행 중인 작업의 동작에 간접적으로 영향을 미치고 커서를 엽니다.

연결 풀 크다고 해서 항상 재연결 요청이 줄어드는 것은 아닙니다. 다음 예시 시나리오를 가정해 보겠습니다.

  • 애플리케이션 의 연결 풀 크기가 5 소켓이고 socketTimeoutMS 옵션이 5000 밀리초로 설정하다 있습니다.

  • 작업은 평균 3000 밀리초마다 발생하며 재연결 요청이 자주 발생합니다.

  • 각 소켓은 5000 밀리초 후에 시간 초과되므로 모든 소켓이 닫히지 않으려면 이 5000 밀리초 동안 조치를 취해야 합니다.

이 시나리오에서 각 소켓은 5000 밀리초 후에 시간 초과되며, 소켓이 닫히지 않으려면 이 시간 초과 기간 내에 활동해야 합니다. 그러나 3000 밀리초마다 하나의 메시지로는 모든 소켓을 활성 상태로 유지하기에 충분하지 않아 여러 소켓의 시간 초과가 발생합니다.

과도한 소켓 시간 초과를 방지하려면 maxPoolSize 옵션을 지정하여 운전자 연결 풀 에서 유지할 수 있는 연결 수를 줄입니다. maxPoolSize 옵션을 설정하다 방법을 학습하려면 maxPoolSize 섹션을 참조하세요.

Node.js 운전자 사용하여 MongoClient 객체 만들고 옵션을 지정하는 방법에 대한 자세한 내용은 다음 API 설명서를 참조하세요.

돌아가기

MongoDB Server 실행 시간 제한

이 페이지의 내용