이번 튜토리얼에서는 Rust와 Actix-web을 이용하여 'Hello World' 메시지를 출력하는 기본적인 웹 서버를 만들어 보겠습니다.
첫 단계로, 새로운 binary 기반의 Cargo 프로젝트를 생성합니다:
cargo new hello-world
cd hello-world
그 후, 프로젝트에 actix-web을 의존성으로 추가해야 합니다.
이를 위해 Cargo.toml
파일을 열고 다음과 같이 입력합니다:
[dependencies]
actix-web = "4"
웹 서버에서 요청을 처리하기 위해 핸들러 함수를 작성합니다.
이 함수들은 비동기 함수로, 필요한 매개변수를 받아 HttpResponse를 반환합니다.
이 HttpResponse는 웹 서버가 클라이언트에게 보낼 응답입니다.
src/main.rs
파일을 다음과 같이 수정합니다:
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
#[get("/")]
async fn hello() -> impl Responder {
HttpResponse::Ok().body("Hello world!")
}
#[post("/echo")]
async fn echo(req_body: String) -> impl Responder {
HttpResponse::Ok().body(req_body)
}
async fn manual_hello() -> impl Responder {
HttpResponse::Ok().body("Hey there!")
}
각 핸들러는 HTTP 메소드와 경로에 따라 요청을 처리합니다.
수동으로 경로를 설정하고 싶다면, 그에 맞는 함수를 작성하면 됩니다.
다음 단계로, App 인스턴스를 생성하고 요청 핸들러를 등록합니다.
경로 정보가 있는 핸들러는 App::service
를 사용하고, 수동으로 경로를 설정한 핸들러는 App::route
를 사용합니다.
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(hello)
.service(echo)
.route("/hey", web::get().to(manual_hello))
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
이제 cargo run
명령어를 통해 프로그램을 컴파일하고 실행할 수 있습니다.
웹 브라우저에서 http://127.0.0.1:8080/ 주소로 접속하면 'Hello World' 메시지를 확인할 수 있습니다.
이 간단한 예제를 통해 Rust와 Actix-web을 이용하여 웹 서버를 어떻게 만드는지 배웠습니다.
이러한 기본 원리를 이용하면 다양한 웹 서비스를 만들어볼 수 있습니다.