Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions [2주차] 네트워크/GET vs POST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# ✍️ 작성자
김지수

---

# ❓ 질문
HTTP method 중에서 GET과 POST를 비교해주세요.

---

# 💬 답변 요약
GET과 POST는 클라이언트가 서버와 통신할 때 자주 사용하는 HTTP 요청 방식이다.
GET은 자원을 조회할 때, POST는 서버에 데이터를 전송하거나 자원을 생성할 때 사용된다.
GET은 멱등성을 보장하고 캐싱이 가능하지만 보안에 취약하고, POST는 멱등성을 보장하지 않고 비교적 보안에 안전하다.

---

# 🧠 핵심 키워드
HTTP, GET, POST, 멱등성

---

# 🔥 상세 설명

## 📌 개요
- 웹에서 클라이언트와 서버는 HTTP(Hypertext Transfer Protocol)로 통신한다. 즉, HTTP는 클라이언트와 서버 사이의 요청-응답 프로토콜이다.
- HTTP 요청 메서드 중 가장 일반적인 것은 데이터를 가져오거나 서버로 전송하는 데 사용되는 GET과 POST이다. 이 메서드들은 WWW(World Wide Web)를 통해 클라이언트와 서버 사이의 통신을 가능하게 하는 클라이언트-서버 모델의 필수적인 부분이다.

## 👀 GET
- GET은 지정된 자원에서 데이터를 요청하는 데 사용된다.
- HTML 문서, 이미지, 비디오 등 클라이언트에 표시되는 모든 데이터를 가져올 수 있다.
- 클라이언트는 GET 요청을 보내기 위해 자원의 URL을 지정해야 한다. 그러면 요청이 서버로 전송되고 서버는 해당 요청을 처리해 클라이언트에게 데이터를 전송한다.

## 🔨 POST
- POST는 자원을 생성하거나 업데이트하기 위해 서버로 데이터를 전송하는 데 사용된다.
- HTML 폼이나 파일을 서버에 전송하는 데 자주 사용된다.
- 클라이언트는 POST 요청을 보내기 위해 자원의 URL과 페이로드를 지정해야 한다. 그러면 요청이 서버로 전송되고 서버는 해당 요청을 처리해 클라이언트에게 응답을 보낸다.

## 🧐 GET vs POST
| 항목 | GET | POST |
|:-----------:|:-----------------------------------------------------------|:----------------------------------------------------|
| 가시성 | 데이터 매개변수가 URL에 포함되어 모든 유저에게 표시됨 | 데이터가 URL이 아닌 HTTP 메시지 본문에 표시됨 |
| 보안 | 전송된 데이터의 일부가 URL에 포함되어 보안성이 낮음 | 매개변수가 웹 서버 로그나 브라우저 기록에 저장되지 않아 더 안전함 |
| 캐시 | 요청이 캐시되어 브라우저 기록에 남을 수 있음 -> 북마크, 공유, 재방문 가능 | 요청이 캐시되지 않음 |
| 서버 상태 | 서버의 데이터를 가져오는 데 사용되므로 서버의 상태를 변경하지 않음 | 서버로 데이터를 전송하는 데 사용되므로 서버의 상태를 변경함 |
| 전송되는 데이터 양 | 길이 제한이 있는 리소스 URL을 통해 데이터를 전송하므로 최대 문자 수가 제한됨 (2048 chars) | 길이 제한이 없는 HTTP 메시지 본문을 통해 데이터를 전송하므로 제한 없음 |
| 전송되는 데이터 유형 | 문자열 데이터 유형만 지원함 | 문자열, 숫자, 이진수 등 다양한 데이터 유형을 지원함 |

## 🔢 멱등성
- 한 번 호출한 것과 여러 번 호출한 것의 자원 상태가 동일한 특성을 의미한다.
- 예를 들어 id가 5인 게시글을 수정하거나 삭제하고 나면 동일한 명령을 여러 번 수행해도 자원의 상태가 달라지지 않는다.
- HTTP 메서드 중 GET, PUT, DELETE 등은 멱등성이 있고, POST는 멱등성이 없다.

### ❓ 멱등성에 대한 사실과 오해
<details>
<summary>수정 API를 여러 번 호출해서 자원의 상태가 A -> B -> A로 변경되는 경우 멱등성이 있다고 할 수 있을까?</summary>

멱등성이 있다.
멱등성이 있는 메서드라는 것은 '동일 내용'의 메서드가 여러 번 호출되는 경우 멱등성이 지켜진다는 것이다.

</details>
<details>
<summary>응답 데이터에 현재 시간이 포함된 경우 이 시간은 계속 변경될 텐데, 멱등성이 있다고 할 수 있을까?</summary>

멱등성이 있다.
멱등성은 'HTTP 응답이 동일한 것'이 아니라 '자원의 상태가 동일한 것'이다.
단순히 현재 시간을 응답에 포함한다고 해서 자원의 상태가 되는 것은 아니다.

</details>

---

# 🔗 참고 자료
- [Baeldung - What Is the Difference Between GET and POST Methods?](https://www.baeldung.com/cs/http-get-vs-post)
- 이준형, 이것이 취업을 위한 백엔드 개발이다 with 자바, 한빛미디어(2024)