[Spring] @RequestMapping, @GetMapping, @PostMapping 의 차이

lgw2236·2023년 4월 10일
1

개발기록

목록 보기
6/8
post-thumbnail

- ?

평소 spring 프로젝트에서 컨트롤러 단에서 Get, Post 를 모두 이용할 수 있는 requestMapping 을 주로 사용하고 있었는데
그러면 GetMapping , PostMapping 이외 다른 Mapping 어노테이션들은 어떤 기능을 하길래 있는걸까 ?
궁금했기 때문에 이번 기회에 한번 정리 해보려 한다.

언제부터 컨트롤러를 구분짓는 어노테이션이 생긴걸까?

  • Spring 4.3 버전부터 Spring MVC 컨트롤 매소드를 위한 새로운 어노테이션 5개가 추가 됐다.

@PostMapping
@GetMapping
@PutMapping
@DeleteMapping
@PatchMapping

각각의 어노테이션은 HttpMethods에 Mapping 되어 있다.

Mapping 선언 방법

@RequestMapping

@RequestMapping(value="경로", method=RequestMethod.GET) or
@RequestMapping(value="경로", method=RequestMethod.POST) 

@PostMapping

@PostMapping("경로")

@GetMapping

@GetMapping("경로")

@PutMapping

@PutMapping("경로")

@DeleteMapping

@DeleteMapping("경로")

@PatchMapping

@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 ... 등을 무조건
사용해야 한다. " 라는 것 보다도 용도에 맞게 또 자신이 의도한 바에 맞게 어노테이션을 적절하게
사용하면 되지 않을까 싶다.
단순히.. 무슨 차이가 있을까 있을까 호기심에 끄적인 글이니.. 참고용도로만 읽어주셨으면 좋겠다.

profile
어제보다 오늘 더

0개의 댓글