Docs Menu
Docs Home
/ / /
Node.js 드라이버
/ /

MongoDB Server 실행 시간 제한

이 페이지의 내용

  • 개요
  • timeoutMS 옵션
  • 시간 초과 상속
  • 재정의
  • 트랜잭션
  • 클라이언트 암호화
  • Cursors
  • 커서 수명 모드
  • 커서 반복 모드
  • API 문서

Node.js 운전자 사용하여 서버 작업을 수행할 때 서버 작업을 완료하는 데 허용되는 기간을 제한할 수도 있습니다. 이렇게 하려면 클라이언트 사이드 작업 시간 제한(CSOT)을 지정합니다. 제한 시간은 서버 선택, 연결 체크아웃 및 서버 측 실행을 포함하여 작업을 완료하는 데 필요한 모든 단계에 적용됩니다. 제한 시간이 만료되면 Node.js 운전자 제한 시간 예외를 발생시킵니다.

참고

실험적 기능

CSOT 기능 은 실험적 기능이며 향후 드라이버 릴리스 에서 변경될 수 있습니다.

MongoDB deployment 에 연결할 때 제한 시간을 지정하려면 timeoutMS 연결 옵션을 제한 시간 길이(밀리초)로 설정하다 . MongoClient 생성자에 인수를 전달하거나 연결 문자열 의 매개변수를 사용하는 두 가지 방법으로 이 작업을 수행할 수 있습니다.

다음 코드 예제에서는 timeoutMS 옵션을 사용하여 30 초의 시간 제한을 지정합니다.

const uri = "mongodb://<hostname:<port>";
const client = new MongoClient(uri, { timeoutMS: 30000 });
const uri = "mongodb://<hostname:<port>?timeoutMS=30000";
const client = new MongoClient(uri);

참고

timeoutMS 연결 옵션이 다음 옵션보다 우선합니다.

  • socketTimeoutMS

  • waitQueueTimeoutMS

  • wTimeoutMS

  • maxTimeMS

  • maxCommitTimeMS

CSOT 기능 더 이상 실험적이지 않은 경우 앞의 옵션은 더 이상 사용되지 않습니다.

timeoutMS 옵션을 지정하면 운전자 각 서버 작업마다 지정된 시간 제한을 자동으로 적용합니다. 다음 코드 예시 클라이언트 수준에서 10 초의 시간 제한을 지정한 다음 insertOne() 메서드를 호출합니다.

const uri = "<connection string uri>";
const client = new MongoClient(uri, {
timeoutMS: 10000
});
async function run() {
try {
const db = client.db("test-db");
const coll = db.collection("test-collection");
const result = await coll.insertOne({ name: "Yngwie" });
console.log("Insert result:", result);
} finally {
await client.close();
}
}
run().catch(console.dir);

timeoutMS 옵션을 지정하면 운전자 다른 Node.js 운전자 옵션과 동일한 상속 동작에 따라 시간 제한을 적용합니다. 다음 표에서는 각 수준에서 시간 초과 값이 상속되는 방식에 대해 설명합니다.

수준
상속 설명

작업

가장 높은 우선 순위를 가지며 다른 수준에서 설정하다 timeoutMS 옵션을 재정의합니다.

트랜잭션

세션, 컬렉션, 데이터베이스 또는 클라이언트 수준에서 설정하다 timeoutMS 보다 우선합니다.

Session

해당 수준에서 설정하다 옵션으로 옵션을 재정의하지 않는 한 해당 세션 내의 모든 트랜잭션 및 작업에 적용됩니다.

Database

해당 수준에서 설정하다 옵션으로 옵션을 재정의하지 않는 한 해당 데이터베이스 내의 모든 세션 및 작업에 적용됩니다.

컬렉션

해당 수준에서 설정하다 옵션으로 옵션이 재정의되지 않는 한 해당 컬렉션 의 모든 세션 및 작업에 적용됩니다.

고객

timeoutMS을(를) 지정하지 않는 해당 클라이언트 내의 모든 데이터베이스, 컬렉션, 세션, 트랜잭션 및 작업에 적용됩니다.

재정의 및 특정 옵션에 대한 자세한 내용은 재정의 섹션을 참조하세요.

Node.js 운전자 데이터베이스 작업의 동작과 성능을 제어하기 위해 다양한 수준의 구성을 지원합니다.

작업 수준에서 timeoutMS 옵션을 지정하여 특정 작업에 대한 클라이언트 수준 구성을 재정의할 수 있습니다. 이를 통해 개별 쿼리의 요구 사항에 따라 시간 초과를 사용자 지정할 수 있습니다.

다음 예시 작업 수준 timeoutMS 구성이 클라이언트 수준 timeoutMS 구성을 재정의할 수 있는 방법을 보여 줍니다.

// Creates a new MongoClient with a client-level timeoutMS configuration
const uri = "<connection string uri>";
const client = new MongoClient(uri, {
// Client-level timeout: 15 seconds
timeoutMS: 15000
});
async function run() {
try {
const db = client.db("test-db");
const coll = db.collection("test-collection");
// Performs a query operation with an operation-level timeoutMS configuration
const docs = await coll.find({},
// Operation-level timeout: 10 seconds
{ timeoutMS: 10000 })
.toArray();
console.log(docs);
} finally {
await client.close();
}
}
run().catch(console.dir);

트랜잭션 구현 위해 새 ClientSession 인스턴스 만드는 경우 defaultTimeoutMS 옵션을 사용합니다. defaultTimeoutMS 를 설정하다 하여 사용할 timeoutMS 값을 지정할 수 있습니다.

defaultTimeoutMS를 지정하지 않으면 운전자 상위 MongoClient에 설정하다 timeoutMS 값을 사용합니다.

withTransaction() 콜백 에서 제공하는 트랜잭션 세션의 작업에 timeoutMS 옵션을 설정하여 defaultTimeoutMS 을(를) 재정의할 수 없습니다. 이 경우 오류가 발생합니다.

클라이언트 측 필드 레벨 암호화 (CSFLE)를 사용하는 경우 운전자 timeoutMS 옵션을 사용하여 암호화 및 암호 해독 작업에 허용되는 시간을 제한합니다.

ClientEncryption 인스턴스 구성할 때 timeoutMS 옵션을 지정하면 해당 인스턴스 에서 수행되는 모든 작업의 수명을 제어합니다. timeoutMS를 제공하지 않으면 인스턴스 는 ClientEncryption 생성자에 사용된 MongoClienttimeoutMS 설정을 상속합니다.

클라이언트 와 ClientEncryption 모두에서 timeoutMS 를 설정하다 하면 ClientEncryption 에 제공된 값이 우선합니다.

커서는 CSOT 기능 사용할 때 구성 가능한 시간 초과 설정을 제공합니다. 필요한 경우 커서 수명 또는 커서 반복 모드 구성하여 커서 처리를 조정할 수 있습니다. 모드 구성하려면 timeoutMode 옵션을 기본값 인 cursorLifetime 또는 iteration로 설정하다 .

커서 수명 모드 timeoutMS 를 사용하여 커서 의 전체 수명을 제한합니다. 이 모드 에서는 커서 초기화와 커서 메서드에 대한 모든 후속 호출이 timeoutMS 옵션에 지정된 제한 내에서 완료되어야 합니다. 모든 문서는 이 한도 내에서 반환되어야 합니다. 그렇지 않으면 커서의 수명이 만료되고 시간 초과 오류가 발생합니다.

toArray() 또는 close() 메서드를 호출하여 커서 닫으면 서버 측 리소스가 정리되도록 killCursors 명령에 대한 시간 제한이 재설정됩니다.

다음 예시 커서 초기화되고 모든 문서가 10 초 이내에 검색되도록 timeoutMS 옵션을 설정하다 방법을 보여 줍니다.

const docs = await collection.find({}, {timeoutMS: 10000}).toArray();

커서 반복 모드 timeoutMS 옵션을 사용하여 각 호출을 next(), hasNext() 또는 tryNext() 메서드로 제한합니다. 시간 초과는 각 호출이 완료될 때 새로 고침됩니다. 이는 고정 사이즈 컬렉션 또는 변경 스트림에서 find() 메서드가 반환하는 테일 커서(tailable cursor)와 같은 모든 테일 커서(tailable cursor)의 기본값 모드 입니다.

다음 코드 예시 timeoutModeiteration로 설정하다 커서 사용하여 mflix 컬렉션 의 문서를 반복한 다음 각 영화 문서 에 대해 imdb_url 를 가져오고 기록합니다.

for await (const movie of mflix.find({}, { timeoutMode: 'iteration' })) {
const imdbResponse = await fetch(movie.imdb_url);
console.log(await imdbResponse.text());
}

Node.js 운전자 에서 시간 초과를 사용하는 방법에 대해 자세히 학습 다음 API 설명서를 참조하세요.

돌아가기

SOCKS5 프록시 지원