From 7d8c1a99cd329652a71f412d0721aa91c81d51a9 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Sun, 21 Dec 2025 20:31:55 +0900 Subject: [PATCH 1/5] =?UTF-8?q?test:=20flyway=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=EB=A5=BC=20=EA=B2=80=EC=A6=9D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/FlywayMigrationTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java diff --git a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java new file mode 100644 index 000000000..0aedb18b9 --- /dev/null +++ b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java @@ -0,0 +1,19 @@ +package com.example.solidconnection.database; + +import com.example.solidconnection.support.TestContainerSpringBootTest; +import org.junit.jupiter.api.Test; +import org.springframework.test.context.TestPropertySource; + +@TestContainerSpringBootTest +@TestPropertySource(properties = { + "spring.flyway.enabled=true", + "spring.flyway.baseline-on-migrate=true", + "spring.jpa.hibernate.ddl-auto=validate" +}) +class FlywayMigrationTest { + + @Test + void flyway_스크립트가_정상적으로_수행되는지_확인한다() { + + } +} From 97e83090071d2f7a37d6b875647c769035d27b57 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Sun, 21 Dec 2025 23:21:28 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20DirtiesContext=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=EC=9D=84=20=ED=86=B5=ED=95=B4=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=BB=A8=ED=85=8D=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=ED=8F=90=EA=B8=B0=ED=95=98=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 새로운 MySQL 환경에서 마이그레이션이 이루어지도록 수정 --- .../example/solidconnection/database/FlywayMigrationTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java index 0aedb18b9..674dd7865 100644 --- a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java +++ b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java @@ -2,14 +2,18 @@ import com.example.solidconnection.support.TestContainerSpringBootTest; import org.junit.jupiter.api.Test; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.TestPropertySource; +import static org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_CLASS; + @TestContainerSpringBootTest @TestPropertySource(properties = { "spring.flyway.enabled=true", "spring.flyway.baseline-on-migrate=true", "spring.jpa.hibernate.ddl-auto=validate" }) +@DirtiesContext(classMode = BEFORE_CLASS) class FlywayMigrationTest { @Test From 089076aac20ad4ac6433e9455e242463f6a4ec2b Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Sun, 21 Dec 2025 23:38:11 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20flyway=20=EA=B2=80=EC=A6=9D=EC=9A=A9?= =?UTF-8?q?=EC=9D=98=20=EB=B3=84=EB=8F=84=EC=9D=98=20MySQL=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=84=88=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/FlywayMigrationTest.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java index 674dd7865..247a48bbd 100644 --- a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java +++ b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java @@ -1,23 +1,45 @@ package com.example.solidconnection.database; -import com.example.solidconnection.support.TestContainerSpringBootTest; +import com.example.solidconnection.support.RedisTestContainer; import org.junit.jupiter.api.Test; -import org.springframework.test.annotation.DirtiesContext; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; -import static org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_CLASS; - -@TestContainerSpringBootTest +@SpringBootTest +@Testcontainers +@ContextConfiguration(initializers = {RedisTestContainer.class, FlywayMigrationTest.FlywayMySQLInitializer.class}) @TestPropertySource(properties = { "spring.flyway.enabled=true", "spring.flyway.baseline-on-migrate=true", "spring.jpa.hibernate.ddl-auto=validate" }) -@DirtiesContext(classMode = BEFORE_CLASS) class FlywayMigrationTest { + @Container + private static final MySQLContainer MYSQL = new MySQLContainer<>("mysql:8.0") + .withDatabaseName("flyway_test") + .withUsername("flyway_user") + .withPassword("flyway_password"); + + static class FlywayMySQLInitializer implements ApplicationContextInitializer { + @Override + public void initialize(ConfigurableApplicationContext ctx) { + TestPropertyValues.of( + "spring.datasource.url=" + MYSQL.getJdbcUrl(), + "spring.datasource.username=" + MYSQL.getUsername(), + "spring.datasource.password=" + MYSQL.getPassword() + ).applyTo(ctx.getEnvironment()); + } + } + @Test void flyway_스크립트가_정상적으로_수행되는지_확인한다() { - } } From 7c03e9297be3261e46fab9f09eeeba3fd266a05f Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Mon, 29 Dec 2025 20:27:40 +0900 Subject: [PATCH 4/5] =?UTF-8?q?chore:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=9D=98=EB=8F=84=EB=A5=BC=20=EC=89=BD=EA=B2=8C=20=EC=9D=B4?= =?UTF-8?q?=ED=95=B4=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/database/FlywayMigrationTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java index 247a48bbd..23b9f8351 100644 --- a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java +++ b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java @@ -41,5 +41,7 @@ public void initialize(ConfigurableApplicationContext ctx) { @Test void flyway_스크립트가_정상적으로_수행되는지_확인한다() { + // Spring Boot 컨텍스트가 정상적으로 시작되면 + // Flyway 마이그레이션과 ddl-auto=validate 검증이 성공한 것 } } From dfa9a9b7e7a555bc3f4cb816ceedda20d9a728e4 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Mon, 29 Dec 2025 20:51:19 +0900 Subject: [PATCH 5/5] =?UTF-8?q?chore:=20=EB=AA=85=EC=8B=9C=EC=A0=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=BB=A8=ED=85=8C=EC=9D=B4=EB=84=88?= =?UTF-8?q?=EB=A5=BC=20=EC=8B=9C=EC=9E=91=ED=95=98=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 또한 MySQLTestContainer 코드와 유사한 컨벤션을 가지도록 수정 --- .../database/FlywayMigrationTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java index 23b9f8351..2649716f1 100644 --- a/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java +++ b/src/test/java/com/example/solidconnection/database/FlywayMigrationTest.java @@ -9,11 +9,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.testcontainers.containers.MySQLContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; @SpringBootTest -@Testcontainers @ContextConfiguration(initializers = {RedisTestContainer.class, FlywayMigrationTest.FlywayMySQLInitializer.class}) @TestPropertySource(properties = { "spring.flyway.enabled=true", @@ -22,20 +19,23 @@ }) class FlywayMigrationTest { - @Container - private static final MySQLContainer MYSQL = new MySQLContainer<>("mysql:8.0") + private static final MySQLContainer CONTAINER = new MySQLContainer<>("mysql:8.0") .withDatabaseName("flyway_test") .withUsername("flyway_user") .withPassword("flyway_password"); + static { + CONTAINER.start(); + } + static class FlywayMySQLInitializer implements ApplicationContextInitializer { @Override - public void initialize(ConfigurableApplicationContext ctx) { + public void initialize(ConfigurableApplicationContext applicationContext) { TestPropertyValues.of( - "spring.datasource.url=" + MYSQL.getJdbcUrl(), - "spring.datasource.username=" + MYSQL.getUsername(), - "spring.datasource.password=" + MYSQL.getPassword() - ).applyTo(ctx.getEnvironment()); + "spring.datasource.url=" + CONTAINER.getJdbcUrl(), + "spring.datasource.username=" + CONTAINER.getUsername(), + "spring.datasource.password=" + CONTAINER.getPassword() + ).applyTo(applicationContext.getEnvironment()); } }