diff --git "a/[2\354\243\274\354\260\250] \353\204\244\355\212\270\354\233\214\355\201\254/GET vs POST.md" "b/[2\354\243\274\354\260\250] \353\204\244\355\212\270\354\233\214\355\201\254/GET vs POST.md" new file mode 100644 index 0000000..fd9d022 --- /dev/null +++ "b/[2\354\243\274\354\260\250] \353\204\244\355\212\270\354\233\214\355\201\254/GET vs POST.md" @@ -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는 멱등성이 없다. + +### ❓ 멱등성에 대한 사실과 오해 +
+수정 API를 여러 번 호출해서 자원의 상태가 A -> B -> A로 변경되는 경우 멱등성이 있다고 할 수 있을까? + +멱등성이 있다. +멱등성이 있는 메서드라는 것은 '동일 내용'의 메서드가 여러 번 호출되는 경우 멱등성이 지켜진다는 것이다. + +
+
+응답 데이터에 현재 시간이 포함된 경우 이 시간은 계속 변경될 텐데, 멱등성이 있다고 할 수 있을까? + +멱등성이 있다. +멱등성은 'HTTP 응답이 동일한 것'이 아니라 '자원의 상태가 동일한 것'이다. +단순히 현재 시간을 응답에 포함한다고 해서 자원의 상태가 되는 것은 아니다. + +
+ +--- + +# 🔗 참고 자료 +- [Baeldung - What Is the Difference Between GET and POST Methods?](https://www.baeldung.com/cs/http-get-vs-post) +- 이준형, 이것이 취업을 위한 백엔드 개발이다 with 자바, 한빛미디어(2024) \ No newline at end of file