Flyway로 데이터베이스 형상관리를 해보자
2024. 2. 13. 16:58ㆍWeb/spring-boot
1. Flyway
- 데이터베이스 마이그레이션 툴
- 데이터베이스 변경사항 추적 및 업데이트나 롤백을 쉽게 할 수 있도록 도와주는 도구
- 보통 운영환경, 개발환경, 로컬환경 에서 각자의 DB를 갖고있는데, 이 모든 환경에서 DB의 Schema를 맞추기 위함
- 데이터베이스 Schema의 변경 이력이 남는 이점이 있고, 변경작업을 안전하게 할 수 있다.
- 만약 코드 상 스키마 변경이 데이터베이스에 반영되지 않은 이슈를 예방할 수 있다.
- 배포하는 순간 flyway가 스키마를 알아서 수정하여 준다.
2. 동작 방식
- flyway 를 적용하게 되면 fly_way_schema_history 라는 테이블이 생성되게 됩니다.
- 이 테이블은 데이터베이스의 상태를 추적하는 데 사용됩니다.
- 마이그레이션은 버전 기준으로 정렬되고 순서대로 적용됩니다.
3. 동작 테스트
- maven에 dependency 추가
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
- application.yml 에 설정 추가 ( h2 DB사용 )
spring:
h2:
console:
enabled: true
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:flyway-sample;MODE=MYSQL
username: root
password: password
jpa:
hibernate:
ddl-auto: validate //이 옵션으로 flyway 정상동작 확인
database-platform: org.hibernate.dialect.MySQL8Dialect
defer-datasource-initialization: false
properties:
hibernate:
show_sql: true
format_sql: true
flyway:
enabled: true //flyway 활성화
- JPA entity 정의
@Entity
@Table(name = "member")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String password;
private String name;
private String email;
}
- dependency를 추가하여 주면 resource 폴더에 db/migration 폴더가 생성 됩니다.
- 첫번째 DB 스크립트 작성
CREATE TABLE member (
id BIGINT AUTO_INCREMENT,
password VARCHAR(255),
name VARCHAR(255),
email VARCHAR(255),
PRIMARY KEY (id)
)
- 이렇게 해서 서버 동작 후 DB 확인
- 이제 entity를 수정하고 재동작 해보겠습니다.
@Entity
@Table(name = "member")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String password;
private String name;
private String email;
private String phone; //필드 추가
}
Schema-validation: missing column [contact] in table [member]
- ddl-auto 를 validate로 설정했기 때문에 실제 테이블에는 phone 컬럼이 존재하지 않기 때문에 스키마가 불일치 하여 에러가 발생했습니다.
- 다음으로 테이블의 스키마와 엔티티가 일치하도록 스크립트를 추가하도록 합니다.
ALTER TABLE member ADD COLUMN phone varchar(255)
- V1.1__add_phone.sql 이라는 스크립트를 db/migrantion 폴더에 추가하여줍니다.
4. 마이그레이션 스크립트 명명 규칙
- Flyway에서 기본적으로 스크립트 파일은 숫자가 작은버전부터 큰 순서대로 실행됩니다.
- V{버전}__{디스크립션}.sql 형식으로 스크립트를 작성해 주면 됩니다.
'Web > spring-boot' 카테고리의 다른 글
WireMock을 이용하여 서버간 통신 테스트 (0) | 2024.02.19 |
---|---|
MapStruct 편리한 객체 간 맵핑 (0) | 2024.02.14 |
Fixture Monkey로 테스트에서 객체를 자동으로 생성해보자 (1) | 2024.02.13 |
[Spring] @Constraint로 커스텀 벨리데이션 만들기 (0) | 2022.12.07 |
[JPA] 스프링 JPA 다중DB 사용하기 (0) | 2022.11.28 |