Docs Menu
Docs Home
/ / /
Rust 드라이버
/

비동기 및 동기 API

이 페이지의 내용

  • 개요
  • 비동기 런타임 구성
  • Tokio 런타임 예제
  • 동기식 API 구성
  • 동기식 코드 예제
  • 비동기 및 동기 API 모두 사용
  • 추가 정보
  • API 문서

이 가이드에서는 Rust 드라이버의 비동기동기 API에 대해 알아볼 수 있습니다. 이 가이드에서는 사용 가능한 API를 활성화하고 각각을 사용하도록 코드를 구성하는 방법을 설명합니다.

Rust 운전자 는 기본값 런타임인 tokio 비동기 런타임 크레이트를 지원합니다.

드라이버에는 차단이 필요하거나 병렬 처리가 필요하지 않은 사용 사례를 위한 동기 API도 포함되어 있습니다. Cargo.toml 파일의 mongodb 종속성에 기능 플래그를 추가하여 동기 API를 선택할 수 있습니다.

이 가이드에는 다음 섹션이 포함되어 있습니다.

  • 비동기 런타임 구성tokio 비동기 런타임을 사용하도록 애플리케이션 을 구성하는 방법을 보여줍니다.

  • 동기식 API 구성synctokio-sync 동기식 런타임을 사용하도록 애플리케이션 을 구성하는 방법을 보여줍니다.

  • 비동기 및 동기 API 모두 사용 에서는 애플리케이션 에서 비동기 및 동기 런타임 API를 모두 활성화 하는 방법을 보여줍니다.

  • 추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.

운전자 는 기본값 tokio 런타임을 사용하므로 프로젝트의 Cargo.toml 파일 에 기능 플래그를 지정하지 않고도 이 런타임을 사용할 수 있습니다. 운전자 설치 및 Cargo.toml 파일 구성에 대한 자세한 내용은 빠른 시작의 다운로드 및 설치 단계를 참조하세요.

중요

Rust 운전자 v3.0 부터 tokio 런타임은 운전자 가 지원하는 유일한 비동기 런타임 크레이트입니다. 이전 버전의 운전자 는 async-std 런타임 크레이트도 지원 합니다.

애플리케이션 에서 async-std 런타임을 사용하는 경우 Runtime 구조체 인스턴스 만들고 운전자 작업을 Runtime::spawn() 메서드로 래핑하여 동일한 애플리케이션 에서 tokio 런타임을 시작할 수 있습니다. Client 를 인스턴스화하고 해당 Client 인스턴스 에서 운전자 메서드를 호출할 때 동일한 Runtime 인스턴스 를 사용해야 합니다.

를 인스턴스화하고 Runtime spawn() 메서드를 호출하는 예시 는 tokio 설명서를 참조하세요.

다음 코드는 tokio 크레이트의 task 모듈을 사용하여 여러 데이터 작업에 대한 별도의 동시 작업을 생성합니다.

let client = Client::with_uri_str("<connection string>").await?;
let some_data = doc! { "title": "1984", "author": "George Orwell" };
for i in 0..5 {
let client_ref = client.clone();
let somedata_ref = some_data.clone();
task::spawn(async move {
let collection = client_ref
.database("items")
.collection::<Document>(&format!("coll{}", i));
collection.insert_one(somedata_ref).await
});
}

이 운전자 는 블로킹 동기 API 도 제공합니다. tokio 동기 API 를 사용하려면 다음 예시 와 같이 "sync" 기능 플래그를 mongodb 종속성에 추가합니다.

[dependencies.mongodb]
version = "3.1.0"
features = ["sync"]

동기 API를 사용하는 경우 mongodb::sync 모듈의 유형을 사용하여 작업을 수행합니다. 다음 코드에서는 sync 모듈을 사용하여 동기 API를 사용하여 collection에 데이터를 삽입합니다. insert_one 메서드가 for 루프 내에서 실행되면 드라이버는 각 요청이 완료될 때까지 기다렸다가 계속 진행합니다.

use mongodb::sync::Client;
fn main() {
let client = Client::with_uri_str("<connection string>")?;
let some_data = doc! { "title": "1984", "author": "George Orwell" };
for i in 0..5 {
let client_ref = client.clone();
let somedata_ref = some_data.clone();
let collection = client_ref
.database("items")
.collection::<Document>(&format!("coll{}", i));
collection.insert_one(somedata_ref);
}
}

동일한 애플리케이션 에서 비동기 및 동기 API를 모두 사용할 수 있습니다. 예를 예시 tokio 런타임을 모두 활성화 하려면 종속성 목록에 tokio 종속성을 추가하고 mongodb 종속성에 "sync" 플래그를 추가하면 됩니다.

[dependencies]
futures = "0.3.28"
tokio = {version = "1.32.0", features = ["full"]}
[dependencies.mongodb]
version = "3.1.0"
features = ["sync"]

이 가이드의 개념에 대한 자세한 내용은 다음 페이지를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

성능 고려 사항