[Spring] REST API를 구성하는 @GetMapping, @PostMapping (1)

개(계)기장·2025년 6월 26일

Spring

목록 보기
4/6
post-thumbnail

검색 기능을 구현하면서 @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를 통해 특정 자원에 요청하고, 서버가 그 요청에 따라 정해진 형식으로 응답하는 방식 중 하나이다.

💡 HTTP 프로토콜 Method


주로 많이 사용 되는 4가지이다.

🌳 GET : 서버로부터 자원을 조회

@GetMapping("/member/{id}")		//GET 메서드는 GetMapping으로 사용!
public ResponseEntity<Member> getMember(@PathVariable Long id) {
    Member member = memberService.findById(id);
    return ResponseEntity.ok(member);
}
  • 데이터를 요청할 때 사용
  • 서버의 상태나 데이터를 변경하지 않음

🌳 POST : 서버에 자원을 생성

@PostMapping("/members")	//POST 메서드는 PostMapping으로 사용!
public ResponseEntity<Void> createMember(@RequestBody MemberRequest request) {
    memberService.create(request);
    return ResponseEntity.status(HttpStatus.CREATED).build();
}
  • 새로운 데이터를 서버에 전송할 때 사용
    • ex: 회원 가입, 게시글 등록 등

🌳 PUT : 자원을 전체 수정(갱신)

@PutMapping("/members/{id}")	//PUT 메서드는 PutMapping으로 사용!
public ResponseEntity<Void> updateMember(@PathVariable Long id, @RequestBody MemberRequest request) {
    memberService.update(id, request);  // 기존 데이터 전체 덮어쓰기
    return ResponseEntity.ok().build();
}
  • 해당 자원이 존재하면 덮어쓰고, 없으면 새로 생성하는 경우도 있음
  • 주로 전체 데이터를 바꿀 때 사용
  • 일부만 수정할 때는 PATCH를 사용

🌳 DELETE : 자원을 삭제

@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를 함께 사용할 수 없는 이유에 대해 알아보도록 하겠습니다! 많관부!!😊👍👀

profile
배우고 느낀 걸 솔직하게 적는 개기(계기, 契機)장 — 개발 일기장(개기장)

0개의 댓글