๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ด๋ก /Spring

์Šคํ”„๋ง HTTP Message Body ์™€ Message Converter 2 - RequestMappingHandlerAdapter

by 6161990 2021. 12. 18.

๐Ÿ“Œ RequestMappingHandlerAdapter ๋™์ž‘ ๋ฐฉ์‹

ArgumentResolver

์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. HttpServletRequest , Model ์€ ๋ฌผ๋ก ์ด๊ณ  @RequestBody HttpEntity ๊ฐ™์€ HTTP ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ํฐ ์œ ์—ฐํ•จ์„ ๋ณด์žฅํ•œ๋‹ค. 

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

 

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

 

 

ArgumentResolver

* ์ •ํ™•ํžˆ๋Š” HandlerMethodArgumentResolver ์ธ๋ฐ ์ค„์—ฌ์„œ ArgumentResolver๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

supportsParameter() : ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ.

resolveArgument() : ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด ํ˜ธ์ถœ๋˜์–ด ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ. ์—ฌ๊ธฐ์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ์‹œ ๋„˜์–ด๊ฐ„๋‹ค. 

 

ReturnValueHandler

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

 

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

 

 

 

๐Ÿ“Œ HTTP Message Converter 

 

 

 

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

 

 

์š”์ฒญ์˜ ๊ฒฝ์šฐ 

@RequestBody ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ArgumentResolver ๊ฐ€ ์žˆ๊ณ ,

HttpEntity ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”ArgumentResolver ๊ฐ€ ์žˆ๋‹ค.

์ด ArgumentResolver ๋“ค์ด HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 


์‘๋‹ต์˜ ๊ฒฝ์šฐ 

@ResponseBody ์™€ HttpEntity ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ๊ฐ์˜ ReturnValueHandler ๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—์„œ HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

์Šคํ”„๋ง MVC๋Š” 

@RequestBody @ResponseBody์˜ ๊ฒฝ์šฐ,

RequestResponseBodyMethodProcessor (ArgumentResolver)


HttpEntity์˜ ๊ฒฝ์šฐ,

HttpEntityMethodProcessor (ArgumentResolver)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.