Skip to main content
Sonamu는 Entity 정의를 기반으로 데이터베이스 마이그레이션을 자동으로 생성합니다.

마이그레이션 개요

자동 생성

Entity → Migration 수동 작성 불필요

버전 관리

타임스탬프 기반 순차 실행 보장

Up/Down

적용과 롤백 양방향 지원

Knex 기반

표준 Knex API 호환성 보장

마이그레이션 생성 흐름

Entity에서 Migration으로

1. Entity 정의

2. 자동 생성된 Migration

Migration 파일명: {타임스탬프}_{작업}_{테이블명}.ts - 타임스탬프: YYYYMMDDHHmmss 형식 - 작업: create, alter, foreign, drop 등 - 테이블명: 언더스코어 구분

Migration 파일 구조

up 함수 - 변경 적용

down 함수 - 변경 롤백

down 함수는 필수입니다!롤백을 위해 반드시 up의 역작업을 정의해야 합니다.

생성되는 Migration 유형

CREATE TABLE

ALTER TABLE - 컬럼 추가

ALTER TABLE - 컬럼 삭제

FOREIGN KEY 추가

데이터베이스 비교

Sonamu는 현재 DB 스키마와 Entity를 비교하여 차이점을 감지합니다:

비교 대상

  1. 테이블: 존재 여부, 이름
  2. 컬럼: 타입, 길이, nullable, default
  3. 인덱스: unique, index, 복합 인덱스
  4. 외래 키: 참조 테이블, onUpdate, onDelete
  5. 제약 조건: CHECK, DEFAULT 등

차이점 감지

Migration 실행 순서

1. 타임스탬프 기반 정렬

2. 의존성 고려

외래 키는 별도 Migration으로 생성됩니다!CREATE TABLE에서는 컬럼만 생성하고, 외래 키 제약은 나중에 별도 Migration으로 추가됩니다.

실행 추적

knex_migrations 테이블

Knex는 실행된 Migration을 추적합니다:
  • batch: 함께 실행된 그룹 (롤백 단위)
  • migration_time: 실행 시간

Entity 타입별 Migration

기본 타입

관계 타입

인덱스

where는 PostgreSQL partial index를 만들기 위한 raw SQL predicate입니다. Sonamu는 DB introspection으로 읽은 predicate와 entity.json의 predicate를 비교하여 같은 조건이면 추가 migration을 생성하지 않습니다.

고급 기능

Generated 컬럼

전문 검색 인덱스

벡터 검색 인덱스

다음 단계

마이그레이션 생성

Sonamu UI에서 생성하기

마이그레이션 실행

migrate run 명령어

롤백하기

변경 사항 되돌리기

Entity 정의

Entity 구조 이해하기