[Spring] @RequestBody์ @ResponseBody๋?
๐ @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์ ์ง๋ ฌํ ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ ๊ฒ์ด์์.