๐ข [Model] - ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ, ๋ชจ๋ธ ์ ๋ฌ
Q1.
@ModelAttribute
์ Model
๊ฐ์ฒด๋ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น?
๊ฐ๊ฐ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ์ง ์ค๋ช
ํด๋ณด์ธ์.
โ Model ์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ View ์๊ฒ ์ ๋ฌํ ๋ ์ฌ์ฉ๋๊ณ , @ModelAttribute ๋ ์ฃผ๋ก ํผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ๊ฑฐ๋, ๊ณตํต๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋๋ค.
Q2.
๋ค์ ์์ฒญ์ด ๋ค์ด์์ ๋ Controller ๋ฉ์๋๋ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ ๊น?
GET /persons/342?order=-createdAt
@Controller
public class PersonController {
@GetMapping("/persons/{id})
public void subCreatedAt(@Pathvariable long id,
@RequestParam String order) {
...
}
}
๐ต [Operation] - ์ปจํธ๋กค๋ฌ ๋์ ํ๋ฆ
Q3.
๋ค์ ์ค @RequestMapping
๊ณผ @GetMapping
์ ์ฐจ์ด๋ก ์ณ์ ์ค๋ช
์ ๋ฌด์์ธ๊ฐ์?
a) @GetMapping
์ ๊ฒฝ๋ก ๋งคํ๋ง ๊ฐ๋ฅํ๊ณ , @RequestMapping
์ ๋ฉ์๋ ๋งคํ๋ ๊ฐ๋ฅํ๋ค.
b) @GetMapping
์ HTTP GET ์์ฒญ๋ง ๋งคํํ๊ณ , @RequestMapping
์ method ์์ฑ์ ๋ฐ๋ผ ๋ค์ํ HTTP ๋ฉ์๋ ๋งคํ์ด ๊ฐ๋ฅํ๋ค.
c) ๋ ์ด๋
ธํ
์ด์
์ ์์ ํ ๋์ผํ๋ค.
โ (b)
Q4.
HttpSession
, @CookieValue
, @RequestHeader
์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๋ชจ๋ HttpServletReqeust ์์ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ณตํต์ ์ด ์๊ณ , ๊ฐ ์ญํ ์๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
- HttpSession : ์๋ฒ ์ธก ์ธ์ ์ ์ฅ์๋ฅผ ์ ๊ทผํ๊ณ , HttpServletRequest ๋ฅผ ์ด์ฉํด ์ ๊ทผํ๋ค.
- CookieValue : ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์ฟ ํค์ ๊ฐ์ ๋ฐ์ธ๋ฉ ํ ์ ์๋ ์ด๋ ธํ ์ด์
- RequestHeader : Http ์์ฒญ์ ํค๋ ๊ฐ์ ๋ฐ์ธ๋ฉ ํ ์ ์๋ ์ด๋ ธํ ์ด์
๐ด [Concept] - Spring MVC ๊ตฌ์กฐ ์ดํด
Q5.
Spring MVC์์ DispatcherServlet
์ ์ญํ ์ ๋ฌด์์ธ๊ฐ์?
์คํ ํ๋ฆ์ ์์๋ฅผ ๊ฐ๋จํ ์ค๋ช
ํด๋ณด์ธ์.
: DispatcherServlet ์ Spring MVC์ Front Controller ๋ก์จ, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ HandlerMapping โ Controller โ ViewResolver ๋ฅผ ๊ฑฐ์ณ View ๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌํ๋ ์ค์ฌ์ ์ธ ์ญํ ์ ์ํํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ โ DispatcherServlet ์์
- ์ ์ ํ ํธ๋ค๋ฌ(Controller) ๋งคํ
- ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ํตํด ์คํ
- ๋ชจ๋ธ + ๋ทฐ ์ด๋ฆ ๋ฐํ
- ViewResolver ๋ฅผ ํตํด View ์ ํ
- View ๋๋๋ง โ ์๋ต ๋ฐํ
๐ค Spring MVC ๊ด๋ จ ๋ฉด์ ์ง๋ฌธ ์ถ์ฒ
โ ๊ธฐ๋ณธ ๊ฐ๋
Q1. Spring MVC์์ DispatcherServlet
์ด ํ๋ ์ญํ ๊ณผ ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ์ ์ค๋ช
ํด์ฃผ์ธ์.
: DispatcherServlet ์ Spring MVC์ Front Controller ๋ก์จ, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ HandlerMapping โ Controller โ ViewResolver ๋ฅผ ๊ฑฐ์ณ View ๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌํ๋ ์ค์ฌ์ ์ธ ์ญํ ์ ์ํํฉ๋๋ค.
โ ์ปจํธ๋กค๋ฌ ์ด๋ ธํ ์ด์ ๊ตฌ๋ถ
Q2. @Controller
, @RestController
์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
: Controller ๋ ViewResolver ๋ฅผ ํตํด ์ ์ ํ View๋ฅผ ๋ฐํํ๊ณ , RestController ๋ Controller ์ ResponseBody์ ์กฐํฉ์ผ๋ก, View ๋์ ๋ฐํ๊ฐ์ Json์ด๋ XML๋ก ์ง๋ ฌํ ํ์ฌ ์๋ตํฉ๋๋ค.
โ ์์ฒญ ์ฒ๋ฆฌ์ ๋ฐ์ธ๋ฉ
Q3. @RequestParam
, @PathVariable
, @ModelAttribute
๋ ๊ฐ๊ฐ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๋์? ์ฐจ์ด๋ฅผ ์ค๋ช
ํด์ฃผ์ธ์.
- @RequestParam ์ ์์ฒญ URI์ ? ๊ณผ ๊ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ์์ ๋ ์ฌ์ฉํ๊ณ
- @PathVariable ์ ๊ฐ๋ณ์ ์ธ ๊ฐ์ ๋งคํํ ๋ ์ฌ์ฉํ๊ณ ,
- @ModelAttribute ๋ ์ฃผ๋ก ํผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉ ํ ๋ ์ฌ์ฉํ๊ฑฐ๋, ๊ณตํต๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํ ๋ ์ฌ์ฉํฉ๋๋ค.
โ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐ View ์ฒ๋ฆฌ
Q4. ์ปจํธ๋กค๋ฌ์์ ๋ฐ์ดํฐ๋ฅผ View๋ก ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์?
Model ๊ฐ์ฒด์ ์์ฑ์ ์ถ๊ฐํ๋ฉด, ํด๋น ์์ฑ์ ViewResolver ์ ์ํด ๋ ๋๋ง๋๋ ๋ทฐ๋ก ์๋์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
โ ๋ถ๊ฐ ์ง๋ฌธ (์ค๋ฌด ๊ฐ๊ฐ ํ์ธ)
Q5. @GetMapping(params = "!id")
์ ๊ฐ์ ์กฐ๊ฑด๋ถ ๋งคํ์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น์?
ํน์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ์ง ์์ ๋๋ง ์คํ๋์ด์ผ ํ๋ ์์ฒญ์ ๊ตฌ๋ถํ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, /search
์์ฒญ์์ id
ํ๋ผ๋ฏธํฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ ์ ์ฒด ๋ชฉ๋ก์, ์์ ๊ฒฝ์ฐ์๋ ์์ธ ๋ชฉ๋ก์ ์กฐํํ๋๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.