Spring/Spring MVC

Spring MVC

민철킹 2021. 5. 1. 18:18

스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작하므로 매우 유연하고 실용적이다.

 

@RequestMapping

스프링은 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 만들었는데

이것이 바로 @RequestMapping을 사용하는 컨트롤러이다.

 

실무에서도 거의 이 방식의 컨트롤러를 사용

 

 

 

  • @controller
    • 스프링이 자동으로 스프링 빈으로 등록(내부에 @Component 애노테이션이 있어 컴포넌트 스캔의 대상)
    • 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식
  • @RequestMapping
    • 요청 정보를 매핑
    • 해당 URL이 호출되면 이 메서드가 호출된다. 메서드의 이름은 임의로 작명
  • ModelAndView
    • 모델과 뷰 정보를 담아서 반환

application.properties에 prefix와 suffix를 설정해두었기 때문에 매핑되어 해당 뷰가 반환되었음.

 

RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가

클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식

  • 이렇게 작성하여도 @Controller를 붙인 것과 똑같이 동작한다

 

회원 저장 컨트롤러

 

 

회원 목록 컨트롤러

 

 

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

 


컨트롤러 통합

현재 @RequestMapping이 클래스 단위가 아닌 메서드 단위에 적용되어 있다. 따라서 컨트롤러 클래스들을 유연하게 하나로 통합해보자

 

 

위와 같이 하나로 묶어서 사용할 수 있다.

또한 현재 RequestMapping의 /springmvc/v2/members/가 중복되어 사용되는 것을 볼 수 있는데

공통부분의 매핑을 클래스 단위에 두어 중복을 제거할 수 있다.

클래스 단위의 RequestMapping
메서드 단위(회원 폼)

 

메서드 단위(회원 목록)
메서드 단위(회원 저장)

 

위와 같이 사용하게 되면 클래스 단위의 매핑정보와 조합된다. 

  • ex) /springmvc/v2/members + /new-form = /springmvc/v2/members/new-form

실용적인 방식

 

Model 파라미터

  • 스프링 MVC가 제공하는 Model을 파라미터로 받을 수 있다.

ViewName 직접 반환

  • 뷰의 논리 이름을 반환할 수 있다.

@RequestParam

  • 스프링은 HTTP 요청 파라미터를 @RequestParam 으로 받을 수 있다.
  • @RequestParam("username") 은 request.getParameter("username") 와 거의 같은 코드라 생각하면 된다.
  • GET 쿼리 파라미터, POST Form 방식을 모두 지원한다.

Postman을 사용하여 직접 테스트해보면

GET방식으로 전송
POST방식으로 전송

GET/POST에 상관없이 응답이 오는 것을 확인할 수 있다.

 

 

@RequestParam을 사용하면 HTTP 메서드에 상관없이 사용되기 때문에 이를 개선하기 위해

어떤 것은 GET을 사용해야하고, 어떤것은 POST를 사용해야하도록 지정해줄 수 있다.

GET은 주로 조회에 사용되고 POST는 수정에 사용되는데 이를 상관없이 사용하게 되면

많은 문제들이 발생할 수 있기 때문에 이를 지정해주는 것이 좋은 설계이다.

 

@RequestParam의 속성 중에 method 속성을 통해 지정해줄 수 있다.

이 상태에서 POST방식으로 서버로 요청을 전송하니 405 오류가 발생하는 것을 확인할 수 있다.

 

 

이것보다 더 편리한 방식으로 스프링이 제공하는데 바로 @GetMapping, @PostMapping이다.

Get, Post, Put, Delete, Patch 모두 애노테이션이 제공된다.

애노테이션을 위한 애노테이션 ㅋㅋ

 

반응형

'Spring > Spring MVC' 카테고리의 다른 글

요청 매핑  (0) 2021.05.06
로깅 간단히 알아보기  (0) 2021.05.03
ViewResolver  (0) 2021.05.01
Handler Mapping & Handler Adapter  (0) 2021.04.30
Spring MVC 전체 구조  (0) 2021.04.30