๐ฑ ๋ฌธ์ ์ํฉ
ํ์ฌ ๋ด ํ๋ก์ ํธ๋ ์ด๋ ๊ฒ ๋ฉํฐ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
admin ๋ชจ๋๊ณผ app ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ชจ๋์ด๋ฉฐ, core.domain ๋ชจ๋ ํจํค์ง์ ์๋ Entity๋ฅผ ๋ชจ๋ ์ค์บํ์ฌ Bean์ผ๋ก ๋ฑ๋กํด์ผ ํ๋ค.
@SpringBootApplication
@ComponentScan(basePackages = {"com.chaewsstore.core.domain"})
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
AdminApplication ํด๋์ค์ ์ ์ธ๋์ด ์๋ @SpringBootApplication ์ด๋ ธํ ์ด์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ค๊ฐ ์์นํ ํจํค์ง(com.chaewsstore.admin)์ ๊ทธ ํ์ ํจํค์ง์์๋ง ์ปดํฌ๋ํธ๋ฅผ ์ค์บํ๊ธฐ ๋๋ฌธ์ 'com.chaewsstore.domain' ํจํค์ง๋ฅผ ์ค์บํ๋ ค๋ฉด @ComponentScan ๋๋ @SpringBootApplication์ scanBasePackage ์์ฑ์ ์ฌ์ฉํ์ฌ ์ค์บ ๋ฒ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ ์ปจํธ๋กค๋ฌ ํ ์คํธ์์ ๋ฐ์ํ๋๋ฐ ๊ธฐ์กด์๋ ์ ๋์๊ฐ๋ ํ ์คํธ์์ ์๋์ Exception์ด ๋ฐ์ํ๊ธฐ ์์ํ๋ค.
@ExtendWith(RestDocumentationExtension.class)
@WebMvcTest(ProductController.class)
class ProductControllerUnitTest {
@MockBean
private ProductUseCase productUseCase;
private MockMvc mockMvc;
private final ObjectMapper objectMapper = new ObjectMapper();
...
}
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'queryDslConfig': Injection of persistence dependencies failed.
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'jakarta.persistence.EntityManagerFactory' available
์ด๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ด EntityManagerFactory Bean์ ์ฐพ์ง ๋ชปํด ๋ฐ์ํ๋ ์๋ฌ์ด๋ค. @ComponentScan์ ํตํด Domain ํจํค์ง์ ์์นํ QueryDslConfig๋ฅผ Bean์ผ๋ก ๋ฑ๋กํด ์ฃผ์๋๋ฐ ์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์๊น?
๐ฑ ๋ฌธ์ ๋ฐ์ ์ด์ - @WebMvcTest
ControllerUnitTest์ ์ฌ์ฉ๋ @WebMvcTest๋ ์น ๊ณ์ธต(์ปจํธ๋กค๋ฌ)๋ง ํ ์คํธํ๊ธฐ ์ํด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ JPA ๊ด๋ จ ์ค์ ์ด๋ Bean๋ค์ ๋ก๋ฉํ์ง ์๋๋ค. ๋ฐ๋ผ์ AdminApplication ํด๋์ค์ ์ ์ธํ ์ด๋ ธํ ์ด์ ๋ค์ ํ ์คํธ์ฝ๋๋ฅผ ์คํํ ๋ ์ ์ฉ๋์ง ์์ผ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ก entityManagerFactory์ ๊ฐ์ JPA ๊ด๋ จ Bean๋ค์ด ๋ก๋ฉ๋์ง ์์ ํ ์คํธ๊ฐ ์คํจํ๊ฒ ๋ ๊ฒ์ด๋ค.
๐ฑ ํด๊ฒฐ ๋ฐฉ์
ํด๋น ์ค์ ๋ค์ ๋ฐ๋ก ๋ถ๋ฆฌํด Config ํ์ผ๋ก ์ ์ธํ๋ฉด ํด๊ฒฐ๋๋ค.
@ComponentScan(basePackages = {"com.chaewsstore.core.domain"})
@Configuration
public class DomainConfig {
}
@SpringBootApplication
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}