0Pricing
Learn Rust Coding · 강의

마이그레이션

스키마 발전시키기

마이그레이션은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

마이그레이션은 왜 필요한가요?

마이그레이션은 테이블이나 열 추가처럼 데이터베이스 스키마를 버전별로 변경하는 작업입니다. 마이그레이션을 사용하면 스키마를 안전하고 재현 가능한 방식으로 발전시킬 수 있습니다.

  • 버전 관리에 기록됩니다
  • 정확히 한 번, 순서대로 적용됩니다

sqlx-cli 도구

sqlx는 마이그레이션을 관리하기 위한 CLI를 제공합니다. cargo로 한 번 설치하면 됩니다.

cargo install sqlx-cli --no-default-features --features postgres

마이그레이션 만들기

sqlx migrate add는 migrations/ 폴더에 타임스탬프가 붙은 SQL 파일을 만듭니다. 타임스탬프가 순서를 결정합니다.

sqlx migrate add create_users

마이그레이션 SQL 작성하기

각 마이그레이션 파일에는 스키마를 다음 상태로 변경하는 SQL이 들어 있습니다. 파일마다 하나의 논리적 변경만 넣으세요.

CREATE TABLE users (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT
);

마이그레이션 실행하기

sqlx migrate run은 DATABASE_URL에 지정된 데이터베이스에 대기 중인 모든 마이그레이션을 적용하고, 각각을 추적 테이블에 기록합니다.

sqlx migrate run

추적 테이블

sqlx는 적용된 마이그레이션을 _sqlx_migrations에 기록하고 버전과 체크섬을 저장하므로, 같은 마이그레이션을 다시 적용하거나 변경된 내용을 조용히 받아들이지 않습니다.

되돌릴 수 있는 마이그레이션

분리된 적용 파일과 되돌리기 파일을 만들려면 -r 플래그를 추가합니다. 그러면 롤백할 수 있습니다. sqlx migrate revert는 가장 최근의 되돌리기 파일을 실행합니다.

sqlx migrate add -r create_posts

마이그레이션 추적 모델링하기

마이그레이션 실행기는 마지막 적용 버전보다 새로운 버전만 적용합니다. 이 실행 가능한 예제는 그 결정을 모델링합니다.

fn pending(all: &[u32], applied: u32) -> Vec<u32> {
    all.iter().cloned().filter(|v| *v > applied).collect()
}

fn main() {
    let migrations = [1, 2, 3, 4];
    let last_applied = 2;
    println!("{:?}", pending(&migrations, last_applied));
}

바이너리에 마이그레이션 포함하기

migrate! 매크로는 마이그레이션 폴더를 바이너리에 포함하므로 앱이 시작할 때 마이그레이션을 적용할 수 있습니다. 운영 환경에서 CLI가 필요하지 않습니다.

use sqlx::{Pool, Postgres};

async fn migrate(pool: &Pool<Postgres>) {
    sqlx::migrate!("./migrations")
        .run(pool)
        .await
        .unwrap();
}

체크섬과 변경 불가성

이미 실행된 마이그레이션은 절대 수정하지 마세요. sqlx는 체크섬을 저장하며, 이전 마이그레이션의 내용이 변경되면 진행을 거부합니다. 대신 새 마이그레이션을 추가하세요.

멱등적인 SQL

IF NOT EXISTS로 문을 보호하면 새 환경에서 다시 실행해도 안전하고 예측 가능하게 만들 수 있습니다.

CREATE TABLE IF NOT EXISTS tags (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL UNIQUE
);

빠른 확인

마이그레이션에 대한 이해도를 확인해 보세요.

복습

스키마 마이그레이션을 배웠습니다:

  • 마이그레이션은 순서와 버전이 있는 스키마 변경입니다
  • sqlx migrate add/run/revert로 마이그레이션을 관리합니다
  • 적용된 버전과 체크섬은 _sqlx_migrations에 저장됩니다
  • migrate!는 시작 시 적용할 수 있도록 마이그레이션을 포함합니다
  • 적용된 마이그레이션은 절대 수정하지 말고 새 마이그레이션을 추가하세요

이로써 sqlx 과정이 끝났습니다.

자주 묻는 질문

“마이그레이션” 강의는 무료인가요?

네 — “마이그레이션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

“마이그레이션”에서 뭘 배우나요?

스키마 발전시키기 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“마이그레이션” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 데이터베이스 연결하기
  2. 컴파일 시 검증되는 쿼리
  3. CRUD 연산
  4. 마이그레이션
← Learn Rust Coding(으)로 돌아가기