본문 바로가기
WIKI 기술 지식 베이스

Turso + Actix

원문 보기 위키 갱신

Actix 프로젝트에도 몇 분이면 Turso를 붙일 수 있어요. 이 가이드는 자격 증명 준비부터 libsql 크레이트 추가, 임베디드 레플리카로 SQL을 실행하는 웹 핸들러 작성까지 안내해요.

출처: 문서

본문

시작 전 준비물

시작하기 전에 다음을 확인해 주세요.

단계별 진행

1. 데이터베이스 자격 증명 가져오기

계속하려면 기존 데이터베이스가 필요해요. 없다면 먼저 데이터베이스를 만들어 주세요. 데이터베이스 URL과 인증 토큰을 확보한 뒤에는 환경 변수로 저장해 두는 편이 좋아요.

2. 프로젝트에 libsql 크레이트 추가하기

cargo add libsql

참고: 선택 사항으로, .env 파일을 다룰 때 도움이 되는 dotenvy 같은 패키지를 추가할 수도 있어요.

cargo add dotenvy

3. SQL 실행하기

#[tokio::main]
#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().route("/", web::get().to(index)).route("/items", web::get().to(get_items)))
        .bind(("127.0.0.1", 8080))?
        .run()
        .await
}

async fn get_items() -> Result<HttpResponse, Error> {
    dotenv().expect(".env file not found");

    let db_url = env::var("TURSO_DATABASE_URL").unwrap();
    let auth_token = env::var("TURSO_AUTH_TOKEN").unwrap();
    let db_file = env::var("LOCAL_DB").unwrap();

    let db = Builder::new_remote_replica(db_file, url, auth_token)
    .read_your_writes(true)
    .build()
    .await
    .unwrap();

    let conn = db.connect().unwrap();

    let mut results = conn.query("SELECT * FROM items", ()).await.unwrap();

    let mut items: Vec<T> = Vec::new();

    while let Some(row) = results.next().await.unwrap() {
        let item: Item = Item {
            task: row.get(0).unwrap(),
        };
        items.push(item);
    }

    Ok(HttpResponse::Ok().json(items))
}

예제 (Examples)

더 알아보기 (Learn more)