Http/1.1, http/2, http/3?

지난 토요일부터 관심을 가지게 된 주제입니다.

많은 사람들이 HTTP 1.1을 기반으로 하는 REST API에 대해 깊게 생각안하고 쓰기 간단하여 사용 중입니다. 저만 해도 그랬는데요. gRPC가 빠르고 떠오르는 최신 기술이라고는 들었지만, 그냥 REST API를 사용하면 되지 왜 굳이 HTTP/2를 기반으로 하는 gRPC를 사용할까 의문을 가진적이 없다가 지난 토요일에 갑자기 궁금해져서 공부하기 시작했습니다.

일단 가장 큰 차이는 REST API는 HTTP/1.1을 기반으로 한다는 점이고 gRPC는 HTTP/2를 기반으로 한다는 점입니다. 일단 HTTP/2로 넘어가는 자체로 이미 많은 단점들이 사라지고 새로운 장점이 추가됩니다.

이미 서버가 REST API로 개발이 되어서 gRPC로 다 뜯어 고치는 것은 시간상 여유가 없을 듯 하여 HTTP/2로만 바꿔주려고 합니다.

  1. 여러 테스트 글에서 HTTP/1.1 → HTTP/2 로만 변경해도 성능이 크게 개선된다고 하는데 체감을 하신 분이 계신가요?
  2. HTTP/2로도 기존의 REST API를 사용할 수 있나요?

아래 정성태님의 글을 보면 HTTP/2가 지원되지 않는 서버에 대해서는 자동으로 HTTP/1.1 로 동작한다고 이해했습니다.

  1. 그럼 이 경우 IIS를 HTTP/2를 지원하도록 변경해놓아도 서버가 REST API를 쓰면 HTTP/1.1로 동작하는 것인지 궁금합니다.

HTTP/2로 바꾸는 자체는 IIS를 쓰는 서비스는 이 글을 따라해서 하려하고 Azure App Service로 되어있는 것은 그냥 HTTP/2로만 새로 인스턴스를 만들려고 합니다.

  1. .NET 6가 나오면서 QUIC이 지원된다고 하는데 QUIC이 되어서 HTTP/3를 사용하려면 기존의 REST API를 다른 방식으로 바꿔야하는 건가요?

개념이 잡히지 않아서 아직 알쏭달쏭한 상태에서 질문드립니다.

참고글

2개의 좋아요

일단 4번은 아닙니다. 단지 프토토콜 레이어에서 TCP대신 UDP기반의 QUIC를 이용하는 것이기 때문에 기존과 동일하게 REST API를 제공할 수 있습니다. 단, 클라이언트가 HTTP/3를 지원은 해야겠지요.

2개의 좋아요

제가 지금 개념이 아리송한 것이 REST API 자체가 HTTP/1.1 이 아닌가? 라는 생각 때문인데, REST API를 HTTP/3 스펙으로 요청하고 받을 수 있는건가요? 물론 HttpClient같은 QUIC용 클라이언트 핸들러가 있어야겠지만…

1개의 좋아요

글쎄요. REST API는 별도의 HTTP 버젼제약은 없는걸로 알고 습니다.

3개의 좋아요

왜 아까는 이 문서들을 못찾았을까 한심하네요…ㅎㅎ;;
말씀하신대로 REST API는 HTTP이기만 하면 되는 것 같습니다.
HTTP/1.1 의 REST API 서버를 HTTP/2로만 바꿔주면 클라이언트가 HTTP/2로 요청할 때 HTTP/2형태로 REST API 통신을 한다고 하네요.

2개의 좋아요

아래 블로그를 보고서 gRPC의 쓰임새에 대해서 많이 이해하였습니다.
gRPC는 http기반의 RPC로 이해 하였습니다.

2개의 좋아요