Flyway란?
Flyway는 데이터베이스 스키마를 버전 관리하고 마이그레이션을 관리하는 도구입니다.
(저는 간단하게 Git의 데이터베이스 버전이라고 생각했습니다.)
SQL 파일로 마이그레이션 스크립트를 정의하고, Flyway가 이를 순차적으로 실행하여 데이터베이스 구조를 업데이트 합니다. Flyway를 통해 변경 사항을 추적하거나, DB 구조 변경 과 롤백을 보다 쉽게 할 수 있습니다.
Flyway를 적용한 이유
지금 프로젝트에 Flyway를 적용한 이유는 다음과 같습니다.
(개요)
저희 서비스는 서버가 실행 함과 동시에 약 10만개의 데이터를 DB에 넣는 배치 작업이 이루어지는데, DB 구조가 변경될때 마다 ddl-auto를 create로 설정하여 모든 데이터를 날리고 다시 삽입 하는 것은 굉장히 비효율적이었습니다. 그래서 local에서는 배치 서버를 따로 돌리지 않았기 때문에 기능 확인용으로 create로 ddl-auto를 설정하였지만 dev 환경에서는 validate으로 ddl-auto를 설정했습니다. (production 환경의 ddl-auto는 당연히 none입니다.)
local - hibernate.ddl-auto: create
dev - hibernate.ddl-auto: validate
production - hibernate.ddl-auto: none
(문제 상황)
1. 수동 DDL 사용의 위험 : dev 환경, 실 운영 중인 서버에서 코드 상 DB 구조가 변경 되었을때, 코드 변경과 함께 데이터베이스에 접속하여 구조를 DDL을 통해 직접 변경해야 하는데 이때 휴먼에러 발생할 수 있습니다.
2. 버전 관리 불가 : 데이터 변경 이력을 관리하는 것이 어렵습니다.
3. 개발 환경 간 DB 구조 불일치 : local, dev, production 환경에서 각각 다른 DB를 사용하고 있기 때문에 스키마의 구조의 동기화가 어려워 질수 있습니다.
위와 같은 문제를 겪고 계신 분들은 Flyway를 적용하시는 것을 추천 드립니다.
Flyway 적용 방법
적용 방법은 간단합니다.
1. build.gradle 의존성 추가
# MySQL 8.X 버전인 경우
implementation 'org.flywaydb:flyway-mysql'
# 그 외 경우
implementation 'org.flywaydb:flyway-core'
2. application.yml flyway 활성화
spring:
flyway:
enabled: true // Flyway를 활성화할지 여부
baseline-on-migrate: true // 기존 데이터베이스가 이미 초기화된 경우 true
3. .sql 스크립트 파일 생성
스크립트 파일을 /resources/db/migration 에 작성해 준다.
V{버전명}__{설명}.sql
여기서 스크립트 파일의 네이밍 규칙이 중요한데, 언더바가 2개임을 주의 해야 한다.
결과
실행 결과 생성한 버전 정보가 잘 생성되었습니다.
'기술적 고민 > 자리나따' 카테고리의 다른 글
[자리나따] 대량의 데이터를 빠르게 DB에 넣기 위한 고민 (0) | 2024.11.24 |
---|---|
[자리나따] 열차 여석 알림 기능을 개발하며 한 고민 (feat. 커넥션 풀, 비동기) (2) | 2024.10.06 |
[자리나따] 웹 크롤러를 개발 하며 하는 고민 (2) - 데이터 흐름 (0) | 2024.07.22 |