1. GET vs POST 비교
GET과 POST의 차이는 주로 사용 목적과 데이터 전달 방식에서 나타난다.
| 구분 | GET | POST |
|---|---|---|
| 주요 역할 | 리소스 조회 | 데이터 처리 및 생성 |
| 데이터 위치 | URL의 Query String | 메시지 바디 (Body) |
| 캐싱 | 가능 | 일반적으로 제한적 |
| 브라우저 기록 | URL 기준으로 남을 수 있음 | URL에 본문 데이터가 직접 남지 않음 |
| 보안성 | URL에 데이터가 노출될 수 있음 | Body로 전달되지만 HTTPS 없이는 안전하지 않음 |
2. GET의 특징
- 서버에 데이터를 요청하고 조회할 때 사용한다.
- 요청 데이터는 주로 Query String 형태로 전달된다.
- 조회 목적이므로 일반적으로 멱등성과 안전성을 가진다.
- 캐시 활용이 가능하여 동일 요청 처리 효율이 높을 수 있다.
예시
GET /users?id=10 HTTP/1.1
3. POST의 특징
- 서버에 데이터 처리 또는 생성 작업을 요청할 때 사용한다.
- 요청 데이터는 일반적으로 메시지 바디에 담아 전달한다.
- 호출마다 결과가 달라질 수 있으므로 보통 멱등하지 않다.
- 등록, 결제, 로그인 요청 등 다양한 처리 작업에 사용된다.
예시
POST /users HTTP/1.1
Content-Type: application/json
{
"name": "TEST"
}
4. PUT vs PATCH 차이
둘 다 리소스 수정에 사용되지만 수정 범위가 다르다.
PUT
- 리소스를 전체 대체하는 방식이다.
- 요청에 포함되지 않은 필드는 제거되거나 기본값으로 대체될 수 있다.
- 일반적으로 멱등성을 가진다.
PATCH
- 리소스의 일부만 수정하는 방식이다.
- 변경이 필요한 필드만 전달한다.
- 구현 방식에 따라 멱등성이 달라질 수 있다.
5. 코드 예시로 보는 PUT vs PATCH
기본 데이터는 다음과 같다.
{
"name": "Noname",
"language": "JAVA"
}
PUT 요청
{
"name": "TEST"
}
결과 예시
{
"name": "TEST"
}
PUT은 리소스를 전체 대체하므로 기존 language 필드가 유지되지 않을 수 있다.
PATCH 요청
{
"name": "TEST"
}
결과 예시
{
"name": "TEST",
"language": "JAVA"
}
PATCH는 요청한 필드만 부분 수정하므로 나머지 필드는 유지된다.
추가 정리
- GET은 조회 목적이므로 캐시 활용에 유리하다.
- POST는 데이터 생성이나 처리 요청에 적합하다.
- PUT은 전체 수정, PATCH는 부분 수정으로 이해하면 된다.
- 민감한 데이터는 메서드 종류와 별개로 반드시 HTTPS와 함께 다뤄야 한다.
핵심 정리
GET은 조회, POST는 처리 또는 생성, PUT은 전체 수정, PATCH는 부분 수정에 주로 사용한다.
메서드 선택은 기능 목적과 멱등성 여부를 기준으로 판단하는 것이 핵심이다.