@RequestMapping(Feat. @GetMapping, @PostMapping)

2022. 4. 11. 13:39
반응형

@RequestMapping

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

 

과거에는 스프링 프레임워크가 MVC부분이 약해서 스프링을 사용하는 개발자들은 MVC부분은 다른 프레임워크 기술을 사용했었다고 한다. 그런데 @RequestMapping이 등장하고 나서 MVC 부분이 강해지면서 스프링의 완승으로 끝났다고 한다. 그럼 바로 @RequestMapping 이 무엇인지 알아보자.

 

해당 포스팅은 스프링 MVC의 내부 동작원리를 다 안다고 가정하에 진행한다. HTTP요청이 들어오면 핸들러 매퍼와 핸들러 어댑터를 통해서 핸들러를 찾고 실행하는 것을 다들 알 것이다. 동작원리를 모른다면 다음 링크를 통해서 알아보고 오길 바란다.

https://cokeprogrammer.tistory.com/25

 

Spring MVC - FrontController(Dispatcher Servlet)

스프링 MVC의 내부 동작원리에 대해서 공부해보았다. 스프링 MVC 는 프론트 컨트롤러 패턴과 어댑터 패턴을 사용해서 필요한 부분만 사용할 수 있게 유연하게 HTTP 요청을 처리하고 응답한다. 오늘

cokeprogrammer.tistory.com

 

@RequestMapping은 일단 다음과같이 클래스 필드나 메서드 필드에 사용한다.

@Controller
@RequestMapping("/mapping/users")
public class MappingClassController {

    @RequestMapping("/test")
    public String user(){
        return "get users";
    }
}

@RequestMapping 의 동작원리는 다음과 같다.

  1. @RequestMapping에 붙어있는 URL에 해당하는 핸들러가 존재하는지 조회한다.
  2. 핸들러가 존재하면 핸들러 어댑터는 해당 핸들러를 처리할 수 있는 로직이 존재하는지 조회한다.
  3. 핸들러를 실행한다.

그렇다. 스프링 MVC의 HTTP 요청이 들어오면 처음으로 실행되는 내부 동작의 절반이 이 애노테이션 하나로 처리할 수 있다. 매우 강력하지 않은가?

 

@RequestMapping 은 클래스 레벨에만 붙일수도 있고 메서드 레벨에만 붙일수도 있고 둘 다 붙일수도 있다. 클래스 레벨에만 붙인다면 그 하위 모든 메서드에 첫 URL 경로가 동일하게 적용된다. 그리고 메서드 레벨에만 붙인다면 모두 다르게 URL 경로를 설정할 수 있다. 둘 다 붙인다면 경로의 첫번째가 클래스 레벨의 URL 경로가 되고 이어지는 URL 경로는 각각의 메서드의 URL 경로가 된다. 예를들어 위의 코드에서 user() 메서드의 URL 경로는 'https://localhost:8080/mapping/users/test' 가 될것이다.

 

@GetMapping, PostMapping

다들 HTTP 요청을 할 때, HTTP Method를 목적에 따라서 다르게 설정해야 한다는 것을 알고있을 것이다. 그런데 @RequestMapping 은 API 테스트 애플리케이션에서 수행해보면 모든 HTTP Method에 대해서 동작한다. 이게 어떻게 된 일일까? 그렇다. @RequestMapping 애노테이션의 속성에는 method를 설정할 수 있는 속성이 있는데, 이 속성의 기본값은 모든 HTTP Method라서 따로 설정해주지 않으면 모든 HTTP Method에 대해서 응답이 가능하다.

@RequestMapping(value = "/mapping/users", method = RequestMethod.GET)

이렇게 일일이 설정해줘야 특정 HTTP Method에 대해서 응답한다는 것이다.

 

이를 이름으로 명시하고 모든 URL에 대해서 접근하지 못하게 막기 위해서 메서드 속성을 포함하는 애노테이션이 존재한다. 모든 HTTP Method에 대해서 정의해두었는데 다음과 같다.

  • @GetMapping: @RequestMapping + Http GET Method
  • @PostMapping: @RequestMapping + Http POST Method
  • @DeleteMapping: @RequestMapping + Http DELETE Method
  • @PutMapping: @RequestMapping + Http PUT Method
  • @PatchMapping: @RequestMapping + Http PATCH Method

스프링은 이처럼 애노테이션 기반으로 모든 것을 자동화 해두었다. 얼마나 아름다운가. 

 

 

 

 

 

 

반응형

BELATED ARTICLES

more