오늘의 추천 곡
소스 코드와 마찬가지로 DB의 형상 관리도 중요한 화두다.
CI/CD를 준비하는 과정에서 DB로 인해 EC2가 뻗지 않게끔 하기 위한 방법을 공부해보다가 알게된 기술인 Flyway에 대해서 설명해보고자 한다.
아니 사실은 Flyway에 대한 설명이라기 보다는 일종의 세팅 방법을 공유해보고자 한다.
Flyway를 사용할 때 생길 수 있는 문제
보통 처음 Flyway를 쓰면 순차적인 숫자를 사용한다.
- V1__init.sql
- V2__add_user.sql
혼자 개발할 땐 문제가 없지만, 여러 팀원들이 각자의 기능을 개발한다면?
팀원 A: "회원 기능 때문에 V3__add_member.sql 만들어서 푸시했어요!"
팀원 B: "어? 저도 게시판 때문에 V3__add_post.sql 만들었는데요?"
= Git 충돌(Conflict) 발생
이러한 상황을 방지하고자 간단한 타임스탬프 전략을 이용해볼 수 있겠다.
타임스탬프(Timestamp) 전략
Flyway는 버전명(파일명)을 문자열 기준으로 정렬해서 실행한다.
따라서 시간이 흐르는 순서(오름차순)대로 파일명을 지으면 충돌 없이 자연스럽게 순서를 보장받을 수 있는 것.
따라서 기존의 'Vx' 와 같은 네이밍 대신 아래의 네이밍 컨벤션을 따르면 된다.
- 포맷: V{년월일시분초}__{설명}.sql
- 예시: V20260121143000__create_member_table.sql
- 주의사항: V 뒤에 숫자, 그리고 언더바 2개(__)는 필수
인텔리제이로 템플릿화 시키기
사실상 이 기술을 도입했을 때 생길 수 있는 에러는 99% 휴먼 에러일 것이다.
기존 DB 스키마에서 변경이 생겼음에도 sql 파일을 만들지 않거나, 만들었는데 sql 파일에 오타가 있다거나, 파일 네이밍을 할 때 오타를 낸다거나..
이런 에러를 방지하기 위해서는 템플릿이 있으면 좋지 않을까?
개발 초기에 어떤 환경들을 얼만큼 세팅하면 좋을지 계속 고민하고 있는데, 이런 사소한 것들도 신경써서 챙겨주면 팀원들의 개발 효율이 대략 1.00000123배는 증가하지 않을까?
1. 설정 메뉴 진입
- Windows: File → Settings (Ctrl+Alt+S)
- Mac: IntelliJ IDEA → Settings (Cmd+,)
- 이동: Editor → File and Code Templates
- 변경: 상단 Scheme를 Default → Project

2. 템플릿 추가
- Files 탭에서 + 버튼 클릭
- Name: 원하는 이름
- Extension: sql
- 내용(File name): 아래 코드 붙여넣기 (본문에 넣는 거 아님)
V${YEAR}${MONTH}${DAY}${HOUR}${MINUTE}${SECOND}__${DESCRIPTION}

이후에는 프로젝트 트리 중 .idea 안을 확인해보면, 방금 만든 컨벤션이 생겨난 것을 알 수 있음.

또한 대부분의 프로젝트에서 .idea는 .gitignore에 지정되어 있을테니까 Git이 추적할 수 있게 따로 빼줘야한다.

.gitignore에 해당 줄을 추가해주면 끝!
!.idea/fileTemplates/
3. 사용 방법
- db/migration 폴더 우클릭 → New → Flyway Migration 클릭
- 나오는 창에 설명(Description)만 입력 (예: add_profile_image)



이제 resources/db/migration 하위에 sql 파일을 생성할 때마다 해당 템플릿을 사용해서 행복 개발을 할 수 있게 됐다.
만약 New를 눌러서 확인해봤는데 템플릿이 없다면


체크 박스 체크하지 말고 그냥 Invalidate and Restart를 눌러주면 될 것임
그리고 템플릿을 만드는 사람의 입장에서, .ft가 아니라 .sql로만 생성된다면, 아까 sql 을 입력했던 곳에 sql.ft 로 넣어주면 해결
여러분 저 됐어요!
됐어요!
ㅎ
