[Spring] @RequestBody์™€ @ResponseBody๋ž€?

2022. 3. 11. 20:35ใ†Back-End ์ž‘์—…์‹ค/Spring Framework

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿš€ @RequestBody์™€ @ResponseBody๋ž€?

์Šคํ”„๋ง์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ @RequestBody์™€ @ResponseBody๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ Server ๊ฐœ๋ฐœ๋กœ๋Š” maven ๊ธฐ๋ฐ˜ Spring์œผ๋กœ, Client๋Š” Vue.js๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”. Vue.js๋Š” ๋Œ€ํ‘œ์ ์ธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ธฐ๋ฐ˜ Client Java Script์˜ Framework๋ž๋‹ˆ๋‹ค!

 

    ๐Ÿ”ฝ  Client์™€ Server์˜ ๋น„๋™๊ธฐ ํ†ต์‹  ์ด์•ผ๊ธฐ

ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ํ†ต์‹ ํ•˜๋Š” Message๋ฅผ ์š”์ฒญ(Request)๋ผ๊ณ  ํ•˜๊ณ , ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์‘๋‹ต(Response)๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์›น์—์„œ ์ƒˆ๋กœ๊ณ ์นจ(ํ™”๋ฉด์ „ํ™˜) ์—†์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋™์ž‘๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๋น„๋™๊ธฐ ํ†ต์‹ ์œผ๋กœ ์ด๋ค„์ง€๋Š” ๊ฒƒ์ด์—์š”.
๋น„๋™๊ธฐ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ, ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด์•ผ ํ•˜๊ณ , ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต์„ ๋ณด๋‚ผ๋•Œ์—๋„ ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ณธ๋ฌธ์ด ๋ฐ”๋กœ Body ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฆ‰, ์š”์ฒญ ๋ณธ๋ฌธ์„ RequestBody๋ผ๊ณ  ํ•˜๊ณ , ์‘๋‹ต ๋ณธ๋ฌธ์„ ResponseBody๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์„œ๋กœ ์ด๊ฒƒ์„ ๋‹ด์•„์„œ ํ†ต์‹ ์„ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๋ณธ๋ฌธ์— ๋‹ด๊ธฐ๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์€ Text๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ๋Œ€ํ‘œ์ ์œผ๋กœ JSON์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”.
์ฆ‰, ๋น„๋™๊ธฐ์‹ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ํ†ต์‹ ์„ ์œ„ํ•ด JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค.

Spring MVC์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ „์†กํ•œ XML ๋ฐ์ดํ„ฐ๋‚˜ JSON ๋“ฑ๋“ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ DOM ๊ฐ์ฒด๋‚˜ JAVA ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์†ก, ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

@RequestBody์™€ @ResponseBody๋Š” ๊ฐ๊ฐ HTTP ์š”์ฒญ Body๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ HTTP ์‘๋‹ต Body๋กœ ๋ณ€ํ™˜ ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

 

    ๐Ÿ”ฝ  ์š”์ฒญ ๋ณธ๋ฌธ(Request Body)์— ๋‹ด๊ธด ๊ฐ’์„ JAVA ๊ฐ์ฒด๋กœ์˜ ๋ณ€ํ™˜

@RequestBody๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๊ฐ์ฒด๋กœ Conversion์„ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ HttpMessageConverter๊ฐ€ ์ด์šฉ๋˜๋Š” ๊ฒƒ์ด์—์š”.
@ResponseBody๊ฐ€ ๋ถ™์€ ๋งค๊ฐœ ๋ณ€์ˆ˜(ํŒŒ๋ผ๋ฏธํ„ฐ)์—๋Š” HTTP ์š”์ฒญ์˜ ๋ณธ๋ฌธ Body ๋ถ€๋ถ„์ด ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ ๋˜๋Š” ๊ฒƒ์ด์—์š”.
RequestMappingHandlerAdpter ์—๋Š” HttpMessageConverter Type์˜ ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์ฐธ๊ณ ํ•  ๋งŒํ•œ ์‚ฌํ•ญ์ธ ๊ฒƒ์ด์—์š”.

 

 

 

 

 

๐Ÿš€ @RequestBody ๋ž€?

์ด Annotation์ด ๋ถ™์€ ๋งค๊ฐœ ๋ณ€์ˆ˜์—๋Š” HTTP ์š”์ฒญ์˜ Body์— ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ ๋˜๋Š” ๊ฒƒ์ด์—์š”.
์ผ๋ฐ˜์ ์ธ GET/POST์˜ ์š”์ฒญ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ผ๋ฉด @RequestBody๋ฅผ ์ด์šฉํ•  ์ผ์€ ์—†์„ ๊ฒƒ์ด์—์š”.
ํ•˜์ง€๋งŒ, XML์ด๋‚˜, JSON ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•˜๋Š” ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์ด ๋ฐฉ๋ฒ•์„ ์“ฐ๋Š” ๊ฒƒ์ด ํƒ์›”ํ•œ ์„ ํƒ์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.
HTTP ์š”์ฒญ์˜ Body ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ Mapping ๋œ Method ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

 

๐Ÿš€ @ResponseBody ๋ž€?

์ž๋ฐ” ๊ฐ์ฒด๋ฅผ HTTP ์š”์ฒญ์˜ Body ๋‚ด์šฉ์œผ๋กœ Mappingํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด์—์š”.
`@responseBody`๊ฐ€ ๋ถ™์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด HTTP ์š”์ฒญ์˜ Media Type๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜• Type์„ ๋จผ์ € ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜๊ธฐ ์ค‘์—์„œ ํ•ด๋‹น Media Type๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ž๋ฃŒํ˜• Type์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด HTTP ์š”์ฒญ์˜ ๋ณธ๋ฌธ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ๋ณ€ํ™˜ํ•ด์„œ ์ง€์ •๋œ Method ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

๋˜ํ•œ  HTTP ๊ทœ๊ฒฉ์— ๋งž๋Š” ์‘๋‹ต์„ ๋งŒ๋“ค์–ด ์ฃผ๊ณ , ์ด ์นœ๊ตฌ๋Š” HTTP Request๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ๊ฐ์ฒด๋ฅผ ์‘๋‹ต(Response)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `HTTPMessageConverter`๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๋ฐ˜์‘ํ˜•

 

์ฆ‰, `@ResponseBody`๋ฅผ ์ด์šฉํ•˜๋ฉด HTTP ์š”์ฒญ Body๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ์ „๋‹ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

    ๐Ÿ”ฝ  HTTPMessageConverter

`@ResponseBody`๊ฐ€ ๋ถ™์€ ๋Œ€์ƒ์„ response body์— ์ง๋ ฌํ™” ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•