
검색 기능을 구현하면서 @GetMapping 에 @RequestBody를 함께 사용하는 코드를 작성했는데, 실행 중 에러가 발생했다. 이유를 찾아보니 @GetMapping에서는 HTTP 요청의 특성상 @RequestBody와 함께 사용할 수 없다는 사실을 알게 되었다.
그래서 이번 글은 @GetMapping과 @PostMapping의 차이점, 그리고 각각의 올바른 사용법을 제대로 이해하고 정리해보고자 한다.
📍 Rest API란
Rest API는 자원(resource)을 URI(고유 이름)로 표현하고, 자원의 상태를 HTTP 메서드를 통해 주고받는 방식의 웹 API이다.
여기서 헷갈리지 말아야 할 점이 있다. REST API와 비슷한 개념으로 RESTful API가 있는데,
비슷해 보이지만 두 용어는 분명한 차이가 있다.
📍 RESTful API란
REST의 설계 규칙을 잘 지켜서 따르는 API를 말한다.
요청은 HTTP 메서드(GET, POST 등)를 통해 구분하고, 이러한 방식처럼 REST의 원칙을 잘 따르는 시스템을 RESTful하다고 말한다.
- ex) 클라이언트가 HTTP를 통해 특정 자원에 요청하고, 서버가 그 요청에 따라 정해진 형식으로 응답하는 방식 중 하나이다.

주로 많이 사용 되는 4가지이다.
@GetMapping("/member/{id}") //GET 메서드는 GetMapping으로 사용!
public ResponseEntity<Member> getMember(@PathVariable Long id) {
Member member = memberService.findById(id);
return ResponseEntity.ok(member);
}
@PostMapping("/members") //POST 메서드는 PostMapping으로 사용!
public ResponseEntity<Void> createMember(@RequestBody MemberRequest request) {
memberService.create(request);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
@PutMapping("/members/{id}") //PUT 메서드는 PutMapping으로 사용!
public ResponseEntity<Void> updateMember(@PathVariable Long id, @RequestBody MemberRequest request) {
memberService.update(id, request); // 기존 데이터 전체 덮어쓰기
return ResponseEntity.ok().build();
}
@DeleteMapping("/members/{id}") //DELETE 메서드는 DeleteMapping으로 사용!
public ResponseEntity<Void> deleteMember(@PathVariable Long id) {
memberService.delete(id);
return ResponseEntity.noContent().build();
}
이번 글에서는 REST API 어노테이션의 기초를 다지는 1편입니다.
2편에서는 @GetMapping과 @RequestBody를 함께 사용할 수 없는 이유에 대해 알아보도록 하겠습니다! 많관부!!😊👍👀