[Diesel] 시작: 기본 설정 및 테이블 생성

[원본 링크]

사용할 데이터베이스는 PostgreSQL이다.
이외에도 mysql이랑 한가지 더 지원되긴 하는데, mysql은 윈도우에선 지원하지 않는 것 같다.

postgresql이 없다면 먼저 설치한다.
https://blog.naver.com/sssang97

그리고 사용할 데이터베이스의 URL을, 환경변수로 설정한다. 이름은 DATABASE_URL이어야 한다.
URL 형식은 postgres://사용자명:패스워드@localhost/데이터베이스명으로 하면 된다.

됐으면 프로젝트를 만든 다음, 의존성에 디젤을 추가한다.
dotenv는 저 환경변수에 접근하기 위한거다.

그리고 편리한 관리를 위해서, 전용 커맨드툴을 설치한다.

다 깔렸으면, 방금 설치한 커맨드툴로 디젤 관리 파일을 만든다.
diesel setup이면 된다.

그럼 이렇게 만들어질 것이다.



테이블 마이그레이션하기

그럼 이제 데이터베이스에 테이블을 생성해보자.
장고 같은 프레임워크에선 모델 클래스를 바탕으로 테이블을 자동생성해주는 뛰어난 ORM 기능을 제공해주는데, 디젤엔 아직 그런게 없다... 그래서 직접 테이블 쿼리문을 작성해줘야 한다.

그래도 약간의 보조기능을 제공하긴 한다. migration generate 명령을 사용하면 migration 폴더에 테이블생성과 삭제용 sql 파일을 자동생성해준다.

그럼 저기다가 각각 테이블 생성과 삭제문을 써주면 된다.


잘 작성됐다면, migration run 명령으로 저걸 바로 반영시킬 수 있다.

오류 없이 잘 돌아갔다면,

실제로 데이터베이스에도 잘 생성됐을 것이다.

뭔가 테이블 생성이 잘못됐다면, up.sql을 수정하고 migration redo를 하면 된다.
그럼 down.sql을 수행해서 삭제한 후, 다시 up.sql을 돌려서 생성할 것이다.



데이터베이스 연결하기

데이터베이스에 연결하는 건 간단하다.

Connection 클래스들에는 establilsh 정적 생성 메서드들이 있는데, 여기에 데이터베이스 URL 문자열을 넣어주면 Result로 감싸서 반환해준다,
근데 보통은 데이터베이스 URL을 환경변수로 설정해놓으니까, 환경변수 값을 가져와서 집어넣는 게 좋다.

이렇게.

코드는 이렇다.

use diesel::prelude::*;

pub fn establish_connection() -> PgConnection {
    dotenv::dotenv().ok();

    let database_url = std::env::var("DATABASE_URL")
        .expect("DATABASE_URL must be set");
    PgConnection::establish(&database_url)
        .expect(&format!("Error connecting to {}", database_url))
}

Connection 객체가 잘 생성되면, 그걸 갖다가 읽기나 쓰기 작업을 할 수 있다.
이에 대한건 다음 포스트에서 다루겠다.


참조
http://diesel.rs/guides/getting-started/