์คํ๋ง ํ๋ ์์ํฌ๋ MVC๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ์ฌ๊ธฐ์ Cotroller๋ ํ๋ฉด(View)์ ๋น์ฆ๋์ค ๋ก์ง(Model)์ ์ฐ๊ฒฐ์ํค๋ ๋ค๋ฆฌ ์ญํ ์ ํ๋ค.
์ฝ๊ฒ ๋งํด์ โ/index ๋ก ๊ฐ์ค~โ ๋ผ๊ณ ์์ฒญํ๋ฉด ์ฃผ์๋ฅผ ๋ฐ์ ์ด๋๋ก ๊ฐ์ง ๋ถ์ํ๊ณ ๋ง๋ ๊ธธ๋ก ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ญํ ์ด๋ค.
์คํ๋ง์์๋ IoC์์ ๋ง๋ค์ด ๋์ ๊ฐ์ฒด๋ฅผ ํตํด ์ ์ดํ๋ฏ๋ก @Controller ์ด๋ ธํ ์ด์ ์ผ๋ก ์ด ํด๋์ค๊ฐ ์ปจํธ๋กค๋ฌ์ธ์ง ํ์ ํ ์ ์๋ค. โ ์ดํด๊ฐ ์๋๋ค๋ฉด? [์ ๋ฆฌ] Spring ์์ ํ์ธํ์.
servlet-context.xml ํ์ผ์ ๋ณด๋ฉด ์ปจํธ๋กค๋ฌ ์ด๋ ธํ ์ด์ ๊ณผ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฅผ ๋งคํํด์ ์ฐ๊ฒฐํ ๊ฒ์ด์ง์ ๋ํ ์ปจํธ๋กค๋ฌ์ ์ค์ ์ด ๋ค์ด์์ด ์ค์ ํ ๊ฐ์ ๋ฐ๋ผ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ด์ง๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ค.
@Controller | ํด๋น ํด๋์ค๊ฐ Controller์์ ๋ํ๋ด๊ธฐ ์ํ ์ด๋ ธํ ์ด์ |
---|---|
@RequestMapping | ์์ฒญ์ ๋ํด ์ด๋ค Controller, ์ด๋ค ๋ฉ์๋๊ฐ ์ฒ๋ฆฌํ ์ง๋ฅผ ๋งตํํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ |
@RequestParam | Controller ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ์น์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋งตํํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ |
@ModelAttribute | Controller ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ ๋ฆฌํด๊ฐ์ Model ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ |
@SessionAttributes | Model ๊ฐ์ฒด๋ฅผ ์ธ์ ์ ์ ์ฅํ๊ณ ์ฌ์ฉํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ |
@RequestPart | Multipart ์์ฒญ์ ๊ฒฝ์ฐ, ์น์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋งตํ๊ฐ๋ฅํ ์ด๋ ธํ ์ด์ (egov 3.0, Spring 3.1.x๋ถํฐ ์ถ๊ฐ) |
@CommandMap | Controller๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ Mapํํ๋ก ๋ฐ์ ๋ ์น์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋งตํํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ (egov 3.0๋ถํฐ ์ถ๊ฐ) |
@ControllerAdvice | Controller๋ฅผ ๋ณด์กฐํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก Controller์์ ์ฐ์ด๋ ๊ณตํต๊ธฐ๋ฅ๋ค์ ๋ชจ๋ํํ์ฌ ์ ์ญ์ผ๋ก ์ฐ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ (egov 3.0, Spring 3.2.X๋ถํฐ ์ถ๊ฐ) |
Controller์ ์ข ๋ฅ๋ ์์ ๊ฐ๋ค. ๊ทธ ์ค์ ๋ง์ด ์ฌ์ฉํ๋ Cotroller์ ๋ํด ์์๋ณด์.
์ด ์ด๋ ธํ ์ด์ ์ผ๋ก ์ธํด ๋ด๋ถ์ ์ผ๋ก ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ์ํํ ์ ์๋ค.
์ฌ์ฉ์๊ฐ ํน์ uri๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด Controller์์ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ง ์ ์ํ๋ค.
์ด๋ ๋ค์ด์จ ์์ฒญ์ ํน์ ๋ฉ์๋์ ๋งคํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด@RequestMapping()์ด๋ค.
๊ทธ๋ฌ๋ method๋ ํญ์ ์ค์ ํด์ฃผ๊ธฐ์๋ ๋ถํธํ๋ฏ๋ก @GetMapping์ด๋ @PostMapping์ ์ฌ์ฉํ๋ค.
@Controller
@RequestMapping("/board")
public class BoardController {
}
๋ง์ฝ ์์ ๊ฐ์ด @RequestMapping("/board")๋ผ๊ณ ํ๋ค๋ฉด uri์ http:/localhost:8080/board ๋ก ์ค๋ ์ฃผ์๋ ๋ชจ๋ BoardController๊ฐ ๋ฐ๊ฒ ๋๋ค.
์์์ ์ค๋ช ํ๋ฏ์ด @RequestMapping์ HTTP Method๋ฅผ ๊ฐ๋จํ ํ๊ธฐ ์ํด ๋ฑ์ฅํ ์ด๋ ธํ ์ด์ ์ด๋ค. @GetMapping์ด๋ @PostMapping์ ์ฌ์ฉํ์ฌ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ HTTP Method์ ๋งคํํ ์ ์๋ค.
URL์ ๋ณ์๋ฅผ ํฌํจ์์ผ ์์ฒญํ์ฌ ๋ณด์์ ์ทจ์ฝํ๋ค.
์บ์ฑ์ด ๊ฐ๋ฅํ๋ค ( ํ ๋ฒ ์ ๊ทผํ ํ์ ๋๊ฐ์ ์์ฒญ์ ํ ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๊ธฐ ์ํด ๋ ์ง์คํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์ํค๋ ๊ฒ์ ์บ์ฑ์ด๋ผ ํจ)
๋ทฐ๋ก ์ด๋ํด๋ผ
๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฐํํด๋ผ
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฆฌ์์ค๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ
HTTP Post Method.
URL์ ๋ณ์์ ๋ณ์๋ฅด ๋ ธ์ถํ์ง ์๊ณ ์์ฒญํ์ฌ get๋ฐฉ์๋ณด๋ค ๋ณด์์ด ์ข๋ค.
์ ์กํ๋๋ฐ ๊ธธ์ด์ ํ์ด ์๊ณ ์บ์ฑ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๋ฑ๋ก(์ ์ฅ)ํ ๋ ์ฌ์ฉ
์ต๊ทผ HTTP API๋ ๋ฆฌ์์ค ๊ฒฝ๋ก์ ์๋ณ์๋ฅผ ๋ฃ๋ ์คํ์ผ์ ์ ํธํ๋ค. ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ์๋ณ์๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง ๊ฒฝ๋ก ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋งคํ๋๋ ๋ถ๋ถ์ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค.
@GetMapping("/detail/{id}")
public String detail(@PathVariable("id") Long id) {
return "board/boardDetail";
}
์์ ๊ฐ์ด PathVariable์ ์ฌ์ฉํ์ ๋ localhost:8080/detail/108 ๋ก ์ ๋ ฅํ๋ฉด id๊ฐ id(ํ๋ผ๋ฏธํฐ)๋ก ๋งค์นญ๋์ด ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ค์ค ์ฌ์ฉ๋ ๊ฐ๋ฅํ๋ค.
๋ทฐํ์ด์ง๋ก ์ด๋ํ์ง ์๊ณ ๊ฐ๋ง ๋ณด๋ด๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
@GetMapping("/ajax1")
public @ResponseBody String ajax(){
return "ajax1๋ฐํ๊ฐ";
}
@RestCotnroller๋ @Cotroller์ @ResponseBody๊ฐ ๊ฒฐํฉ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
์ฆ, @ResponseBody ์ด๋ ธํ ์ด์ ์ ๋ฐ๋ก ๋ถ์ด์ง ์์๋ ๋ฌธ์์ด๊ณผ JSON ๋ฑ์ ์ ์กํ ์ ์๋ค.
๋ทฐํ์ด์ง๋ก ์ด๋ํ๋ ์ญํ ์ ํ๋ @Controller์ ๋ฌ๋ฆฌ @RestController๋ ๋ทฐํ์ด์ง๋ก ์ด๋ํ์ง ์๊ณ ๋ฐ์ดํฐ(๊ฐ)๋ง ๋ฆฌํดํ๋ค.
@RestController("/ajax1")
public String ajax(){
return "ajax1๋ฐํ๊ฐ";
}
@RequestParam ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ์ ๋ฌํ๋ ๊ฐ์ Handler(Controller)์ ๋งค๊ฐ๋ณ์๋ก 1:1 ๋งคํํ ๋ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
@Controller
public class TestController {
@GetMapping("/")
public String getTestPage(@RequestParam("name") String name) {
System.out.println("์ด๋ฆ : " + name);
return "test";
}
}
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ /?name=test ๋ก ์์ฒญํ๋ค๋ฉด ์ ํธ๋ค๋ฌ์ ๋งค๊ฐ๋ณ์์ธ name์ โtestโ๊ฐ ๋งคํ๋๋ค.
์ฌ์ฉ์์๊ฒ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด์ ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋๋ฐ ์ด ๊ณผ์ ์ @ModelAttribute ์ด๋ ธํ ์ด์ ์ ํตํด ์๋ํํ ์ ์๋ค.
@RequestParam๊ณผ @ModelAttribute์ ์ฐจ์ด๋ 1:1 ๋งคํ์ด๋ ๊ฐ์ฒด ๋งคํ์ด๋์ด๋ค.
@ModelAtrribute๋ฅผ ์๋ตํ ์๋ ์์ง๋ง @RequestParam๋ ์๋ตํ ์ ์์ด ํผ๋์ด ๋ฐ์ํ ์ ์๋ค. ์คํ๋ง์์๋ ์ด๋ฌํ ํผ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ ๊ณตํ๋ค.
Spring MVC Model์ ์ดํดํ๊ธฐ ์ํด์ Controller๊ฐ ํ๋ ์ญํ ์ ์ ํํ ์ดํดํ ํ์๊ฐ ์๋ค.
MangKyu, https://mangkyu.tistory.com/49
It is True, https://ittrue.tistory.com/244