카테고리 없음

Rust에서 웹 서버 만들기 | actix-web 기초

mystory55801 2025. 6. 8. 15:57

Rust로 웹 서버 만들기: actix-web 입문

Rust는 안전성과 성능 덕분에 웹 서버 개발에 적합한 언어입니다. 특히, actix-web은 Rust에서 가장 인기 있는 웹 프레임워크로, 빠르고 확장성이 뛰어나며 비동기 프로그래밍(async)을 기본으로 지원합니다.

이 글에서는 actix-web의 기초를 다루고, 간단한 웹 서버를 만드는 방법을 예제로 설명합니다.

actix-web이란 무엇인가요?

actix-web은 Rust 기반의 경량 고성능 웹 프레임워크로, Tokio 기반 비동기 런타임을 활용해 효율적인 HTTP 서버를 제공합니다. 다음과 같은 특징이 있습니다:

  • 고성능 비동기 처리
  • 라우팅 시스템 내장
  • 미들웨어, 에러 처리 등 서버 개발에 필요한 기능 제공

Cargo.toml 설정

actix-web을 사용하려면 먼저 프로젝트에 해당 의존성을 추가해야 합니다.


[dependencies]
actix-web = "4"
tokio = { version = "1", features = ["full"] }

tokio는 actix-web 내부에서 비동기 처리를 위한 런타임으로 사용됩니다.

기본 웹 서버 예제

간단한 "Hello, world!" 웹 서버를 만들어보겠습니다.


use actix_web::{get, App, HttpServer, Responder, HttpResponse};

#[get("/")]
async fn index() -> impl Responder {
    HttpResponse::Ok().body("Hello, Actix-web!")
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(index)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

위 코드는 Actix 웹 서버를 만들고, / 경로로 들어온 요청에 대해 "Hello, Actix-web!"을 응답합니다.

라우팅 추가하기

actix-web은 라우팅을 매우 간단하게 정의할 수 있습니다. 경로별로 핸들러 함수를 만들고, App에 추가하면 됩니다.


use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};

#[get("/hello/{name}")]
async fn hello(path: web::Path<String>) -> impl Responder {
    let name = path.into_inner();
    HttpResponse::Ok().body(format!("Hello, {}!", name))
}

/hello/{name} 형식의 URL에서 name 값을 추출하여 동적으로 응답합니다.

POST 요청 처리하기

JSON 형태의 데이터를 받는 POST 요청도 쉽게 처리할 수 있습니다. 예를 들어 사용자 정보를 받는 API는 다음과 같이 작성할 수 있습니다.


use actix_web::{post, web, App, HttpServer, HttpResponse, Responder};
use serde::Deserialize;

#[derive(Deserialize)]
struct User {
    name: String,
    age: u8,
}

#[post("/user")]
async fn create_user(user: web::Json<User>) -> impl Responder {
    HttpResponse::Ok().body(format!("User {} is {} years old", user.name, user.age))
}

serde를 활용하여 JSON을 Rust 구조체로 파싱하고, 이를 활용한 응답을 만들 수 있습니다.

서버 실행 및 테스트

서버가 실행되면 브라우저나 curl 등으로 테스트할 수 있습니다:


$ cargo run

# GET 요청
$ curl http://localhost:8080/
> Hello, Actix-web!

# 경로 변수 테스트
$ curl http://localhost:8080/hello/Rust
> Hello, Rust!

# POST 요청 (JSON 전송)
$ curl -X POST http://localhost:8080/user \
  -H "Content-Type: application/json" \
  -d '{"name": "Alice", "age": 30}'
> User Alice is 30 years old

actix-web의 장점

  • 성능: Rust 언어의 빠른 실행 속도와 Tokio 기반의 효율적인 비동기 처리
  • 확장성: 라우팅, 미들웨어, 인증 등 다양한 웹 개발 기능 지원
  • 안정성: 타입 시스템과 borrow checker 덕분에 런타임 오류 최소화

결론: actix-web으로 Rust 웹 서버 쉽게 시작하기

Rust의 actix-web은 강력하면서도 간단한 API를 제공해 빠르게 웹 서버를 구축할 수 있습니다. 초보자라도 몇 줄의 코드만으로 REST API나 간단한 웹 애플리케이션을 만들 수 있으며, 확장성과 성능을 모두 잡을 수 있습니다.

실제 서비스를 만들 계획이라면, actix-web의 라우팅, 상태 공유, 에러 처리, 미들웨어 등 고급 기능도 함께 학습해보세요. Rust의 타입 안정성과 actix-web의 유연함은 최고의 조합입니다.