프로젝트를 진행하면서 궁금한 점이 생겼다.
고객 정보를 수정할 땐, PutMapping을 사용한다.
그런데 보내는 방식만 보았을때 PostMapping, PatchMapping과
어떻게 다른지 모르겠다.
@PostMapping
- 주로 새로운 데이터를 생성할 때 사용한다.
- 서버에 데이터를 보내면 서버는 이를 처리하여 데이터베이스에 새로운 행을 추가한다.
- 동일한 요청이 여러번 들어보면, 들어온 수만큼 새로운 데이터가 생성된다. → 비멱등성
- POST /api/users → 새로운 유저를 추가한다.
Q. @GetMapping과 @PostMapping, @PutMapping, @ PatchMapping의 차이점은?
A. @GetMapping은 주로 조회하는 목적으로 쓰기 때문에, URL 뒤에 붙는 파라미터에 붙어 전송되는 것으로 충분하다. 그러나 PUT, POST, PATCH는 데이터를 저장하거나 수정하기 때문에 데이터의 구조가 복잡하거나 양이 많은 경우가 많아서 Body에 넣어보낸다.
@PutMapping
- 주로 기존에 있는 데이터를 수정할 때 사용한다.
- 데이터가 존재하면 전체 교체를 하고 없으면 생성한다.
- 전체 교체를 하기 때문에 데이터를 수정 할 때에는 모든 필드를 보내야 한다.
- 동일한 요청을 보내도 서버의 상태는 동일하게 유지되도록 한다. → 멱등성
- PUT /api/users/1 → ID가 1인 유저를 통째로 교체한다.
Q. 동일한 요청을 보내도 서버의 상태는 동일하게 유지된다는 말이 정확히 무슨 말일까?
A. id 100을 갖는 글을 수정하고자 한다. 이때 @PostMapping으로 이뤄진 버튼을 누른다면, 새로운 데이터가 추가될 것이다. 만약 수정하기 버튼을 실수로 3번 누르면 3개의 데이터가 새롭게 생겨난다. 화면에 id 값이 101, 102, 103을 갖는 새로운 글이 3개나 작성되어있을 것이다. 그러나 @PutMapping은 덮어쓰기처럼 수행된다. 이미 있는 글에 수정하기 버튼을 누르면 새로운 글이 생기지 않고 본래의 글에 덮어씌워진다. id가 100인 글이 수정되고, 서버의 상태는 여전히 id가 100인 데이터 하나만 존재하게 된다. 이게 멱등성의 대표적인 예시이다.
@PatchMapping
- 주로 기존에 있는 데이터의 일부분을 수정할 때 사용한다.
- 보내지 않은 필드는 그대로 값을 유지한다.
- 멱등성의 경우 어떻게 구현하는지에 따라 달라진다.
Q. POST와 PUT이 어떻게 다른가?
A. 찾아보니까 POST는 모든 필드를 다 보내야만 오류가 발생하지 않는 듯 하다. 만약 필드를 빼먹고 보내게 되면, 빼먹은 필드의 값이 null 처리되거나 초기값으로 변경되는 듯 하다. PUT은 변경된 값의 필드만 바꾸기 때문에, 주로 비밀번호 변경 혹은 이름 변경 등 특정 필드만 집어서 바꿀때 사용하는 것 같다.
'🌷 Spring > 개념' 카테고리의 다른 글
| [Spring] HttpEntity와 x-www-form-urlencoded이란? 폼 전송시 코드 살펴보기. (0) | 2025.09.21 |
|---|---|
| [Spring] StringUtils.hasText()로 문자열 유효성 검증하기. (0) | 2025.09.16 |
| [Spring][JPA] @Entity란 무엇일까? (0) | 2025.09.09 |
| [Spring] @Id와 @GeneratedValue이란? (0) | 2025.09.08 |
| [SpringSecurity] @EnableWebSecurity, SecurityFilterChain 개념과 예시 (2) | 2025.08.28 |