[Vapor/Database] Fluent Migration

2023. 10. 20. 22:23·iOS/Vapor
728x90

Migration

Migration은 DB를 위한 버전관리 시스템이다. 생성과 되돌리기가 가능하다.

 

Migration 만들기

1️⃣ Migration 폴더에 Create<SchemaName>.swift와 같은 파일을 생성한다.

 

2️⃣ Migration 프로토콜을 채택하는 구조체를 만든다.

struct CreateMovie: Migration {
    func prepare(on:) { }
    func rever(on:) { }
 }

 

3️⃣ prepare(on:) 메서드를 작성한다.

 

struct CreateMovie: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(Movie.schema)
            .id()
            .field("title", .string, .required)
            .field("genre", .string, .required)
            .field("actor", .string, .required)
            .create()
    }
    
    func revert(on:) { }
}

prepare(on:) 메서드는 DB 스키마 변경(테이블, 필드, 제약 등을 추가 및 삭제), 데이터 수정(모델 인스턴스 생성, 필드 값 업데이트)와 같은 DB를 변화시키는 동작을 수행한다. 

 

4️⃣ revert(on:) 메서드를 작성한다.

struct CreateMovie: Migration {
    func prepare(on:) { }
    
    func revert(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(Movie.schema).delete()
    }
}

revert(on:) 메서드는 DB의 변화를 되돌리는 동작을 수행한다.

 

struct CreateMovie: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(Movie.schema)
            .id()
            .field("title", .string, .required)
            .field("genre", .string, .required)
            .field("actor", .string, .required)
            .create()
    }
    
    func revert(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(Movie.schema).delete()
    }
}

 

5️⃣ 등록(Register)하기

위의 과정을 모두 마치면 정상적으로 Migration을 생성한 것이다. 생성한 Migration을 이용하려면 앱을 구성하는 configure(_:) 함수에 Register 해야한다.

public func configure(_ app: Application) async throws {
    
    ... 
    
    
    app.migrations.add(CreateMovie())
    
    
    ...
    
    try routes(app)
}

configure.swift파일로 이동하여 configure(_:) 함수에 Migration을 add한다.

 

Migrate하기

Migrate를 생성하는 사전 작업을 끝마치고 터미널에 아래의 명령어를 입력하여 Migrate한다.

vapor run migrate

확인해보면 movies 테이블이 잘 생성되어있다.

사전에 작성해 둔 내용도 잘 출력 된다.

 

Revert하기

Migrate 작업을 되돌리려면 터미널에 아래의 명령어를 입력하여 Revert한다.

vapor run migrate --revert

 

'iOS > Vapor' 카테고리의 다른 글

[Vapor/Databse] CRUD 기능 구현하기  (1) 2023.10.21
[Vapor/DataBase] Fluent 모델  (0) 2023.10.19
[Vapor/Database] PostgreSQL 시작하기  (1) 2023.10.18
[Vapor/Server] Fluent란?  (0) 2023.10.18
[Vapor/Server] Vapor 시작하기  (1) 2023.10.16
'iOS/Vapor' 카테고리의 다른 글
  • [Vapor/Databse] CRUD 기능 구현하기
  • [Vapor/DataBase] Fluent 모델
  • [Vapor/Database] PostgreSQL 시작하기
  • [Vapor/Server] Fluent란?
여성일
여성일
  • 여성일
    성일노트
    여성일
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Flyleaf - 독서를 여행처럼
        • 리팩토링
        • 트러블슈팅
        • 개발일지
      • 탭탭 - TapTap
        • 리팩토링
        • 트러블슈팅
        • 개발일지
      • 애플 디벨로퍼 아카데미
        • 챌린지 회고
        • 하루의 날씨
      • Swift Student Challenge 202..
      • AI를 잘쓰는 개발자가 될래요
      • 우리 같이 협업하자
      • 사카마카 (살까말까 고민 될 때는 사카마카)
      • Book2OnNon (모바일 서재)
      • 바꿔조 (환율 계산기)
      • iOS N
        • iOS N
        • Vapor
        • Design Pattern
        • CoreData
        • Tuist
        • RxSwift
        • ReactorKit
        • TCA
      • Swift
        • Swift 기본기
        • UIkit
        • SwiftUI
      • UX, 사용성
      • 원티드 프리온보딩 챌린지 iOS 과정
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.6
    여성일
    [Vapor/Database] Fluent Migration
    상단으로

    티스토리툴바