๐๊ฐ์
Spring MVC๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๋ ์น ํ๋ ์์ํฌ๋ค.
์ด๋ ํต์ฌ์ ์ธ ์ญํ ์ ํ๋ ๊ฒ์ด @Controller
, @RestController
์ด๋ค.
๋ ์ด๋ ธํ ์ด์ ์ ๋น์ทํด๋ณด์ด์ง๋ง ์๋ต ๋ฐฉ์์์ ์ค์ํ ์ฐจ์ด๋ฅผ ๊ฐ์ง๋ค.
๐๋ด์ฉ
์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ
sequenceDiagram participant Client participant DispatcherServlet participant HandlerMapping participant HandlerAdapter participant Controller participant ViewResolver participant HttpMessageConverter Client->>DispatcherServlet: HTTP ์์ฒญ DispatcherServlet->>HandlerMapping: ํธ๋ค๋ฌ ํ์ HandlerMapping-->>DispatcherServlet: ํธ๋ค๋ฌ ๋ฐํ DispatcherServlet->>HandlerAdapter: ํธ๋ค๋ฌ ์คํ ์์ HandlerAdapter->>Controller: ๋ฉ์๋ ์คํ alt @Controller Controller-->>HandlerAdapter: View ์ด๋ฆ ๋ฐํ HandlerAdapter->>ViewResolver: View ์ด๋ฆ์ผ๋ก View ๊ฐ์ฒด ์์ฑ ViewResolver-->>DispatcherServlet: View ๊ฐ์ฒด (HTML ํฌํจ) else @RestController Controller-->>HandlerAdapter: ๊ฐ์ฒด ๋ฐํ HandlerAdapter->>HttpMessageConverter: ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํ HttpMessageConverter-->>DispatcherServlet: ์ง๋ ฌํ๋ JSON end DispatcherServlet-->>Client: ์๋ต ์ ์ก
Client
๊ฐ HTTP ์์ฒญ์ ํ๊ฒ ๋๋ฉดDispatcherServlet
์ด ๊ฐ๋ก์ฑ- ๋ชจ๋ HTTP ์์ฒญ์
DispatcherServlet
์ด ๊ฐ๋ก์ฑ๋ฉฐ ์์๋๋ค.
- ๋ชจ๋ HTTP ์์ฒญ์
DispatcherServlet
์HandlerMapping
์ ํตํด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ Handler๋ฅผ ์ฐพ์ ๋ค์ HandlerAdapter์๊ฒ ํด๋น ํธ๋ค๋ฌ๋ฅผ ์คํํ๋๋ก ์์ํ๋ค.- ์คํ์ ์์ํ๋ค.
HandlerAdapter
๋Controller
์ ๋ฉ์๋๋ฅผ ์คํํ๋ค.- ์ด๋ค Handler๊ฐ ๋๋
HandlerAdapter
๊ฐ ์ค์ ๋ฉ์๋๋ฅผ ์คํํ๋ค.
- ์ด๋ค Handler๊ฐ ๋๋
@Controller
,@RestController
์ผ์ด์ค์ Resolver ํธ์ถ@Controller
์ด๋ ธํ ์ด์ ์ผ๋ก ๋ฑ๋ก๋ ๋ฉ์๋์ ๊ฒฝ์ฐController
๊ฐ ๋ฐํํ View ์ด๋ฆ๊ณผ Model ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋กDispatcherServlet
์ดViewResolver
๋ฅผ ํตํด View ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค ์ด๋ฅผ ๋ ๋๋งํ์ฌ ์๋ต์ ์์ฑํ๋ค.ViewResolver
๋ ๋จ์ํ View๋ฅผ ์ฐพ์์ฃผ๋ ์ญํ- ์ค์ ๋ ๋๋ง์ View ๊ฐ์ฒด๊ฐ ์ํํ๋ค.
@RestController
์ด๋ ธํ ์ด์ ์ผ๋ก ๋ฑ๋ก๋ ๋ฉ์๋๊ฐ ๋ฐํํ ๊ฐ์ฒด๋DispatcherServlet
โHandlerAdapter
โHttpMessageConverter
๋ฅผ ํตํด JSON์ ์์ฑํ ๋คDispatcherServlet
์๊ฒ ์ ๋ฌํ๋ค.- ์ง๋ ฌํ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ค.
@Controller
,@RestController
์ผ์ด์ค์ ์๋ต ๋ฐํ@Controller
์ ๊ฒฝ์ฐViewResolver
๋ View ์ด๋ฆ์ ํด๋นํ๋ View ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ์ญํ ๋ง ํ๊ณ ํด๋น View ๊ฐ์ฒด๊ฐ DispatcherServlet์ ํธ์ถ์ ์ํด ์ค์ HTML์ ๋ ๋๋งํด ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ค.- ViewResolver โ View ๊ฐ์ฒด ํ์
- View โ HTML ๋ ๋๋ง
@RestController
์ ๊ฒฝ์ฐHttpMessageConverter
๋ ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํ๋ง ํ๊ณ ์ง๋ ฌํ๋ ๊ฒฐ๊ณผ๋DispatcherServelet
์ ํตํด ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํ๋๋ค.DispatcherServlet
์ด ์๋ต์ ์์๊ณผ ๋์ ๋ด๋นํ๋ฉฐHttpMessageConverter
๋ ์๋ต ๋ณธ๋ฌธ ์์ฑ์ ๋๋๋ค.
@Controller
- ์ ํต์ ์ธ MVC ๊ตฌ์กฐ์์ ์ฌ์ฉ
Model
์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ View ์ด๋ฆ์ ๋ฐํ- View Resolver๊ฐ View ํ ํ๋ฆฟ์ ๋ ๋๋งํ์ฌ ์๋ต
|
|
- JSON ์๋ต์ ์ํด
@ResponseBody
์ ํจ๊ป ์ฌ์ฉ1 2 3 4 5 6 7 8 9
@Controller public class ApiController { @ResponseBody @GetMapping("/api/hello") public String apiHello() { return "Hello from Controller!"; } }
@RestController
- RESTful ์น ์๋น์ค์์ ์ฃผ๋ก ์ฌ์ฉ
@Controller + @ResponseBody
์ ์กฐํฉ- ๋ฆฌํด๊ฐ์ ๊ทธ๋๋ก JSON ๋ฑ์ผ๋ก ์ง๋ ฌํํ์ฌ Response Body๋ก ์ ๋ฌ
|
|
์ฐจ์ด์ ๋น๊ต
๊ตฌ๋ถ ํญ๋ชฉ | @Controller | @RestController |
---|---|---|
๋ฆฌํด ํ์ | View ์ด๋ฆ ๋๋ ModelAndView ๊ฐ์ฒด / ResponseEntity ์ง์ ์ง๋ ฌํํ ๋ฐ์ดํฐ | ๊ฐ์ฒด ๋๋ ๋ฌธ์์ด (์๋ JSON ์ง๋ ฌํ๋จ) |
์ฌ์ฉ ๋ชฉ์ | ํ ํ๋ฆฟ ๋ ๋๋ง ๊ธฐ๋ฐ ์น ์ฑ (HTML) / ํ์์ JSON ์๋ต๋ ๊ฐ๋ฅ | API ์๋ต์ ์ํ JSON/๋ฐ์ดํฐ ์ ์ก์ฉ |
์๋ต ์ฒ๋ฆฌ | ViewResolver๋ฅผ ํตํด HTML ๋ ๋๋ง | HttpMessageConverter๋ฅผ ํตํด JSON ์ง๋ ฌํ |
์กฐํฉ ์ด๋ ธํ ์ด์ | @Controller , @ResponseBody ํ์ | @RestController ๋จ๋
์ฌ์ฉ ๊ฐ๋ฅ |
๐ฏ๊ฒฐ๋ก
@Controller
๋ View ๊ธฐ๋ฐ ์๋ต์ ๊ธฐ๋ณธ์ผ๋ก ํ์ง๋ง@ResponseBody
๋ResponseEntity
๋ฅผ ์ฌ์ฉํ๋ฉด JSON ๋ฐ์ดํฐ๋ ์๋ตํ ์ ์๋ค.@RestController
๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ๋ฐ์ดํฐ(JSON ๋ฑ) ์๋ต์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ฉฐ, API ์๋ฒ ๊ตฌํ์ ์ ํฉํ๋ค.
Spring MVC์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ๋ฆ์ ์ดํดํ๋ฉด, ์ํฉ์ ๋ง๋ ์ด๋ ธํ ์ด์ ์ ํ์ด ์ฌ์์ง๋ค. View ๊ธฐ๋ฐ ์น ํ์ด์ง์ RESTful API๋ฅผ ๊ตฌ๋ถํ์ฌ ์ค๊ณํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
โ๏ธEndNote
์ฌ์ ์ง์
- MVC ๋์์ธ ํจํด
- Servlet๊ณผ DispatcherServlet์ ์ญํ
- View Resolver, HttpMessageConverter ์๋ ์๋ฆฌ