๋ค์ํ ์ ํ์ง๋ค
์ด์ํ๊ฒฝ๊ณผ ์ ์ฌํ ์คํ์ DB ( ๊ฐ๋ฐ ํ๊ฒฝ DB
) ์ฌ์ฉ
๐ ๋ฒ์ ์ด์, ์ด๊ธฐ ์ค์ ๋ฑ๋ฑ ์ด๊ธฐ ์ธํ
์ด ๋ณต์กํ๋ค๋ ๋จ์ ์ด ์๋ค.
์ธ๋ฉ๋ชจ๋ฆฌ DB
(ex. h2) ์ฌ์ฉ
๐ ์ด์ํ๊ฒฝ๊ณผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํตํฉํ
์คํธ ํ๊ฒฝ์์ docker ๋๋ TestContainers ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
Docker
์ฌ์ฉ
๐ container ๊ด๋ฆฌ๋ฅผ ๋ณ๋๋ก ํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌํฌ์ธํธ๊ฐ ๋์ด๋๋ ๋จ์ ์ด ์๊ณ ,
docker๋ฅผ ์คํํ๊ธฐ ์ํด docker-compose ์ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋๋ก ์์ฑํด์ฃผ์ด์ผํ๋ ๋จ์ ์ด ์๋ค.
TestContainers
์ด์ฉ
๐ TestContainers ๋ ์ด์ ํ๊ฒฝ๊ณผ ์ ์ฌํ DB ์คํ์ผ๋ก ๋
๋ฆฝ์ ์ธ ํ๊ฒฝ์์ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ํ
์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
TestContainers ๋
MariaDB์ Redis๋ฅผ ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ํด TestContainers ์ ์ฉ
testcontainers jdbc ์ฐ๋ ๊ณต์ ๋ฌธ์ ๋งํฌ
redis์ ๊ฒฝ์ฐ ์ ๊ณต๋๋ ๋ชจ๋์ด ์๊ธฐ ๋๋ฌธ์ , docker์์ ์ง์ ๊ฐ์ ธ์์ผํ๋ค.
testImplementation 'org.testcontainers:spock:1.17.1' // test์ ์ฌ์ฉํ groovy ์ธ์ด ๊ธฐ๋ฐ BDD ํ๋ ์์ํฌ
testImplementation 'org.testcontainers:mariadb:1.17.1'
spring:
datasource:
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10:///
@SpringBootTest
abstract class AbstractIntegrationContainerBaseTest extends Specification {
static final GenericContainer MY_REDIS_CONTAINER
static {
MY_REDIS_CONTAINER = new GenericContainer<>("redis:6")
.withExposedPorts(6379)
MY_REDIS_CONTAINER.start()
System.setProperty("spring.redis.host", MY_REDIS_CONTAINER.getHost())
System.setProperty("spring.redis.port", MY_REDIS_CONTAINER.getMappedPort(6379).toString())
}
}
spock ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, groovy ์ธ์ด๋ก ์์ฑ !
java์ ์คํ์ผ์ด ๊ต์ฅํ ๋น์ทํ๋ค.