git 으로 source code 를 관리할수 있는건 누구나 다 아는 사실. 하지만 db는 할수 없다. 이 처럼 db의 형상관리를 할수 는 녀석이 바로 Flyway 다 .
공식사이트에 기재되어 있는 flyway 작동방식을 설명해주는 많이 보았을 이미지 이다.
flyway를 잘 사용하면 이렇게 Axel 과 Christian 라는 개발자 각자 필요한 DDL 을 만들고 배포할수 잇다. 공식사이트 소개를 예로 들자면 gradle, maven, CLI, java api 를 통하여 flyway 를 실행할수 있다고 하는데 이글에서 springboot 으로 실행하는 방법을 알아보자.
publicinterfaceUserService {intcreate(String name,Integer age);List<User> getByName(String name);intdeleteByName(String name);intgetAllUsers();intdeleteAllUsers();}@ServicepublicclassUserServiceImplimplementsUserService {privateJdbcTemplate jdbcTemplate;UserServiceImpl(JdbcTemplate jdbcTemplate) {this.jdbcTemplate= jdbcTemplate; } @Overridepublicintcreate(String name,Integer age) {returnjdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age); } @OverridepublicList<User> getByName(String name) {List<User> users =jdbcTemplate.query("select * from USER where NAME = ?", (resultSet, i) -> {User user =newUser();user.setId(resultSet.getLong("ID"));user.setName(resultSet.getString("NAME"));user.setAge(resultSet.getInt("AGE"));return user; }, name);return users; } @OverridepublicintdeleteByName(String name) {returnjdbcTemplate.update("delete from USER where NAME = ?", name); } @OverridepublicintgetAllUsers() {returnjdbcTemplate.queryForObject("select count(1) from USER",Integer.class); } @OverridepublicintdeleteAllUsers() {returnjdbcTemplate.update("delete from USER"); }}
테스트 코드 작성
@Slf4j@SpringBootTestpublicclassFlywayDemoApplicationTests { @AutowiredprivateUserService userSerivce; @Testpublicvoidtest() throwsException {userSerivce.deleteAllUsers();userSerivce.create("Tom",10);userSerivce.create("Mike",11);userSerivce.create("Didispace",30);userSerivce.create("Oscar",21);userSerivce.create("Linda",17);// Oscar 라는 이름을 가진 사용자 조회 , 나이 가 정확한지 확인.List<User> userList =userSerivce.getByName("Oscar");Assertions.assertEquals(21,userList.get(0).getAge().intValue());// 5명 있음.Assertions.assertEquals(5,userSerivce.getAllUsers());// 2명 삭제.userSerivce.deleteByName("Tom");userSerivce.deleteByName("Mike");// 아직 5명 있을걸?Assertions.assertEquals(3,userSerivce.getAllUsers()); }}
테스트 코드 실행 결과
디비테이블 확인 2개 추가 된걸 확인 할수 있다.
user 현재 테이블
flyway_schema_history : flyway가 관리하고 있는 테이블. 해당 테이블에 수행된 .sql 스크립트 내역들을 기재하고 있다.