Home > Backend > Spring > ๐Ÿƒ[Spring] `@SpringBootTest` ์• ๋…ธํ…Œ์ด์…˜

๐Ÿƒ[Spring] `@SpringBootTest` ์• ๋…ธํ…Œ์ด์…˜
Spring Framework
# ๐Ÿƒ[Spring] `@SpringBootTest` ์• ๋…ธํ…Œ์ด์…˜. - `@SpringBootTest` ์• ๋…ธํ…Œ์ด์…˜์€ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. - ์ด ์• ๋…ธํ…Œ์ด์…˜์€ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ Spring Application Context๋ฅผ ๋กœ๋“œํ•˜๊ณ , ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด ๋˜๋Š” ๋ถ€๋ถ„์ ์ธ ํ™˜๊ฒฝ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. - ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด(์˜ˆ: ์„œ๋น„์Šค, ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋“ฑ) ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฒ€์ฆํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ## 1๏ธโƒฃ ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ์‹. - **1. Spring Application Context ๋กœ๋“œ** - `@SpringBootTest` ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. - ์ด ์ปจํ…์ŠคํŠธ๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•  ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •๋˜์–ด, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **2. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •** - `@SpringBootTest` ์• ๋…ธํ…Œ์ด์…˜์€ ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ํ”„๋กœํŒŒ์ผ์„ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜, ํ…Œ์ŠคํŠธ์šฉ ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - `@SpringBootTest(properties = "spring.config.name=test-application")`์™€ ๊ฐ™์ด ์†์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **3. ์›น ํ™˜๊ฒฝ ์„ค์ •** - `@SpringBootTest`๋Š” ๋‹ค์–‘ํ•œ ์›น ํ™˜๊ฒฝ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. - `WebEnviroment.MOCK` : ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ์›น ํ™˜๊ฒฝ ์—†์ด `MockMvc`๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ธ”๋ฆฟ ํ™˜๊ฒฝ์„ ๋ชจํ‚นํ•ฉ๋‹ˆ๋‹ค. - `WebEnviroment.RANDOM_PORT` : ํ…Œ์ŠคํŠธ์— ์ž„์˜์˜ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด์žฅ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. - `WebEnviroment.DEFINED_PORT` : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - `WebEnviroment.NONE` : ์›น ํ™˜๊ฒฝ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋งŒ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. **์˜ˆ์‹œ** ```java @SpringBootTest(webEnvironment = SpringBootTest.WebEnviroment.RANDOM_PORT) ``` - **4. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ** - ์ด ์• ๋…ธํ…Œ์ด์…˜์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๊ณ„์ธต์ด ํ†ตํ•ฉ๋œ ์ƒํƒœ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. - ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์›น ์„œ๋ฒ„, ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๋“ฑ์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. - **5. TestConfiguration ํด๋ž˜์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ** - `@SpringBootTest` ์™€ ํ•จ๊ป˜ `@TestConfiguration` ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๊ตฌ์„ฑ๋œ ๋นˆ(Bean)์ด๋‚˜ ์„ค์ •์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## 2๏ธโƒฃ ์˜ˆ์‹œ ์ฝ”๋“œ ```java @SpringBootTest public class MyServiceIntegrationTest { @Autowired private MyService myService; @Test public void testServiceMethod() { // Given // Setup initial conditions // When String result = myService.performAction(); // Then assertEquals("ExpectedResult", result); } } ``` - ์œ„์˜ ์˜ˆ์‹œ์—์„œ `@SpringBootTest` ๋Š” `MyServiceIntegrationTest` ํด๋ž˜์Šค๊ฐ€ Spring Application Context์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , `MyService` ๋นˆ์ด ์‹ค์ œ๋กœ ์ฃผ์ž…๋˜์–ด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ## 3๏ธโƒฃ ์š”์•ฝ - `@SpringBootTest`๋Š” Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๊ฐ•๋ ฅํ•œ ์• ๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. - ์ด ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•œ ์ƒํƒœ์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.