HTTP가 20년 만에 처음으로 새로운 메서드를 도입했습니다
아마 전에도 이런 경험이 있으실 겁니다.
제품을 검색해야 하는데, 검색 필터가 URL에 담기에는 너무 큽니다. 이를 해결하기 위해 POST 요청을 사용합니다.
작동은 합니다. 하지만 이는 일종의 거짓말입니다. 데이터를 읽기만 할 뿐인데, HTTP에는 데이터를 변경한다고 말하고 있기 때문입니다.
2026년 6월, IETF는 RFC 10008을 발표했습니다. 여기에는 QUERY라는 새로운 HTTP 메서드가 정의되어 있습니다. 이는 20년 만에 등장한 첫 번째 새로운 메서드입니다. 앞서 언급한 바로 그 문제를 해결해 줍니다.
현재의 문제점
GET은 데이터를 읽는 데 매우 훌륭합니다. 안전하며 캐싱이 가능합니다. 하지만 요청 본문(request body)을 포함할 수 없습니다. 또한 URL에는 글자 수 제한이 있습니다.
POST는 본문을 포함할 수 있습니다. 하지만 HTTP는 POST가 상태를 변경한다고 가정합니다. 즉, 자동 캐싱과 안전한 재시도 기능을 사용할 수 없게 된다는 뜻입니다. 만약 POST 요청이 타임아웃되면, 단순히 다시 시도할 수 없습니다. 서버가 이미 무언가를 변경했는지 알 수 없기 때문입니다.
해결책: QUERY
QUERY는 본문을 포함하는 GET 요청입니다. 두 가지를 보장합니다:
- 안전합니다. 데이터를 수정하지 않습니다.
- 멱등성(idempotent)을 가집니다. 두 번 보내도 한 번 보낸 것과 동일한 결과를 얻습니다.
현재 사용 방법
지금 바로 Axios나 Fetch를 통해 사용할 수 있습니다.
Axios 예시:
axios.request({
method: 'QUERY',
url: '/api/products',
data: { category: 'shoes', maxPrice: 100 }
})
Fetch 예시:
fetch('/api/products', {
method: 'QUERY',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ category: 'shoes', maxPrice: 100 })
})
앞으로의 전망
전환이 하룻밤 사이에 이루어지지는 않을 것입니다. 로드맵은 다음과 같습니다:
- 인프라: Nginx와 Apache가 이러한 요청을 전달할 것입니다. QUERY 메서드를 허용하려면 WAF나 보안 규칙을 업데이트해야 할 수도 있습니다.
- 프레임워크: 2026년과 2027년에 걸쳐 Spring, Rails, Express가 네이티브 지원을 추가할 것으로 예상됩니다.
- CDN: Cloudflare와 Akamai의 엔지니어들이 이 표준을 작성하는 데 참여했으므로, 빠른 CDN 지원을 기대할 수 있습니다. 이는 캐싱을 훨씬 쉽게 만들어 줍니다.
이것이 코드에 중요한 이유
- 자동 재시도: QUERY는 멱등성을 가지므로, 모바일 앱과 클라이언트가 실패한 요청을 안전하게 재시도할 수 있습니다.
- 더 나은 캐싱: CDN은 본문을 기반으로 QUERY 응답을 캐싱할 수 있습니다. 직접 구현한 Redis 캐시 레이어를 삭제할 수 있습니다.
- 더 깔끔한 URL: 더 이상 복잡한 JSON을 URL 쿼리 파라미터에 억지로 밀어 넣을 필요가 없습니다.
- 의미론적(Semantic) API: API 문서가 더 명확해집니다. 개발자는 어떤 엔드포인트가 데이터를 읽고 어떤 엔드포인트가 데이터를 쓰는지 정확히 알 수 있습니다.
현재 사용 중인 POST 엔드포인트를 점검하여 팀을 준비시키세요. 데이터만 읽는 엔드포인트를 식별하십시오. 그것들이 바로 미래의 QUERY 엔드포인트가 될 것입니다.
