GET vs POST

journey·2023년 12월 8일
0

GET 요청

  • 목적: 서버에서 데이터를 조회하거나 검색할 때 사용됩니다. GET 요청은 데이터를 가져오는 데 사용되며, 서버의 상태나 데이터를 변경하지 않습니다.

  • 사용 사례:
    웹 페이지나 이미지와 같은 자원을 요청할 때.
    검색 엔진에서 검색어를 제출할 때.
    특정 페이지의 목록이나 정보를 요청할 때.

  • 특징:
    데이터는 URL의 일부로 전송됩니다 (예: 쿼리 스트링).
    URL에 데이터가 노출되므로 민감한 정보를 전송하기에는 적합하지 않습니다.
    URL 길이 제한이 있어 많은 양의 데이터를 전송하기 어렵습니다.
    캐싱이 가능하여 동일한 요청에 대해 서버의 부하를 줄일 수 있습니다.

POST 요청

  • 목적: 서버에 데이터를 전송하여 새로운 자원을 생성하거나, 기존 자원에 대한 변경을 요청할 때 사용됩니다.

  • 사용 사례:
    폼 데이터를 서버로 전송할 때 (예: 사용자 등록, 로그인).
    대량의 데이터나 민감한 정보를 서버에 전송할 때.
    파일 업로드와 같은 작업을 수행할 때.

  • 특징:
    데이터가 HTTP 요청 본문에 포함되어 전송되므로 URL에 노출되지 않습니다.
    GET에 비해 큰 양의 데이터를 전송할 수 있습니다.
    데이터가 URL에 노출되지 않아 민감한 정보를 전송하기에 보다 안전합니다.
    POST 요청은 캐싱되지 않으며, 동일한 요청을 반복하면 서버에서 동일한 작업이 여러 번 수행될 수 있습니다.

요약

  • GET: 데이터를 조회하거나 검색할 때 사용. 데이터가 URL에 포함되어 전송되며, 서버의 상태를 변경하지 않습니다.
  • POST: 서버에 데이터를 전송하여 새로운 자원을 생성하거나 기존 자원을 수정할 때 사용. 데이터가 요청 본문에 포함되어 전송되며, 서버의 상태를 변경할 수 있습니다.

idempotent(멱등)란
동일한 연산을 여러 번 수행하더라도 동일한 결과
GET 방식은 Idempotent, POST는 Non-Idempotent 하게 설계

그런데 POST로 다 설계가 되는데 왜 다른 메소드를 사용할까라는 의문 들음

  1. 의미론적 명확성(Semantic Clarity): HTTP 메서드는 특정한 의미와 용도를 가지고 있습니다. 예를 들어, GET은 데이터를 가져오는 데, POST는 새로운 데이터를 생성하는 데, PUT은 기존 데이터를 대체하는 데, DELETE는 데이터를 삭제하는 데 사용됩니다. 각 메서드를 적절하게 사용함으로써 API의 의도를 더 명확하게 전달할 수 있습니다.

  2. 캐시 및 최적화(Caching and Optimization): GET 요청은 캐시가 가능하여 네트워크 효율성을 높일 수 있습니다. 반면, POST 요청은 일반적으로 캐시되지 않습니다. 적절한 메서드를 사용하면 네트워크 트래픽과 서버 부하를 줄일 수 있습니다.

  3. 멱등성(Idempotency): GET, PUT, DELETE와 같은 멱등 메서드는 같은 요청을 여러 번 보내도 동일한 결과를 보장합니다. 이는 시스템의 안정성과 예측 가능성을 높입니다. POST는 멱등하지 않기 때문에 같은 요청을 여러 번 보낼 경우 예상치 못한 부작용이 발생할 수 있습니다.

  4. 안전성(Safety): GET과 같은 안전한 메서드는 서버의 데이터를 변경하지 않습니다. 이를 통해 데이터의 무결성을 유지할 수 있으며, 클라이언트는 서버의 상태에 영향을 끼치지 않고 자유롭게 데이터를 요청할 수 있습니다.

  5. 브라우저 및 프록시 호환성(Browser and Proxy Compatibility): 웹 브라우저와 프록시 서버는 각 HTTP 메서드의 의미를 이해하고, 그에 따라 다르게 동작합니다. 예를 들어, 브라우저는 GET 요청을 즐겨찾기로 저장하거나 뒤로 가기 버튼을 사용할 수 있으며, 프록시 서버는 캐싱 정책을 적용할 수 있습니다.

  6. 표준 및 베스트 프랙티스(Standards and Best Practices): HTTP 메서드의 적절한 사용은 웹 개발의 일반적인 표준과 베스트 프랙티스를 따르는 것입니다. 이를 통해 다른 개발자들이 코드를 더 쉽게 이해하고 협업할 수 있습니다.

profile
백엔드 개발 여정

0개의 댓글

관련 채용 정보