스프링MVC

Seung·2023년 1월 9일
0

MVC란

  • MVC패턴이라고 Model, View, Controller 의 약자이다.

    [출처 : 김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술]
  • 컨트롤러 : HTTP 요청을 받아서 검증하고, 비즈니스 로직을 실행한다.
    그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다,
  • 모델 : 뷰에 출력할 데이터를 담아둔다. 뷰에 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 된다.
  • 뷰 : 모델에 담겨있는 데이터를 사용해서 화면을 만든다.

스프링 MVC

[출처 : 김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술]
  • 동작순서
  1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.

  2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.

  3. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.

  4. 핸들러 실행 : 핸들러 어댑터가 실행한다.

  5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.

  6. viwResolver 호출 : 뷰 리졸버를 찾고 실행한다.

  7. View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.

  8. 뷰 렌더링 : 뷰를 통해서 뷰를 렌더링 한다.

    HandlerMapping 과 HandlerAdapter
    핸들러 매핑은 DispatcherServlet이 요청에 맞는 핸들러를 찾는 과정이다.
    핸들러 어댑터는 핸들러 매핑에서 찾은 핸들러 객체를 다룰 수 있는 어댑터이다.
    다양한 핸들러의 return 타입은 String, ModelAndView 등 다양하며, Parameter로 들어오는 값도 HttpServletRequest로 받거나 HttpServletResponse로 받는 등 다양한 형식으로 받을 수 있다.
    이러한 다양한 핸들러별 매핑과 어댑터가 스프링에서 지원을 하고있다.

    ViewResolver
    뷰리졸버는 컨트롤러에서 String으로 반환시 논리적 이름을
    물리적경로로 반환하는 역할이다.

애노테이션 정리

  • @RequestParam : HTTP 요청 파라미터를 사용 가능
    ex) public String save(@RequestParam("name") String name)

    • 파라미터명과 변수명이 동일시 ("name") 생략가능
    • 단순타입일 경우 @RequestParam 생략 가능
      ex) public String save(String name)
  • @RequestMapping : 요청 정보를 매핑한다.
    해당 URL이 호출되면 메서드가 호출된다.
    핸들러 매핑,핸들러 어댑터중 우선순위가 가장 높다.
    클래스,메서드 레벌에서 사용가능
    ex) @RequestMapping("/home")

  • @GetMapping / @PostMapping : @RequestMapping + HTTP 메서드 구분

  • @PathVariable : 특정 URL 경로를 @PathVariable로 매칭하여 사용
    ex) URL : /users/{userId} -> /users/1
    @GetMapping("/users/{userId}")
    public String userList(@PathVariable("userId") String userId)

    • 경로변수명과 변수명 동일시 ("userId") 생략가능
      ex) public String userList(@PathVariable String userId)
  • @ModelAttribute : 해당 객체를 생성하고, 해당 객체의 프로퍼티를 찾는다.
    해당 프로퍼티의 setter를 이용하여 파라미터 값을 바인딩
    모델에 지정한 객체를 저장 (model.addAttribute("users",users))
    ex) Users라는 클래스에 username,age가 있는 경우
    public String userView(@ModelAttribute Users users)
    사용시 Users라는 객체가 생성되고, 요청 파라미터의 값도 저장되어있다.

    • @ModelAttribute 도 생략가능
  • @RestController : @Controller + @ResponsBody

    • @ResponsBody : View 조회를 무시하고, HTTP 메시지 바디에 직접 내용 입력
profile
한번 해봅시다.

0개의 댓글