
Rust 기초 문법을 공부해본 후에 백엔드 프레임워크를 공부하기로 했다.
처음에는 Rocket이 더 쉬워보여서 이걸로 시작하려했으나

학교에서 러스트를 가장 잘하시는 선배에게 물어본 결과
Actix가 더 좋다는 말씀에 그냥 Actix로 시작해보기로 했고
한글로는 정보가 거의 없는 것 같아 공식문서와 예제 코드를 보면서 공부했다.
Database 같은 경우 MariaDB를 사용하였고, DieselORM을 사용하였다.
# diesel cli 설치
cargo install diesel_cli
# 프로젝트 생성
cargo new <project_name>
# Cargo.toml 수정
.
.
.
[dependencies]
actix-web = "4"
diesel = { version = "2.1.0", features = ["mysql", "r2d2"] }
serde = { version = "1.0", features = ["derive"] }
dotenvy = "0.15"
# 프로젝트 폴더에 .env 생성 후 작성
DATABASE_URL=<DBname>://<user>:<passwd>@127.0.0.1:<port>/<database>
# dieselORM 프로젝트 설정
$ diesel setup
$ diesel migration generate <table_name>
migration을 생성하게 되면 프로젝트 폴더에 자동으로 migration 폴더가 생기며 그 안에 up.sql과 down.sql이 생성된다.
up.sql에는 테이블 생성 코드를 작성하고, down.sql에는 테이블 삭제 코드를 작성한다.
-- up.sql
CREATE TABLE users (
id VARCHAR PRIMARY KEY,
name VARCHAR(255) UNIQUE,
password VARCHAR(255)
)
-- down.sql
DROP TABLE users
diesel migration run
위 명령어를 통해 자동으로 schema.rs를 생성해주며 이 안에는 위에서 입력한 sql코드에 맞춰 아래처럼 table코드가 작성되어 있다.
// @generated automatically by Diesel CLI.
diesel::table! {
users (id) {
id -> Varchar,
#[max_length = 255]
name -> Varchar,
#[max_length = 255]
password -> Varchar,
}
}
이제 DB와 데이터를 교환하기 위해 필요한 model을 작성한다.
// model.rs
use diesel::prelude::{Queryable, Insertable};
use serde::{ Deserialize, Serialize };
use crate::schema::users;
#[derive(Debug, Clone, Serialize, Deserialize, Queryable, Insertable)]
#[diesel(table_name = users)]
pub struct User {
pub id: String,
pub name: String,
pub password: String
}
.env에 포함된 DATABASE_URL값을 가지고 DB 연결 코드를 작성한다.
// db.rs
use diesel::MysqlConnection;
use diesel::r2d2;
pub type DbPool = r2d2::Pool<r2d2::ConnectionManager<MysqlConnection>>;
pub fn create_dbconnection() -> DbPool {
let conn_spec = std::env::var("DATABASE_URL").expect("DATABASE_URL should be set");
let manager = r2d2::ConnectionManager::<MysqlConnection>::new(conn_spec);
r2d2::Pool::builder()
.build(manager)
.expect("database URL should be valid path to Database")
}
그리고 이 코드들을 이용하여 API코드를 작성하면 된다.
Rust는 처음 해본거라 부족한 부분이 많은 것 같아 계속 공부해 나가야겠다..
루비 , 러스트 공부 폼 미쳤다