비동기 및 동기 API
개요
이 가이드에서는 Rust 드라이버의 비동기 및 동기 API에 대해 알아볼 수 있습니다. 이 가이드에서는 사용 가능한 API를 활성화하고 각각을 사용하도록 코드를 구성하는 방법을 설명합니다.
Rust 운전자 는 기본값 런타임인 tokio
비동기 런타임 크레이트를 지원합니다.
드라이버에는 차단이 필요하거나 병렬 처리가 필요하지 않은 사용 사례를 위한 동기 API도 포함되어 있습니다. Cargo.toml
파일의 mongodb
종속성에 기능 플래그를 추가하여 동기 API를 선택할 수 있습니다.
이 가이드에는 다음 섹션이 포함되어 있습니다.
비동기 런타임 구성 은
tokio
비동기 런타임을 사용하도록 애플리케이션 을 구성하는 방법을 보여줍니다.동기식 API 구성 은
sync
및tokio-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 런타임 예제
다음 코드는 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 구성
이 운전자 는 블로킹 동기 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 모두 사용
동일한 애플리케이션 에서 비동기 및 동기 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 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.