์คํ๋ง MVC ๊ตฌ์กฐ, ๊ฐ๋จํ ์ ๋ ธํ ์ด์
๐ก SpringMVC ๊ตฌ์กฐ
- FrontController๊ฐ DispatcherServlet์ด๋ค <- ์คํ๋ง MVC ํต์ฌ
๐ DispatcherServlet
- ๋ถ๋ชจ ํด๋์ค์์ HttpServlet์ ์์๋ฐ์์ ์ฌ์ฉํ๊ณ , ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค
- ์คํ๋ง ๋ถํธ๋ DispatcherServlet์ ์๋ธ๋ฆฟ์ผ๋ก ์๋์ผ๋ก ๋ฑ๋กํ๋ฉด์ ๋ชจ๋ ๊ฒฝ๋ก(urlPatterns="/")์ ๋ํด ๋งคํํ๋ค
* ๋งคํํ๋ค : ํ๋์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋์์ํค๋ ๊ฒ
๐ ๋์์์
1. ํธ๋ค๋ฌ ์กฐํ : ํธ๋ค๋ฌ ๋งคํ์ ํตํด ์์ฒญ URL์ ๋งคํ๋ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ฅผ ์กฐํํ๋ค
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ : ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์กฐํํ๋ค
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์คํํ๋ค
4. ํธ๋ค๋ฌ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ค์ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ค
5. ModelAndView ๋ฐํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ๋ค๋ฌ๊ฐ ๋ฐํํ๋ ์ ๋ณด(๋ ผ๋ฆฌ ๋ทฐ ์ด๋ฆ : new form)๋ฅผ
ModelAndView๋ก ๋ณํํด์ ๋ฐํํ๋ค
6. viewResolver ํธ์ถ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ฐพ๊ณ ์คํํ๋ค
7. View ๋ฐํ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ์ ๋ฌผ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ , ๋ ๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค
8. ๋ทฐ ๋ ๋๋ง : ๋ทฐ๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ๋ค
๐ก ์ ๋ ธํ ์ด์ ์ด์ฉ
๐ @RequestMapping
- RequestMappingHandlerMapping
- RequestMappingHandlerAdapter
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public ModelAndView newForm() {
return new ModelAndView("new-form");
}
@RequestMapping("/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
}
@RequestMapping
public ModelAndView members() {
}
}
๐ @Controller
- ์คํ๋ง์ด ์๋์ผ๋ก ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค (๋ด๋ถ์ @Component ์กด์ฌ -> ์ปดํฌ๋ํธ ์ค์บ์ ๋์)
- ์คํ๋ง MVC์์ ์ปจํธ๋กค๋ฌ๋ก ์ธ์
- ๋ฐํ ๊ฐ์ด String์ด๋ฉด ๋ทฐ ์ด๋ฆ์ผ๋ก ์ธ์๋๋ค -> ๋ทฐ๋ฅผ ์ฐพ๊ณ ๋ทฐ๊ฐ ๋๋๋ง ๋๋ค
โ @RestController
- ๋ฐํ ๊ฐ์ผ๋ก ๋ทฐ๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ, HTTP ๋ฉ์์ง ๋ฐ๋์ ๋ฐ๋ก ์ ๋ ฅํ๋ค
ex) return "ok"; => HTML ๋ฉ์์ง ๋ฐ๋์ ok๋ผ๋ ๋ฉ์์ง ์ถ๋ ฅ
๐ @RequestMapping
- ์์ฒญ ์ ๋ณด ๋งคํํ๋ค
- ํด๋น URL์ด ํธ์ถ๋๋ฉด ์ด ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค (๋ฉ์๋์ ์ด๋ฆ์ ์์๋ก ์ง๋๋ค)
- ๋๋ถ๋ถ์ ์์ฑ์ ๋ฐฐ์ด[]๋ก ์ ๊ณตํ๋ฏ๋ก ๋ค์ค ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
ex) @RequestMapping{"/save", "/cancel"}
๐ ModelAndView : ๋ชจ๋ธ๊ณผ ๋ทฐ ์ ๋ณด๋ฅผ ๋ด์์ ๋ฐํํ๋ฉด ๋๋ค
๐ ํ ๋ฐ์๊ตญ ๋
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String newForm() {
return "new-form";
}
@PostMapping("/save")
public String save(
@RequestParam("username") String username,
@RequestParam("age") int age,
Model model) {
Member member = new Member(username, age);
memberRepository.save(member);
model.addAttribute("member", member);
return "save-result";
}
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
๐ @RequestMapping -> @GetMapping, @PostMapping ๊ตฌ๋ถํ ์ ์๋ค
๐ ViewName ์ง์ ๋ฐํ : ๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ์ ๋ฐํํ ์ ์๋ค
๐ @RequestParam ์ฌ์ฉ
: ์คํ๋ง์ HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ @RequestParam์ผ๋ก ๋ฐ์ ์ ์๋ค
: @RequestParam("username") == request.getParameter("username")
: GET ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, POST Form ๋ฐฉ์ ๋ชจ๋ ์ง์
๐ Model ํ๋ผ๋ฏธํฐ
: save(), members()๋ฅผ ๋ณด๋ฉด Model์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค