1 of 20

Flyway 가이드

Flyway 가이드

2 of 20

Flyway 가이드

기존 migration 방식 - 1) GUI 편집

3 of 20

Flyway 가이드

기존 migration 방식 - 2) Compare

4 of 20

Flyway 가이드

기존 migration 방식 - 3) Update시 sql 자동 작성. Git 으로 관리

5 of 20

Flyway 가이드

Migration 방법 3가지

GORM만 사용

Goose, golang-migrate 등�Golang 특화 라이브러리 사용

Redgate flyway 툴 사용

goose 또는 golang-migrate

6 of 20

Flyway 가이드

GORM만 사용했을 때

+

자동으로 DB에 테이블 생성

작은 프로젝트에서는

GORM만 써도 충분

AutoMigrate는

칼럼 삭제 반영 제대로 안됨.

7 of 20

Flyway 가이드

Goose/golang-migrate VS flyway

8 of 20

Flyway 가이드

택한 방법 : 하이브리드(Flyway + GORM)

데이터만

CRUD

테이블

CRUD

9 of 20

Flyway 가이드

택한 방법 : 하이브리드(Flyway + GORM)

10 of 20

Flyway 가이드

Migrate 실행법 - 1) DB 생성

Database는 flyway 거치지 않고

직접 생성하도록 함.

Owner는 도커 컨테이너에 미리 설정된

Dbadmin으로 지정

dbadmin : 테이블 CRUD

dbuser : 데이터 CRUD

11 of 20

Flyway 가이드

Migrate 실행법 - 2) SQL 작성

VYYMMDD_N__description.sql

N은 1~9 한자리 자연수

숫자로 버전 구분하므로 네이밍 중요

1.10보다 1.2가 다음

12 of 20

Flyway 가이드

Migrate 실행법 - 3) Conf 파일 설정

접속 정보 -> 명령어 매번 치기 번거로움.

미리 flyway.conf 파일에 적어놨다가

나중에 불러주면 됨.

명령어 치기 전

미리 db가 만들어져 있어야 함.

(접속할 때 꼭 db 정보가 필요)

13 of 20

Flyway 가이드

Migrate 실행법 - 4) migrate 명령어 실행

접속 정보 적어놓은 파일 경로 적고

Migrate 명령어 실행

14 of 20

Flyway 가이드

Migration 실행시 DB에서 실제로 일어나는 일

직접 시연

  1. 버전은 항상 오름차순 (숫자 작거나 같으면 fail)
  2. 이미 migration 된 파일은 건너뛰고 새로 생긴 파일만 진행함.
  3. 이미 migration 된 파일을 수정하고 다시 migrate 하면 안됨.
  4. 이전에 migration 됐던 파일이 꼭 폴더 내에 있어야 됨.

15 of 20

Flyway 가이드

Migrate 초기화 방법

Migrate 명령어로 실행한 모든것을 전부 리셋해버림..

내가 만든 테이블도 없어지고 flyway_schema_history 도 없어짐.

운영 환경에서 사용자 데이터 들어오고 난 다음에는 절대 사용 금지!!!!

개발 환경에서만

직접 시연

16 of 20

Flyway 가이드

서비스마다 Database를 따로 가져가기

Cluster

Database

Database

Schema

Schema

Table

Table

Table

Table

17 of 20

Flyway 가이드

Submodule 사용법

메인 레포

DB 레포

업데이트 해주기

메인 레포에서 최초 1회 실행

18 of 20

Flyway 가이드

Submodule 사용법

서비스

DB

계정 서비스

계정 DB

알림 서비스

알림 DB

문제 서비스

문제 DB

구매 서비스

구매 DB

19 of 20

Flyway 가이드

메인 템플릿과 DB 템플릿을 따로 포크하고 둘을 연결해줘야 합니다.

서비스

DB

Go

템플릿

DB

템플릿

20 of 20

Flyway 가이드

Flyway 사용법