Get과 Post는 HTTP요청 메서드 중 가장 많이 사용되는 두가지로 각각의 목적과 동작 방식이 다릅니다. 

이에 대한 구체적인 내용들에 대해서 설명 하도록 하겠습니다. 

요청의 목적 

Get

- 데이터를 조회할 때 사용됩니다.

- 서버에 요청을 보내 특정 리소스나 데이터를 가져오는 데 목적이 있습니다. 

- 예를 들어 블로그 글읽기나 검색 결과를 가져오는 것이 이에 해당됩니다. 

POST 

- 데이터를 생성하거나 전송할 때 사용됩니다. 

- 서버에 데이터를 보내 새로운 리소스를 생성하거나 데이터를 처리하도록 요청합니다. 

- 예를 들어 회원가입, 로그인, 게시글 작성 등이 있습니다. 

데이터 전달방식 

Get

- 데이터가 URL의 쿼리 스트링으로 전달됩니다.

  형식http://example.com?key1=value1&key2=value2 

- 전달 가능한 데이터 크기가 제한적입니다. 

- URL에 데이터가 노출되므로 보안에 취약합니다. 

POST 

- 데이터가 HTTP요청의 Body에 담겨 전달됩니다.

- URL에 데이터가 표시되지 않으므로 GET보다 비교적 보안성이 높습니다. 

- 전송 가능한 데이터 크기에 제한이 거의 없으며, 파일 업로드 같은 대용량 데이터 전송도 가능합니다. 

캐싱 

GET

- 브라우저와 서버는 GET요청에 대해 캐싱을 지원합니다. 

- 동일한 요청이 반복될 경우 서버가 아닌 브라우저나 프록시에서 캐시된 데이터를 반환할 수 있습니다. 

- 정적 리소스인 이미지나 CSS파일 등을 가져오는 데에 적합합니다. 

POST

- 기본적으로 캐싱되지 않습니다.

- 요청마다 서버에서 처리되며 같은 데이터를 여러번 전송하더라도 항상 새로운 요청으로 간주됩니다. 

 

멱등성(Idempotency)

멱등성이란 처음 수행한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업또는 기능의 속성을 뜻합니다. 즉 멱등한 작업의 결과는 한번 수행하든 여러 번 수행하든 같아야 합니다. 

https://namu.wiki/w/%EB%A9%B1%EB%93%B1%EC%84%B1

 

GET

- 멱등성을 가집니다.

- 동일한 GET 요청을 여러 번 보내도 서버의 상태는 변하지 않습니다.

- 예) GET /products 요청을 10번 보내도 상품 목록은 그대로입니다.

POST

- 멱등성이 없습니다.

- 동일한 POST 요청을 여러 번 보내면 서버의 상태가 바뀔 수 있습니다.

- 예) POST /create-order 요청을 3번 보내면 주문이 3번 생성될 수 있습니다.

사용 사례

GET

- URL에 전달할 데이터가 간단하고 민감하지 않을 때 사용합니다.

- 서버에 데이터를 요청해 정보를 조회할 때 사용합니다.

- 예:

검색어 전송: http://example.com/search?query=apple  

블로그 게시물 조회: http://example.com/posts/123  

POST

- 민감하거나 대용량의 데이터를 서버에 전송할 때 사용합니다.

- 서버에 리소스를 생성하거나 데이터를 처리할 때 사용합니다.

- 예: 로그인 요청, 파일 업로드, 게시물 작성

HTTP 요청의 예시

GET 요청

GET /search?query=apple HTTP/1.1
Host: example.com
  • URL에 데이터를 포함합니다.
  • 서버는 query 값을 받아 데이터를 반환합니다.

POST 요청

POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

username=user&password=1234
  • 데이터는 요청 본문(Body)에 포함됩니다.
  • 서버는 Body의 데이터를 받아 처리합니다.

GET과 POST의 장단점

장점 - 간단하고 빠르며 캐싱 가능 - URL에 데이터 노출이 없어 보안성이 높음
단점 - 데이터 길이 제한, 보안 취약 - 캐싱 불가능, 상대적으로 느림

실무에서의 선택 기준

GET을 사용하는 경우

- 데이터를 조회하거나 검색 조건을 전달할 때

- URL 공유가 필요할 때 (예: 검색 결과를 북마크하거나 공유)

 

POST를 사용하는 경우

- 민감한 정보를 전송할 때 (로그인, 회원가입 등)

- 파일 업로드처럼 대용량 데이터를 처리할 때

- 서버에 상태 변화를 유발하는 요청을 보낼 때

 
 

 

 

 

 

 

 

+ Recent posts