평소 spring 프로젝트에서 컨트롤러 단에서 Get, Post 를 모두 이용할 수 있는 requestMapping 을 주로 사용하고 있었는데
그러면 GetMapping , PostMapping 이외 다른 Mapping 어노테이션들은 어떤 기능을 하길래 있는걸까 ?
궁금했기 때문에 이번 기회에 한번 정리 해보려 한다.
@PostMapping
@GetMapping
@PutMapping
@DeleteMapping
@PatchMapping
각각의 어노테이션은 HttpMethods에 Mapping 되어 있다.
@RequestMapping(value="경로", method=RequestMethod.GET) or
@RequestMapping(value="경로", method=RequestMethod.POST)
@PostMapping("경로")
@GetMapping("경로")
@PutMapping("경로")
@DeleteMapping("경로")
@PatchMapping("경로")
@RequestMapping의 경우 method를 생략하면 요청받은 request HttpMethods에 맞게
Get 방식과 POST 방식을 모두 처리해준다.
이렇게 되면 한가지 의문이 생길 수 있다.
RequestMapping으로 굳이 불필요하게 method 구분없이 Get, Post 두가지 메소드를 다 사용할 수 있는데
그럼 GetMapping, PostMapping 얘네는 도대체 왜 있는걸까 쓸 필요가 없지 않을까?
단순히 사용 목적만 따진다면 위의 말에 반박하기 쉽지 않지만..
이것에 대해 개인적으로 2가지 이유가 있다고 생각한다.
예를 들어, 동일 Url로 다양한 로직을 처리해야 하는 작업 건이 있다고 가정할 때,
기본적으로 RequestMapping 의 경우
메서드가 지정된 GetMapping 이나 PostMapping 등을 사용 할 때 보다 어노테이션 선언부의 코드가 길어
컨트롤러 단의 분기 처리가 많아 질수록 비교적 소스의 전체적인 길이가 길어져 용도를 한눈에 파악하기 어려워 질 수 있다.
하지만 Post, Get, Put, Delete, Patch의 경우 어노테이션을 보는 것만으로도 어느 정도 해당 컨트롤러의
역할을 유추 할 수 있어 소스 파악이나 로직의 용도파악에 용이하다.
위의 명확성이 유지보수 시점에서 확장된 내용인데,
소스를 작성 할 때 뿐만 아니라 유지보수 시점에서도 4.3 이후의 Post, Get, Put, Delete, Patch
Mapping 어노테이션은 위에서도 말했듯이 해당 맵핑 메서드에 따라 어떤 로직이 진행 될 지,
리스트 검색인지, DB에 정보를 INSERT 할지 , UPDATE를 할지 등의 용도 파악이 쉽기 때문에
타인이 만든 소스를 파악할 때 도움이 되고, 로직들이 장황하다기 보다 기능에 맞게 모듈화가
잘 갖춰지게끔 환경이 조성되기 쉽기 때문에 코드 리펙토링에 용이하다고 생각한다.
따라서 " @RequestMapping을 쓰면안된다. 4.3 이후에 나온 GetMapping, PostMapping ... 등을 무조건
사용해야 한다. " 라는 것 보다도 용도에 맞게 또 자신이 의도한 바에 맞게 어노테이션을 적절하게
사용하면 되지 않을까 싶다.
단순히.. 무슨 차이가 있을까 있을까 호기심에 끄적인 글이니.. 참고용도로만 읽어주셨으면 좋겠다.