Spring

์Šคํ”„๋ง MVC ๊ตฌ์กฐ, ๊ฐ„๋‹จํ•œ ์• ๋…ธํ…Œ์ด์…˜

์กฐ๋ฐˆ๋ฐ 2022. 4. 19. 01:48

๐Ÿ’ก 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์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š”๋‹ค