๊ฐœ์š”


์•ˆ๋…•ํ•˜์„ธ์š” ๊ณต์ฑ…ํŒ€์—์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋Š” ์ฟผ๋ฆฌ์น˜์ž…๋‹ˆ๋‹ค.

1์ฐจ ์Šคํ”„๋ฆฐํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ๋“ค์„ ๋งˆ์ฃผํ–ˆ๋Š”๋ฐ์š”.

์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด 1์ฐจ ์Šคํ”„๋ฆฐํŠธ ์ง„ํ–‰ ์ค‘ ๋งˆ์ฃผ์น˜๊ฒŒ ๋œ ํ•œ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

@WebMvcTest ์‚ฌ์šฉ ์ค‘..


Presentation Layer ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฐ ํ”ํžˆ @WebMvcTest ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@SpringBootTest ๋Š” Application Context ๋ฅผ ์™„์ „ํžˆ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐ˜๋ฉด, @WebMvcTest ๋Š” Presentation Layer ๊ด€๋ จ ๋นˆ๋งŒ์„ ์Šค์บ” ๋ฐ ๋“ฑ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ์พŒ์ ํ•œ ์Šฌ๋ผ์ด์Šค ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ์ €ํฌ ๊ณต์ฑ…ํŒ€ ์—ญ์‹œ @WebMvcTest ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ณด๋ฉด, ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ Auto-Configuration ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  MVC ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋งŒ ๋“ฑ๋กํ•ด์ค€๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • @Controller
  • @ControllerAdvice
  • @JsonComponent
  • Converter/GenericConverter
  • Filter
  • WebMvcConfigurer
  • HandlerMethodArgumentResolver

๋ฐ˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋Š” ๋“ฑ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜๋„ค์š”.

  • @Component
  • @Service
  • @Repository

์ €ํฌ ๊ณต์ฑ…ํŒ€์—์„  ํ† ํฐ์„ ํ™œ์šฉํ•œ ์ธ์ฆ ์ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด WebMvcConfigurer ๋ฅผ ํ†ตํ•ด HandlerMethodArgumentResolver ์™€ HandlerInterceptor ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ดํ›„ Presentation Layer ๋‹จ์˜ ์ธ์ฆ ์ธ๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ ์ด ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช… WebMvcConfigurer ๋ž‘ HandlerMethodArgumentResolver ๋Š” ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค๊ณ  ๊ณต์‹ ๋ฌธ์„œ์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š”๋ฐ, HandlerInterceptor ๋Š” ์—†๋„ค? ๊ทผ๋ฐ ๋”ฐ๋กœ ๋“ฑ๋กํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž‘๋™ํ•˜๋„ค? ์™œ์ง€?

์ฐพ์•„๋ณด์ž

์ด์œ ๋ฅผ ์—ด์‹ฌํžˆ ์ฐพ๋‹ค๋ณด๋‹ˆ spring-boot GitHub ์—์„œ ์ด๋Ÿฐ ์ด์Šˆ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ด์Šˆ๋Š” ์ด PR ์„ ํ†ตํ•ด ์ˆ˜์ •๋˜๊ฒŒ ๋˜๋Š”๋ฐ์š”. ์–ด๋–ค ์ฝ”๋“œ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

์œ„ ์ปค๋ฐ‹์„ ๋ณด๋ฉด HandlerInterceptor ๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ์จ @WebMvcTest ์ˆ˜ํ–‰ ์‹œ HandlerInterceptor ๊ฐ€ ์ž๋™์œผ๋กœ ๋นˆ ๋“ฑ๋ก๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ํ•ด๋‹น ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ๊ฒƒ์ผ๊นŒ?

ํ•ด๋‹น ๊ณต์‹๋ฌธ์„œ๋Š” spring-boot 1.4.0 ๋ฒ„์ „์— ์ž‘์„ฑ๋œ ๊ธ€์ธ ๋ฐ˜๋ฉด, ์œ„ PR ์€ 2.2.0 ๋‹จ๊ณ„์—์„œ ์ ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง ๊ณต์‹ ๋ฌธ์„œ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ ์œ„ํ•ด Spring Boot 2.2.0 Release Notes ๋ฅผ ์ฐพ์•„๋ด…์‹œ๋‹ค.

๋†€๋ž๊ฒŒ๋„ ์œ„์™€ ๊ฐ™์€ ๋ฌธ์žฅ์ด ์ ํ˜€์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 


์ด๋ฒˆ ์‚ฌ๊ฑด์„ ํ†ตํ•ด ๋ฒ„์ „ ํ™•์ธ์— ๋Œ€ํ•œ ์ค‘์š”์„ฑ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๊ณ  ๊ณต์‹ ๋ฌธ์„œ์— ์•„์ง ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— spring-boot GitHub ์˜ Release Note ๋ฅผ ์ž˜ ํ™œ์šฉํ•œ๋‹ค๋ฉด ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ณต์‹์ ์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.