우리가 16년 동안 속여온 HTTP 메서드
백엔드 개발자들은 검색 엔드포인트와 관련하여 끊임없는 문제에 직면합니다.
검색은 읽기 작업이므로 GET을 사용하고 싶을 것입니다. 하지만 검색 필터가 너무 커지면 URL이 2,000자에 달하게 됩니다. 프록시는 요청을 잘라버리고, 결국 검색 기능이 망가집니다.
이 제한을 해결하기 위해 POST로 전환합니다. 작동은 하지만, 이는 일종의 거짓말입니다. POST는 모든 프록시와 캐시에 데이터를 변경하고 있다고 알립니다. 이로 인해 모든 캐싱이 중단되며, GET의 속도를 잃게 됩니다.
16년 동안 우리에게는 중간 지점이 없었습니다.
2026년 6월, IETF는 RFC 10008을 발표했습니다. 이 표준은 QUERY 메서드를 도입합니다. 이는 2010년 이후 처음으로 등장한 새로운 HTTP 메서드입니다.
QUERY는 GET과 POST의 장점만을 결합했습니다:
• 복잡한 필터를 위해 요청 본문(request body)을 포함할 수 있습니다. • 안전(safe)합니다. 즉, 서버의 상태를 변경하지 않습니다. • 멱등성(idempotent)을 가집니다. 즉, 동일한 결과로 두 번 실행할 수 있습니다. • 캐싱이 가능(cacheable)하여 CDN이 응답을 저장할 수 있습니다.
QUERY 요청은 다음과 같은 형태입니다:
QUERY /products HTTP/1.1
Host: api.shop.example
Content-Type: application/json
{
"filter": { "category": "boots", "inStock": true },
"sort": "-price",
"limit": 20
}
새로운 RFC는 Accept-Query 헤더도 추가합니다. 이를 통해 API는 자신이 지원하는 쿼리 형식을 알려줄 수 있습니다.
개발자를 위한 주의 사항:
QUERY 요청을 캐싱하는 것은 GET 요청과 다릅니다. GET 캐시는 URL을 키로 사용합니다. 반면 QUERY 캐시는 요청 본문을 키의 일부로 사용해야 합니다. 만약 인프라가 이를 이해하지 못한다면, 한 사용자가 다른 사용자의 비공개 검색 결과를 보게 될 수도 있습니다.
아직 운영 환경에 서둘러 도입하지 마세요. 생태계가 따라올 시간이 필요합니다.
• 브라우저는 아직 fetch()에서 QUERY를 지원하지 않습니다.
• HTML 폼은 GET과 POST만 지원합니다.
• 많은 API 게이트웨이와 WAF가 알 수 없는 메서드를 거부할 것입니다.
QUERY를 염두에 두고 API를 설계하되, 당분간은 POST 엔드포인트를 유지하십시오.
QUERY는 오랜 타협의 종지부를 찍습니다. 네트워크에 거짓말을 하지 않고도 복잡한 질문을 던질 수 있게 해줍니다.
생태계가 따라오기를 기다리고 계신가요, 아니면 지금 바로 QUERY를 테스트하고 계신가요?
Source: https://dev.to/arya_koste_5845807df94776/query-the-http-method-weve-been-faking-for-16-years-f9i
