새로운 HTTP 메서드 'QUERY' 등장!

by DD
2일 전
조회수 0

기존 GET 메서드의 긴 URL 길이 제한보안 이슈를 해결하기 위해 새로운 HTTP 메서드 'QUERY'가 제안됨

POST 메서드의 멱등성(Idempotency) 부재데이터 중복 생성 문제를 해결하기 위해 QUERY 메서드 도입

QUERY는 바디(Body)를 포함하면서도 Safe + Idempotent 속성을 만족하는 새로운 HTTP 메서드로 정의됨

RFC 10008로 발행되었으나, 생태계 지원까지는 2~3년 소요 예상되며 모든 경우에 GET을 대체하지는 않음

GET 메서드의 한계점 분석

기존 GET 메서드는 쿼리 파라미터(Query Parameter) 기반 요청 처리로 인해 URL 길이 제한(414 URI Too Long)에 걸릴 위험이 있었다.

비-ASCII 문자 인코딩(Non-ASCII Encoding)으로 인한 요청 크기 증가 및 미들웨어 로깅 시 보안 취약점(Security Vulnerability) 노출 가능성 존재

배열·중첩 구조 표현 방식의 표준화 부재(Lack of Standardization)로 인한 구현 복잡성 증가

이러한 문제점들은 GET 메서드의 안전성(Safe) 및 멱등성(Idempotent) 속성을 유지하면서 데이터를 조회해야 하는 상황에서 개발자들에게 부담으로 작용했다.

POST 메서드의 대안적 사용과 문제점

GET의 한계를 극복하기 위해 개발자들은 데이터 생성 및 처리를 위한 POST 메서드를 조회 용도로 차선책으로 사용해왔다.

하지만 POST는 멱등성(Idempotency)을 보장하지 않아 실패 시 재시도하면 데이터가 중복 생성되는 부수 효과 발생 가능

또한, POST 요청은 서버 상태 변경 가능성이 있어 프록시나 CDN 레벨에서의 자동 캐싱(Automatic Caching)이 불가능하여 성능 저하 요인으로 작용

결과적으로 POST는 바디를 담을 수 있다는 장점에도 불구하고, 조회 목적의 요청에는 신뢰성과 성능 측면에서 명확한 한계를 지녔다.

새로운 QUERY 메서드의 작동 원리 및 장점

새롭게 제안된 QUERY 메서드는 GET의 Safe + Idempotent 속성과 POST의 바디(Body) 포함 가능성을 결합한 새로운 HTTP 메서드이다.

바디 기반의 조회 요청(Body-based Read Request)을 명확히 하여, URL 길이 제한이나 인코딩 문제를 원천적으로 해결

Safe 및 Idempotent 속성 보장으로 GET처럼 재시도 및 캐싱에 유리하며, 데이터 중복 생성 위험 제거

GraphQL과 같이 복잡한 쿼리 요청을 HTTP 레벨에서 효율적으로 처리할 수 있는 기반 마련

이는 기존 HTTP 메서드 체계에서 존재했던 명확한 빈칸(Gap)을 채우는 역할을 수행한다.

QUERY 메서드 도입 시 고려사항

QUERY 메서드는 RFC 10008로 제안되었으나, 실제 생태계 전반의 지원까지는 상당한 시간이 소요될 것으로 예상된다.

클라이언트 및 서버 구현체의 점진적 지원이 필요하며, 특히 프록시, 캐시 서버 등 미들웨어의 시맨틱 이해가 중요

바디를 포함하므로 캐싱 구현 시 요청 바디까지 캐시 키에 포함해야 하며, 바디 정규화(Body Normalization)를 통한 캐시 적중률 향상 전략 필요

모든 GET 요청을 QUERY로 대체하는 것은 부적절하며, 링크 공유나 북마크가 필요한 경우에는 기존 GET 메서드 사용이 여전히 유효

결론적으로 QUERY는 GET의 한계를 보완하는 유용한 도구이지만, 점진적인 채택과 적절한 사용 사례 구분이 필요하다.

새로운 HTTP 메서드: "QUERY"