2.2.3 러스트에서 async/await 다루기
런타임 위에는 러스트에 통합된 두 구성 요소가 있다. 첫 번째는 async/await 구문이다. 1장에서 이미 본 비동기 HTTP 호출을 수행하는 코드를 살펴보자.
코드 2-22 async HTTP 호출 예제
use std::collections::HashMap;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::get("https://httpbin.org/ip")
.await?
.json::<HashMap<String, String>>()
.await?;
println!("{:#?}", resp);
Ok(())
}
이 코드가 작동하려면 Cargo.toml 파일에 Tokio와 Reqwest 크레이트를 추가해야 한다. 많은 러스트 크레이트는 로직을 기능으로 분할하여 필요한 경우 더 작은 요소만 포함시키는데, 이는 애플리케이션에 필요하지 않은 코드가 포함되지 않도록 하기 위함이다.