ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Http Message Converter ์ด์•ผ๊ธฐ(2)
    ๊ฐœ๋ฐœ/Spring Boot 2022. 7. 7. 17:01

     

     

     

    Http Message Converter ์ด์•ผ๊ธฐ(1) ์€ ๋‹ค์Œ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” :)

    https://mong-dev.tistory.com/41
     

    HTTP Message Converter ์ด์•ผ๊ธฐ(1)

    ๋ทฐ ํ…œํ”Œ๋ฆฟ์œผ๋กœ HTML์„ ์ƒ์„ฑํ•ด์„œ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, HTTP API์ฒ˜๋Ÿผ JSON ๋ฐ์ดํ„ฐ๋ฅผ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์—์„œ ์ง์ ‘ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ฒฝ์šฐ HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค. ์Šคํ”„๋ง MVC๋Š” ๋‹ค์Œ์˜ ๊ฒฝ์šฐ์—

    mong-dev.tistory.com

     
     
     
     
     

     Http ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋Š” ์Šคํ”„๋ง MVC ์–ด๋””์ฏค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ผ๊นŒ?


    ์šฐ๋ฆฌ๊ฐ€ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ถ€๋ถ„์€ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ, ์ฆ‰ @RequestMapping์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ์ธ RequestMappingHandlerAdapter(์š”์ฒญ ๋งคํ•‘ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ)์— ์žˆ๋‹ค.

     

     

     

    ArgumentResolver


    ์ƒ๊ฐํ•ด๋ณด๋ฉด, ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    HttpServletRequest , Model ์€ ๋ฌผ๋ก ์ด๊ณ , @RequestParam , @ModelAttribute ๊ฐ™์€ ์• ๋…ธํ…Œ์ด์…˜ ๊ทธ๋ฆฌ๊ณ  @RequestBody , HttpEntity ๊ฐ™์€ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๋งค์šฐ ํฐ ์œ ์—ฐํ•จ์„ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค.

     

    ์ด๋ ‡๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ArgumentResolver ๋•๋ถ„์ด๋‹ค.

     

    ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” RequestMappingHandlerAdapter ๋Š” ๋ฐ”๋กœ ์ด ArgumentResolver ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ(ํ•ธ๋“ค๋Ÿฌ)๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’(๊ฐ์ฒด)์„ ์ƒ์„ฑํ•œ๋‹ค.

     

    ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ํŒŒ๋ฆฌ๋ฏธํ„ฐ์˜ ๊ฐ’์ด ๋ชจ๋‘ ์ค€๋น„๋˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๊ฐ’์„ ๋„˜๊ฒจ์ค€๋‹ค.

    ์Šคํ”„๋ง์€ 30๊ฐœ๊ฐ€ ๋„˜๋Š” ArgumentResolver ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

    (https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann- arguments)

     

    ์ถœ์ฒ˜ : ๊น€์˜ํ•œ - ์Šคํ”„๋งMVC

    ArgumentResolver ์˜ supportsParameter() ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๊ณ , ์ง€์›ํ•˜๋ฉด resolveArgument() ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ์‹œ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์›ํ•œ๋‹ค๋ฉด ์ง์ ‘ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•ด์„œ ์›ํ•˜๋Š” ArgumentResolver ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค

     

    ReturnValueHandler


    HandlerMethodReturnValueHandler ๋ฅผ ์ค„์—ฌ์„œ ReturnValueHandler ๋ผ ๋ถ€๋ฅธ๋‹ค. ArgumentResolver ์™€ ๋น„์Šทํ•œ๋ฐ, ์ด๊ฒƒ์€ ์‘๋‹ต ๊ฐ’์„ ๋ณ€ํ™˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.

    ์ปจํŠธ๋กค๋Ÿฌ์—์„œ String์œผ๋กœ ๋ทฐ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ด๋„, ๋™์ž‘ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ReturnValueHandler ๋•๋ถ„์ด๋‹ค.

     

    ์Šคํ”„๋ง์€ 10์—ฌ๊ฐœ๊ฐ€ ๋„˜๋Š” ReturnValueHandler ๋ฅผ ์ง€์›ํ•œ๋‹ค.

    ์˜ˆ) ModelAndView , @ResponseBody , HttpEntity , String

     

    ๊ฐ€๋Šฅํ•œ ์‘๋‹ต ๊ฐ’ ๋ชฉ๋ก์€ ๋‹ค์Œ ๊ณต์‹ ๋ฉ”๋‰ด์–ผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    (https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann- return-types)

     

     

     

    HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋Š” ์–ด๋””์ฏค ์žˆ์„๊นŒ?


    ์ถœ์ฒ˜ : ๊น€์˜ํ•œ - ์Šคํ”„๋งMVC


    HTTP
    ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” @RequestBody ๋„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์— ์‚ฌ์šฉ๋œ๋‹ค. @ResponseBody ์˜ ๊ฒฝ์šฐ๋„ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ด์šฉํ•œ๋‹ค.

    ์š”์ฒญ์˜ ๊ฒฝ์šฐ @RequestBody ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ArgumentResolver ๊ฐ€ ์žˆ๊ณ , HttpEntity ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ArgumentResolver ๊ฐ€ ์žˆ๋‹ค. ์ด ArgumentResolver ๋“ค์ด HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค

    ์‘๋‹ต์˜ ๊ฒฝ์šฐ @ResponseBody ์™€ HttpEntity ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ReturnValueHandler ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—์„œ HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ ๋‹ค.

    ์Šคํ”„๋ง MVC๋Š” @RequestBody @ResponseBody ๊ฐ€ ์žˆ์œผ๋ฉด RequestResponseBodyMethodProcessor (ArgumentResolver), HttpEntity ๊ฐ€ ์žˆ์œผ๋ฉด HttpEntityMethodProcessor (ArgumentResolver)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (HttpMessageConverter ๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ํ•œ๋ฒˆ ํ™•์ธํ•ด๋ณด์ž.)

     

    ํ™•์žฅ


    ์Šคํ”„๋ง์€ ๋‹ค์Œ์„ ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•„์š”ํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

    HandlerMethodArgumentResolver
    HandlerMethodReturnValueHandler
    HttpMessageConverter

     

    ์Šคํ”„๋ง์ด ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ผ์ด ๋งŽ์ง€๋Š” ์•Š๋‹ค.

    ๊ธฐ๋Šฅ ํ™•์žฅ์€ WebMvcConfigurer ๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด ๋œ๋‹ค.

    ์‹ค์ œ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์œผ๋‹ˆ ์‹ค์ œ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ํ•„์š”ํ•  ๋•Œ WebMvcConfigurer ๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋ณด์ž.

    	@Bean
    	public WebMvcConfigurer webMvcConfigurer() {
            return new WebMvcConfigurer() {
    		@Override
    		public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) 
    		{ //...}
                
    		@Override
    		public void extendMessageConverters(List<HttpMessageConverter<?>> converters) 
    		{ //... } 
             };
        }

     

    ๋Œ“๊ธ€

Designed by Tistory.