# 스프링 MVC - 실용적인 방식

컨트롤러V3에서 컨트롤러V4로 만들었던 것을 기억해보자.\
ModelView를 반환하다가 View의 논리적 이름만 반환해서 코드가 훨씬 간결해졌었다.

스프링의 애노테이션 기반 컨트롤러는 인터페이스 기반으로 설계되어있기 때문에 다형성을 통해 **각 메서드들(컨트롤러)는 ModelAndView로 리턴해도 되고, 문자로 리턴해도 된다!**

1. Model 파라미터 : 스프링도 Model을 만들어서 넣어주는 기능을 제공한다!
2. ViewName 직접 반환 : 뷰의 논리 이름을 반환할 수 있다.
3. **@RequestParam** : **HTTP 요청 파라미터를 @RequestParam 으로 받을 수 있다.**⭐️\
   String으로 반환되는 것을 자동 형변환까지 가능하다!\
   @RequestParam("username") = request.getParameter("username")\
   GET 쿼리 파라미터, POST Form 방식을 모두 지원한다.
4. @RequestMapping ➡@GetMapping, @PostMapping\
   URL만 매칭하는 것이 아니라, HTTP Method도 함께 구분할 수 있다.\
   (Get, Post, Put, Delete, Patch 모두 애노테이션이 준비되어 있다.)\
   이렇게 HTTP 메서드별로 구분해서 코드를 작성하는 이유\
   여러 side-effect들을 막기 위함이라고 한다.\
   단순 조회하는 경우에는 GET방식으로만 받는다.\
   정보의 수정이 일어나는 경우에는 POST 방식으로만 받는다.
