Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- openapi3
- gradle
- T-OTP
- vuejs
- Spring Security
- SWAGGER
- tasklet
- REACT
- Crawling
- SpringBoot
- MSA
- UsernamePasswordAuthenticationFilter
- SpringRESTDocs
- AuthenticatoinProvide
- Flyway
- Spring REST Docs
- cheerio
- Pender
- axios
- MFA
- preventdefault
- Filter
- stopPropogation
- vue
- OpenStack
- Spring Batch
- 리액트
- JavaScript
- cloud native
- Reduxpender
Archives
- Today
- Total
Miracle Morning, LHWN
14-2. Flyway 사용해보기 - Flyway API (Java) 본문
# 이번에는 API 형태로 Flyway 를 사용해보고, 데이터의 신뢰성을 위해 실행될 때마다 (1) 초기화 Clean - (2) Migrate 의 순서로 수행할 것이다.
이때 Clean 하는 작업을 따로 Class 로 분리하여 Configuration annotation 을 지정한다.
# 먼저 API 형태로 Flyway 를 사용하기 위해 데이터베이스 정보를 설정한다.
// FlywayConfig.java
package com.springJPAPractice.springJPAPractice.Configs;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.flywaydb.core.Flyway;
@Configuration
public class FlywayConfig {
@Value("${spring.datasource.url}")
private String URL;
@Value("${spring.datasource.username}")
private String USERNAME;
@Value("${spring.datasource.password}")
private String PASSWORD;
@Bean
@Profile("test")
public Flyway flyway() {
Flyway flyway = Flyway
.configure()
.dataSource(URL, USERNAME, PASSWORD)
.load();
return flyway;
}
}
# 데이터의 신뢰성을 위해 (= 상태에 따라 실행 결과가 달라지는 것을 방지) Clean 후 Migrate 하는 설정을 작성한다.
// ResetDatabase.java
package com.springJPAPractice.springJPAPractice.Models;
import org.flywaydb.core.Flyway;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInstance;
import org.springframework.beans.factory.annotation.Autowired;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class ResetDatabase {
@Autowired
private Flyway flyway;
@BeforeEach
public void setUp() {
// 1. DB Clean
flyway.clean();
// 2. DB Migrate
flyway.migrate();
}
}
# 위에서 작성한 내용을 토대로 실제로 데이터베이스에 데이터를 주입하고, 제대로 불러와지는지 테스트한다.
여기서는 일단 아래 세 가지 조건을 만족해야 한다.
1. TEST DB 를 바라봐야 한다. > build.gralde 에서 설정 완료
2. 테스트를 수행할 때마다 DB가 초기화되어야 한다. (데이터의 상태에 따라 결과가 달라지는 것을 방지)
> extends ResetDatabase 를 통해 BeforeEach annotation 이 동작하면서 Clean 후 Migrate 를 한다.
3. Book 개체가 DB 에 생성되는지 테스트한다. > 이 테스트 내용은 또 (1) Given (2) When (3) Then 의 순서로 진행한다.
package com.springJPAPractice.springJPAPractice.Models;
import com.springJPAPractice.springJPAPractice.DAO.BookDAO;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
// 모든 클래스패스에 대해 테스트를 수행하는게 아니라 데이터에 관련된 내용만 스캔하여 수행
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class BookTest extends ResetDatabase {
@Autowired
private BookDAO bookDAO;
@Test
public void createSuccess()
// 테스트 수행 단계
// Given (사전 준비) : Book 생성을 위한 사전 준비
Book book = new Book();
book.setId((long) 1);
book.setName("Flyway 정복");
book.setAuthor("LHWN");
// When (테스트 수행 시점) : Book 생성
bookDAO.save(book);
// Then (이후 테스트 검증 결과) : 제대로 생성되었는지 검증
Optional<Book> bookFromDB = bookDAO.findById((long) 1);
assertThat(bookFromDB.get().getId()).isEqualTo(book.getId());
assertThat(bookFromDB.get().getName()).isEqualTo(book.getName());
assertThat(bookFromDB.get().getAuthor()).isEqualTo(book.getAuthor());
}
}
출처 : https://fastcampus.co.kr/courses/204729/clips/
'IT 기술 > [JAVA] Spring Boot' 카테고리의 다른 글
14-3. Flyway 사용해보기 - Java-based Mirgrations (0) | 2021.05.26 |
---|---|
15. Spring REST Docs (0) | 2021.05.26 |
14-1. Flyway 사용해보기 - Gradle Usage (0) | 2021.05.25 |
13. DDL-AUTO 와 Flyway (0) | 2021.05.22 |
12. JPQL, Criteria, Query DSL (0) | 2021.05.17 |
Comments