Flyway란 무엇일까? (이론 편)

최동근·2022년 12월 14일
0

스프링부트

목록 보기
6/13
post-thumbnail

오늘은 Flyway 라이브러리를 통해 DDL 형상관리 하는 법을 알아보도록 합시다!🚀

💡 DataBase Migration(데이터 마이그레이션)

스키마 마이그레이션(데이터 베이스 마이그레이션, 데이터베이스 변경 관리) 는 관계형 데이터베이스(RDBMS) 스키마에 대한 증분, 가역적 변경 및 버전 제어를 의미한다.
스키마 마이그레이션은 해당 데이터베이스의 스키마를 최신 또는 이전 버전으로 업데이트하거나 되돌릴 필요가 있을 때마다 데이터베이스에서 수행됩니다.

위에 게시된 글은 데이터 마이그레이션의 정의 입니다. 글로 이해하기에는 너무 어렵죠?
자, 머릿속에 Git을 떠올려봅시다.

Git은 컴퓨터 파일의 변경사항을 추적하고 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다.

Git의 정의입니다. 저희가 실제 사용하는 Git&GitHub 관점에서 생각해봅시다.
IDEA 에서 특정 부분을 완성했다면, 저희는 Local Remote Repository인 Github에 변경사항을 message와 함께 게시합니다. 이를 통해 다양한 사용자와 공유할 수 있으며, 변경 사항들을 추적하고 되돌릴 수 있죠!💡

자 더 복잡해졌다구요? 쉽게 정리하자면 스키마 마이그레이션은 데이터베이스에 관련된 버전 관리(Git에서 하는 행위)를 하신다고 생각하면 되며, 이를 더 쉽게 해주는 고성능의 툴이 바로 Flyway입니다. Git의 데이터베이스 형상 관리 버전이라고 생각하면 쉽겠군요!🥸

해당 이미지는 flyway 공식 홈페이지에 나와있는 이미지 입니다.
DDL 형상관리를 더 구체적으로 이해해 봅시다!
Axel 과 Christian 이 별개의 DDL을 만들고 있습니다. 그리고 서버로 배포할 때 자동화 빌드 과정에서 함께 통합하여 DDL을 실행하고 있습니다.
이처럼 데이터베이스 마이그레이션은 DB 작업에 있어서 중요한 작업입니다.

데이터베이스 마이그레이션이 필요한 이유
1. 여러 작업자 간 동일한 데이터베이스 환경을 구성하기 위함이다.
2. DB 스키마에 문제가 발생했을 때 해결을 효율적으로 할 수 있다.
3. Entity 클래스 변화에 DB 스키마가 바로 반영되기에, 실수로 인해 데이터 손실을 예방할 수 있다.

flyway는 다양한 방법으로 실행할 수 있습니다. 공식 사이트에 따르면 gradle, maven, CLI, 그리고 JAVA API입니다. 오늘은 Spring Boot로 서버를 띄울때 자동으로 DDL이 실행될 수 있도록 해보겠습니다.

💡 Flyway의 7가지 명령어

개발을 하면서 다양한 라이브러리,프레임워크,모듈 등을 접할텐데요
이해가 안된다면 항상 document를 참조하는 습관을 기릅시다!
Flyway 공식 문서 를 보고 다음 글을 봐주세요!👨‍💻

  1. Migrate

flyway 워크플로우의 핵심입니다.
사용 가능한 데이터베이스 마이그레이션을 위해 파일 시스템 혹은 클래스 경로를 스캔합니다.
기존 버전과 비교하여 차이를 발견하면 데이터베이스를 마이그레이션 하여 차이를 좁힙니다.

이미지를 보면 알겠지만 왼쪽 데이터베이스 상태는 version1 이고 스캔하여 version2로 마이그레이션 한 결과를 오른쪽 이미지에서 확인 할 수 있습니다. 2개의 빨간색 테이블이 추가된 테이블이라는 것을 알 수 있겠죠?

  1. Clean


clean 명령어는 개발과 테스트에 큰 도움이 됩니다. 구성된 스키마를 완전히 삭제하여 효과적으로 새로운 시작을 할 수 있습니다. 모든 개체(테이블, 뷰, 프로시저 등)가 삭제됩니다.
그러나, 운영 단계에서는 절때 사용하면 안되겠죠?🚨

  1. Info


info 명령어는 모든 데이터베이스 마이그레이션에 대한 세부 정보 및 상태 정보를 보여줍니다.
위에 이미지를 보시면 3개의 sql 파일을 테이블로 보여주고 있네요? 카테고리,버전,설명,설치 날짜, 성공 여부등의 상세한 정보를 확인 할 수 있습니다.👀

  1. Validate


validate 명령어는 사용 가능한 데이터마이그레이션에 대해 적용된 마이그레이션의 유효성을 검사합니다. 유효성 검사가 왜 필요 할까요? 정답은 이를 통해 스키마를 안정적으로 재생성하지 못하게 할 수 있는 우발적인 변경 사항을 감지하는 데 매우 유용하기 때문입니다.

  1. Undo


undo 명령어는 가장 최근에 적용된 데이터베이스 마이그레이션 버전을 취소합니다.
해당 명령어는 정말 자주 사용되는 명령어 같죠? 하지만, flyway 라이브러리에도 버전이 있고, 돈을 지불해야 하는 Teams 버전에서만 사용 가능합니다. 😭

  1. BaseLine


baseline 명령어는 baseline version 까지의 모든 데이터베이스 마이그레이션을 제외하고 그 이후 부터의 데이터 베이스에 flyway 의 기능을 적용합니다.
해당 명령어를 통해 baseline 전 까지의 모든 마이그레이션을 무시하게 됩니다.
이는 오래되고 관련이 없을 수 있는 많은 스크립트를 처리하는 오버헤드를 줄일 수 있습니다.

  1. Repair

repair 명령어는 스키마 기록 테이블을 복구합니다.
이는 스키마 기록 테이블의 문제를 해결하는 도구로 사용됩니다.

💡 Convention over Configuration(Coc)

convention over configuration? 이건 또 뭐야.. 당연합니다 이런 반응 😭
개발자가 되기란 참 어려운 것 같아요. 하지만 포기하지 말고 검색해보죠! 저희는 구글 이라는 든든한 지원군이 있잖아요?!

Convention over Configuration
설정보다 관습 또는 구성보다 관습 이라고 해석되는 이 용어는 프레임워크를 사용하는 개발자가
유연성을 잃지 말고 취해야 하는 결정의 수를 줄이기 위해 시도하는 소프트웨어 디자인 패러다임입니다.

쉽게 얘기해서 관습(Convention) 을 지키면서 개발하는 패러다임을 일컫는다고 생각하면 되요!
flyway 라이브러리를 사용함에 있어서도 CoC 가 적용됩니다!

해당 이미지도 flayway 공식 문서에서 가져온 이미지 입니다. 해당 이미지는 SQL 파일 이름을 설정하는 방법(convention) 입니다
대표적으로 5가지의 요소를 가지게 됩니다 🔥

  • Prefix - V, U, R 중 하나를 입력하게 됩니다. V는 Verion, U는 Undo, R은 Repeatable 입니다.

  • Version - 버전 정보입니다. 정수, 소수, 날짜 등이 가능합니다.

  • Seperator - __ ( underscore 2개를 이용합니다. )

  • Description - 추가되는 설명입니다. _ (underscore)가 space를 대신합니다.

  • Suffix - 파일 확장자를 나타냅니다.

예를 들어볼까요?

이미지를 보면 알 수 있듯이, 3개의 DDl 파일이 있습니다. 해당 파일에는 table을 생성하는 DDl이 하나씩 들어있습니다.
이렇게 파일까지 완성하면 기본적인 flyway 기능을 활용할 수 있습니다.

참조

flyway document
CoC에 관하여
Flyway사용 이유

➡️ Flyway 실습편 까지 꼭 학습합시다!🚀

profile
비즈니스가치를추구하는개발자

0개의 댓글