
ํ์ฌ ์ด์์ค์ธ ์ฑ๋ด ์๋น์ค๊ฐ ์๋๋ฐ, ์๋ฒ๋ฅผ GCP๋ก ์ฎ๊ธฐ๋ฉด์ ๋ฌด๋ฃ ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์๋๊ฐ ํ์ ํ ๋๋ ค์ก๋ค. ๋จ์ง, ์คํ๋ง ๋๋๋ก ์์ฑํ๋ ์ฝ๋๋ค์ ์ต์ ํํ๊ธฐ ์ํด TDD๊ธฐ๋ฐ ์ฝ๋ ์์ฑํ๋ฉฐ ๋ฆฌํฉํ ๋ง ํด๋ณด๋ ค๊ณ ํ๋ค.
์ฐ์ , ๊ถ๊ธํ ์ ๋ค์ ์ ๋ฆฌํด๋ณด์๋คโ
Repository ๊ณ์ธต์ ํ ์คํธ๋ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL, PostgreSQL ๋ฑ)๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , H2์ ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํด์ ์งํํ๋ค. ์ด๋ฅผ ํตํฉ ํ ์คํธ๋ผ๊ณ ํ๋๋ฐ, ์ด์ ๋ ์ค์ JPA, Hibernate, SQL ์ฟผ๋ฆฌ๋ฅผ ํฌํจํ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋์์ ๊ฒ์ฆํ๊ธฐ ๋๋ฌธ์ด๋ค.
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ์คํ๋๋ ๊ฐ๋ฒผ์ด SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ํ ์คํธ์ฉ์ผ๋ก ์์ฃผ ์ฌ์ฉ
Spring Boot์์๋ @DataJpaTest ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก H2 ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ ํ๋ค.
์ฆ, @DataJpaTest๋ฅผ ์ฌ์ฉํ๋ฉด Spring Data JPA์ ๊ธฐ๋ฅ์ ์ค์ DB ์์ด ํ
์คํธ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
โ Repository ํ ์คํธ๋ ์ค์ SQL ์คํ์ ํ์ธํ๋ ๊ฒ ๋ชฉ์ ์ด๊ธฐ ๋๋ฌธ์ Mock์ ์ฌ์ฉํ์ง ์๋๋ค.
Given-When-Then์ ํ ์คํธ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ํ ์คํธ ํ๋ฆ์ ๋ช ํํ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ BDD (Behavior-Driven Development, ํ์ ์ฃผ๋ ๊ฐ๋ฐ) ํจํด
์ด ํจํด์ ํ ์คํธ๋ฅผ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋์ด ์์ฑํ๋ ๋ฐฉ์์ด๋ค.
| ์ด๋ ธํ ์ด์ | ์ค๋ช | ์ฃผ์ ํน์ง |
|---|---|---|
| @DataJpaTest | JPA ๊ด๋ จ ์ปดํฌ๋ํธ(Repository)๋ง ๋ก๋ํ์ฌ ํ ์คํธํ๋ ์ด๋ ธํ ์ด์ | H2 ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ DB ์๋ ์ค์ / @Entity, @Repository๋ง ๋ก๋๋จ / @Service, @Controller๋ ๋ก๋๋์ง ์์ / ๋น ๋ฅธ ํ ์คํธ ๊ฐ๋ฅ |
| @SpringBootTest | ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ํ์ฌ ํตํฉ ํ ์คํธํ๋ ์ด๋ ธํ ์ด์ | ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋น(@Service, @Controller ํฌํจ) ๋ก๋ / ์ค์ DB๋ฅผ ์ฌ์ฉํ ์๋ ์์ / ์ ์ฒด์ ์ธ ๊ธฐ๋ฅ ํ ์คํธ ๊ฐ๋ฅ / ์คํ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆผ |
ํ์ฌ ์ด์์ค์ธ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์ ์ค์ DB์ ํ
์คํธ์ฉ DB๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํด์ผ ํ๋ค.
ํ๋์ application.properties ํ์ผ์ ๋์ผํ ํค๋ก db ์ค์ ์ด ๋ถ๊ฐํ๊ธฐ ๋๋ฌธ์ application-test.properties ํ์ผ์ ๋ฐ๋ก ๋ง๋ค์ด ์ค์ ์ ์งํํ๋ค.

ํ์ผ์ ์์น๋ ์์ ๊ฐ์ ๊ฒฝ๋ก์ ์กด์ฌํ๋๋ก ํ๋ค.

# Datasource ์ค์
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=sa
spring.datasource.password=
# H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฉ Hibernate dialect(JPA๊ฐ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ซํผ์ ์ง์ ํ๋ค)
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# ์ ํ๋ฆฌ์ผ์ด์
์์์ ์ํฐํฐ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ
์ด๋ธ์ ์์ฑํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ์ ํ
์ด๋ธ์ ์ญ์ ํ๋ค
spring.jpa.hibernate.ddl-auto=create-drop
# ํ
์ด๋ธ ๊ด๋ จ SQL๋ฌธ ์ฝ์์ ์ถ๋ ฅ
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# H2 ์ฝ์ ์ค์
spring.h2.console.enabled=true
spring.h2.console.path=/h2
[์ถ์ฒ]