Home [soldout] Flyway를 활용한 DB 스키마 버전 관리
Post
Cancel

[soldout] Flyway를 활용한 DB 스키마 버전 관리

# 문제점


처음 DB와의 연결을 위해 설계한 테이블 구성은 어플리케이션 확장이나 리팩토링 과정에서 변경될 가능성이 높았고 실제로 많은 변경 소요를 발생시켰습니다. 이 과정에서 프로젝트 진행 과정에 따른 스키마에 대한 버저닝을 위한 관리 툴이 필요하다고 생각했습니다.

# 해결방안


Flyway

Flyway는 오픈소스 DB 마이그레이션 도구로, DB 형상관리를 위한 도구입니다.

Git이 소스코드의 형상 관리를 위한 도구인 것 처럼, Flyway는 Git처럼 형상관리 도구인데, DB 형상관리를 할 때 쓰는 도구라고 이해한다면 쉬울 것입니다.

결국 Flyway를 통해 쉽고 안전하게 변경사항을 반영할 수 있고, 스키마 버전 관리가 되기 때문에 어떤 변경사항이 있었는지 한눈에 볼 수 있다는 장점이 있습니다.

적용 코드

V1__init.sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE TABLE user (
  user_id INT NOT NULL AUTO_INCREMENT,
  email VARCHAR(255),
  password VARCHAR(255),
  name VARCHAR(255),
  phone VARCHAR(255),
  address VARCHAR(255),
  PRIMARY KEY (user_id)
  );

CREATE TABLE product (
  product_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(255),
  brand VARCHAR(255),
  modelName VARCHAR(255),
  releaseDay DATE,
  color VARCHAR(255),
  PRIMARY KEY (product_id)
);

CREATE TABLE image (
  image_id INT NOT NULL AUTO_INCREMENT,
  product_id INT,
  link VARCHAR(255),
  PRIMARY KEY (image_id),
  FOREIGN KEY (product_id) REFERENCES product (product_id)
);

파일명에서 알 수 있듯이 가장 처음 테이블을 생성하기 위한 sql 파일입니다. Flyway는 해당 파일을 어플리케이션 서버 실행 과정에서 읽어 테이블을 생성해줍니다.

V2__create_table_order.sql

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `order` (
  order_id INT NOT NULL AUTO_INCREMENT,
  user_id INT,
  product_id INT,
  size INT,
  price INT,
	order_type VARCHAR(255),
	expiration_period VARCHAR(255),
	expiration_day DATE,
  PRIMARY KEY (order_id),
  FOREIGN KEY (user_id) REFERENCES user (user_id),
  FOREIGN KEY (product_id) REFERENCES product (product_id)
);

추가적으로 테이블을 생성하고 싶을 경우, 파일명명 규칙에 맞게 V2 파일을 생성하고 테이블 Create 문을 작성하면 새로운 테이블 생성이 가능하며 버저닝 관리까지도 가능합니다.

V2.1__alter_table_order.sql

1
2
ALTER TABLE `order`
DROP expiration_period;

마지막으로 테이블에 대한 수정소요가 발생했을 경우에도 명명규칙에 맞게 파일을 생성하고 파일명을 통해 수정 내용을 알 수 있도록 작성해 관리할 수 있습니다.

# 마치며


이처럼 Flyway를 통해 생성 및 변경 내용에 대한 쿼리문만으로 작성된 파일들을 버전별로 구분해 관리할 수 있었고 파일명을 통해 변경 내용을 명시할 수 있어 스키마 관리 측면에서 매우 편리한 설계를 할 수 있었습니다. 또한 버전별 관리를 통해 CREATE, ALTER, DROP과 같은 테이블 관련 쿼리문을 직접 작성해보며 DB 테이블 조작에 대해 익숙해 질 수 있었습니다.

# 참고자료


https://ecsimsw.tistory.com/entry/Flyway%EB%A1%9C-DB-Migration

This post is licensed under CC BY 4.0 by the author.

[soldout] Elasticsearch 사용한 APM 환경 구성

[soldout] 로그인 인증 방식 선정