# 문제점
처음 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