마이그레이션
스키마 발전시키기
마이그레이션은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.