본문 바로가기
Backend, Server/Spring MVC

[Spring MVC] 스프링 MVC 사용법

by ggyongi 2022. 1. 18.
반응형

스프링 MVC 시작하기

@Controller
public class SpringMemberFormControllerV1 {

    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process() {
        return new ModelAndView("new-form");

    }
}

@Controller :

- 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨)

- 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.

 

@RequestMapping : 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.

 

ModelAndView : 모델과 뷰 정보를 담아서 반환하면 된다.

 

 

** 앞서 배웠듯 우선순위가 가장 높은 핸들러 매핑과 핸들러 어댑터는

RequestMappingHandlerMapping, RequestMappingHandlerAdapter이다.

이때 RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가 클래스 레벨에 붙어있는 경우에만 매핑 정보로 인식함

 

<다른 예시>

@Controller
public class SpringMemberSaveControllerV1 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/springmvc/v1/members/save")
    public ModelAndView process(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        ModelAndView mv = new ModelAndView("save-result");
        mv.addObject("member", member);
        return mv;
    }
}

mv.addObject("member", member) : 스프링이 제공하는 ModelAndView를 통해 Model 데이터를 추가할 때는 addObject()를 사용하면 된다. 이 데이터는 이후 뷰를 렌더링 할 때 사용됨

 

 

한편, @RequestMapping은 메서드 단위로 적용된다. 따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다.

+ 아래와 같이 클래스레벨에 @RequestMapping을 두면 메서드 레벨과 조합이 된다.

@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) {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        ModelAndView mv = new ModelAndView("save-result");
        mv.addObject("member", member);
        return mv;
    }

    @RequestMapping
    public ModelAndView members() {

        List<Member> members = memberRepository.findAll();

        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);
        return mv;
    }
}

각각은 다음과 같이 매핑된다.

@RequestMapping("/springmvc/v2/members/new-form")

@RequestMapping("/springmvc/v2/members/save")

@RequestMapping("/springmvc/v2/members")

 

 

실용적인 방식

스프링 MVC는 개발자에게 수많은 편의 기능을 제공한다.

위의 버전2와 비교해보자.


@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";
    }
}

- Model 파라미터 : 파라미터로 Model을 받을 수 있다.

 

- ViewName 이름을 직접 반환할 수 있다. 반환 형식을 String으로 바꿔주기만 하면 됨.

(ModelAndView를 새롭게 만들 필요가 없어짐)

 

- @RequestParam 사용 : GET 쿼리 파라미터, POST FORM 방식의 HTTP 요청 파라미터를 받을 수 있음

 

- @GetMapping, @PostMapping : HTTP 메서드도 구분이 가능해짐

(같은 주소로 매핑하더라도 메서드마다 다르게 동작하도록 할 수 있음)

 

 

 

---------------
참고: 인프런 김영한님 강의(스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술)

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글