HTTP/2에 대해 자세히 알아보려면 인기 있는 웨비나 ' HTTP/2의 새로운 기능은 무엇인가?' 녹화본을 시청하세요.
오래된 하이퍼텍스트 전송 프로토콜, 즉 HTTP 표준이 이제 업데이트되었습니다. HTTP/2 표준은 2015년 5월에 승인되었으며 현재 브라우저와 웹 서버( NGINX Plus 와 NGINX Open Source 포함)에 구현되고 있습니다. HTTP/2는 현재 사용 중인 모든 웹 브라우저의 약 3분의 2 에서 지원되며 그 비율은 매달 수 퍼센트씩 증가하고 있습니다.
HTTP/2는 Google의 SPDY 프로토콜을 기반으로 구축되었으며, 2016년 초 Google의 Chrome 브라우저에서 SPDY 지원이 종료될 때까지 SPDY는 여전히 옵션으로 제공됩니다. NGINX는 SPDY를 선구적으로 지원했으며, 이제는 HTTP/2에서도 동일한 역할을 수행하고 있습니다. 웹 애플리케이션 개발자를 위한 HTTP/2 (PDF)라는 포괄적인 백서에서는 HTTP/2에 대한 설명과 SPDY 기반으로 구축된 방식, 그리고 구현 방법을 설명합니다.
HTTP/2의 주요 기능은 SPDY와 동일합니다.
이제 HTTP/2로 전환할지 여부를 결정해야 합니다. 그 중 하나는 HTTP/2를 최대한 활용하는 방법을 아는 것입니다. 이 블로그 게시물에서는 의사결정 및 구현 프로세스의 성과 관련 측면을 안내합니다. HTTP/2 성능을 위한 7가지 팁을 확인하세요.
메모 : 엄밀히 말하면 SPDY도 HTTP/2도 TLS를 필요로 하지 않지만, 둘 다 주로 SSL/TLS와 함께 사용할 때 유익하며, 브라우저는 SSL/TLS를 사용하는 경우에만 SPDY 또는 HTTP/2를 지원합니다.
HTTP/2를 구현하는 것은 쉽습니다. 웹 애플리케이션 개발자를 위한 HTTP/2 (PDF) 백서를 참조하세요. 하지만 HTTP/2가 만병통치약은 아닙니다. 어떤 웹 애플리케이션에는 유용하지만, 다른 웹 애플리케이션에는 그렇지 않을 수 있습니다.
SSL/TLS(이하 TLS라고 함)를 사용하는 경우 HTTP/2를 사용하면 웹사이트 성능이 향상될 가능성이 높습니다. 하지만 아직 그렇지 않은 경우 HTTP/2를 사용하려면 먼저 TLS 지원을 추가해야 합니다. 그런 경우 TLS를 사용함으로써 발생하는 성능 저하가 HTTP/2를 사용함으로써 얻는 성능 이점으로 대략 상쇄될 것으로 예상되지만, 구현 결정을 내리기 전에 이것이 귀하의 사이트에서 실제로 그런지 테스트하세요.
HTTP/2의 5가지 주요 잠재적 이점은 다음과 같습니다.
다음은 당신이 마주하게 될 5가지 단점입니다.
결국은 성과에 달려 있습니다. 성과에 관해서는 좋은 소식과 나쁜 소식이 있습니다.
좋은 소식은 NGINX에서 실시한 초기 내부 테스트에서 이론에서 예측한 결과가 나타났다는 것입니다. 일반적인 인터넷 지연 시간으로 연결을 통해 요청된 혼합 콘텐츠 웹 페이지의 경우 HTTP/2가 HTTP/1.x 및 HTTPS보다 성능이 더 우수합니다. 결과는 연결의 일반적인 왕복 시간(RTT)에 따라 세 그룹으로 나뉩니다.
그림은 첫 번째 페인팅에 걸리는 시간, 즉 사용자가 처음으로 웹 페이지 콘텐츠가 화면에 나타나는 것을 볼 때까지의 시간을 보여줍니다. 이러한 측정은 사용자가 웹사이트의 반응성을 인식하는 데 중요한 것으로 간주되는 경우가 많습니다.
테스트에 대한 자세한 내용은 nginx.conf 2015에서 제가 발표 한 'NGINX의 HTTP/2 모듈'이라는 프레젠테이션을 시청하세요.
그러나 모든 웹 페이지는 다르고, 실제로 모든 사용자 세션도 다릅니다. 스트리밍 미디어나 다운로드 가능한 대용량 파일이 있거나 HTTP/1.x 최적화를 과학적으로 수행한 경우( The Martian 에게 사과드립니다) 결과가 다르거나 심지어 반대일 수도 있습니다.
결론은 비용-편익 균형이 불분명하다고 느낄 수도 있다는 것입니다. 그렇다면 최대한 많이 배우고, 본인의 콘텐츠에 대한 성능 테스트를 실시한 후 결정을 내리세요. (지침을 얻으려면 HTTP/2의 새로운 기능은 무엇인가?라는 주제의 웨비나를 시청하세요.)
프로토콜을 종료한다는 것은 클라이언트가 TLS나 HTTP/2와 같은 원하는 프로토콜을 사용하여 프록시 서버에 연결한다는 것을 의미합니다. 그러면 프록시 서버는 그림에서 보듯이 반드시 동일한 프로토콜을 사용하지 않고도 애플리케이션 서버, 데이터베이스 서버 등에 연결합니다.
종료를 위해 별도의 서버를 사용한다는 것은 다중 서버 아키텍처로 전환하는 것을 의미합니다. 서버는 AWS 와 같은 클라우드 환경에서 별도의 물리적 서버, 가상 서버 또는 가상 서버 인스턴스일 수 있습니다. 이는 단일 서버나 애플리케이션 서버/데이터베이스 서버의 조합보다 복잡성이 한 단계 높아졌습니다. 하지만 이는 많은 이점을 제공하며 바쁜 사이트에는 사실상 필수입니다.
기존 설정 앞에 서버나 가상 서버를 배치하면 많은 일이 가능합니다. 새로운 서버는 다른 서버에서 클라이언트 통신 작업을 오프로드하며, 로드 밸런싱, 정적 파일 캐싱 및 기타 목적으로 사용할 수 있습니다. 필요에 따라 애플리케이션 서버 및 기타 서버를 쉽게 추가하고 교체할 수 있습니다.
NGINX와 NGINX Plus는 TLS 및 HTTP/2 종료, 부하 분산 등 이러한 모든 목적에 자주 사용됩니다. 기존 환경은 NGINX 서버로 "프런트엔딩"하는 것을 제외하고는 전혀 변경할 필요가 없습니다.
편집자 - 이 블로그 게시물이 게시된 이후, SPDY는 주요 브라우저에서 지원이 종료되었습니다. SPDY로 시작하는 것은 더 이상 광범위한 배포 옵션이 아닙니다.
SPDY는 HTTP/2의 전신인 프로토콜이며, 전반적인 성능은 거의 같습니다. SPDY는 출시된 지 몇 년이 되었기 때문에 HTTP/2를 지원하는 웹 브라우저보다 SPDY를 지원하는 웹 브라우저가 더 많습니다. 하지만 이 글을 쓰는 시점에서는 그 격차가 줄어들고 있습니다. 웹 브라우저의 약 2/3가 HTTP/2를 지원하고, 5개 중 4개는 SPDY를 지원합니다.
새로운 스타일의 웹 전송 프로토콜을 구현하기 위해 서두르고 현재 가능한 한 많은 사용자를 지원하려는 경우 SPDY를 제공하는 것으로 시작할 수 있습니다. 그런 다음 2016년 초에 SPDY 지원이 제거되기 시작하면 HTTP/2로 전환할 수 있습니다. 최소한 NGINX에서는 빠른 변경입니다. 그 시점까지 더 많은 사용자가 HTTP/2를 지원하는 브라우저를 사용하게 되므로 이 전환 중에 가장 많은 사용자에게 최상의 작업을 수행하게 됩니다.
HTTP/2를 구현하기로 결정하기 전에 코드베이스가 얼마나 HTTP/1.x에 최적화되어 있는지 확인해야 합니다. 주의해야 할 최적화 유형은 4가지입니다.
마지막 세 가지 유형의 최적화는 모두 작은 파일을 큰 파일로 결합하여 새로운 연결과 초기화 핸드셰이킹을 줄이는데, 이는 특히 TLS에 비용이 많이 듭니다.
첫 번째 최적화인 도메인 샤딩은 그 반대의 작업을 수행합니다. 즉, 그림에 추가 도메인을 포함시켜 더 많은 연결이 열리도록 강제합니다. 이러한 겉보기에 모순되는 기술은 함께 사용되면 HTTP/1.x 사이트의 성능을 높이는 데 상당히 효과적일 수 있습니다. 그러나 이러한 모든 솔루션을 설계하고, 구현하고, 관리하고, 운영하는 데는 시간과 노력, 리소스가 필요합니다.
HTTP/2를 구현하기 전에 이러한 최적화가 어디에 있는지 확인하고 현재 조직의 애플리케이션 설계 및 워크플로에 어떤 영향을 미치는지 파악한 후, HTTP/2로 전환한 후에 최적화를 수정하거나 실행 취소할 수 있습니다.
실제로 HTTP/2나 SPDY를 배포하는 것은 그렇게 어렵지 않습니다. NGINX 사용자라면 당사의 백서인 웹 애플리케이션 개발자를 위한 HTTP/2(PDF)에서 HTTP/2 에 대해 자세히 설명한 대로 NGINX 구성에서 프로토콜을 "켜기"만 하면 됩니다. 그런 다음 브라우저와 서버는 프로토콜을 선택하기 위해 협상하며, 브라우저가 HTTP/2를 지원하고 TLS를 사용 중인 경우 HTTP/2를 선택합니다.
HTTP/2를 서버 수준에서 구현하면 HTTP/2를 지원하는 브라우저 버전을 사용하는 사용자는 HTTP/2에서 실행되는 웹 앱과의 세션을 갖게 됩니다. 이전 버전의 브라우저를 사용하는 사용자는 그림에서 볼 수 있듯이 HTTP/1.x에서 세션을 실행합니다. 바쁜 사이트에 HTTP/2 또는 SPDY를 구현하는 경우 구현 전후에 성능을 측정하고, 상당한 부정적 영향이 있는 경우 변경을 되돌리는 프로세스를 마련해야 합니다.
메모 : HTTP/2와 단일 연결을 사용하면 NGINX 구성의 일부 세부 사항이 더욱 중요해집니다. output_buffers
, proxy_buffers
, ssl_buffer_size
와 같은 지시어의 설정을 조정하고 테스트하는 데 특히 주의하면서 NGINX 구성을 검토하세요. 일반적인 구성 지침은 NGINX Plus 관리자 가이드의 NGINX SSL/TLS 종료를 참조하세요. 블로그 SSL Offloading, Encryption, and Certificates with NGINX 와 How to Improve SEO with HTTPS and NGINX 에서 더 구체적인 팁을 얻을 수 있습니다. 백서 NGINX SSL Performance 에서는 서버 키 크기, 서버 계약 및 대량 암호의 선택이 성능에 어떤 영향을 미치는지 살펴봅니다.
메모 : HTTP/2에서 사용하는 암호를 사용할 경우 특별한 주의가 필요할 수 있습니다. HTTP/2 RFC에는 피해야 할 암호화 제품군 이 많이 나열되어 있으며, 암호화 목록을 직접 구성하는 것이 좋을 수도 있습니다. NGINX 및 NGINX Plus에서 ssl_ciphers
지시어를 조정하고 ssl_prefer_server_ciphers를
활성화하고 인기 있는 브라우저 버전에서 구성을 테스트해 보세요. Qualys SSL 서버 테스트는 SSL 웹 서버의 구성을 분석하지만(2015년 11월 현재) HTTP/2 핸드셰이크에는 안정적이지 않습니다 .
놀랍게도 HTTP/1.x 최적화를 취소하거나 수정하는 것이 실제로 HTTP/2 구현에서 가장 창의적인 부분입니다. 고려해야 할 사항이 많고 무엇을 할 것인가에 대한 자유도도 매우 높습니다.
변경 작업을 시작하기 전에, 이전 브라우저를 사용하는 사용자에게 변경 사항이 적용되는지 고려해 보세요. 이를 염두에 두고 HTTP/1.x 최적화를 취소하거나 수정하기 위한 세 가지 광범위한 전략이 있습니다.
캐싱은 약간의 와일드카드입니다. 이론적으로 캐싱은 다수의 작은 파일이 있는 경우에 최적으로 작동합니다. 하지만 파일 I/O가 너무 많습니다. 밀접하게 관련된 파일을 연결하는 것은 워크플로와 애플리케이션 성능 모두에 도움이 될 수 있습니다. HTTP/2를 구현할 때 자신의 경험과 다른 개발자가 공유하는 내용을 신중하게 고려하세요.
도메인 샤딩은 아마도 가장 극단적인 방법이자 가장 성공적인 HTTP/1.x 최적화 전략일 것입니다. HTTP/1.x의 성능을 향상시키는 도메인 샤딩 버전을 사용할 수 있지만 HTTP/2에서는 기본적으로 무시되며, 이는 유익합니다. (일반적으로 단일 연결을 사용하기 때문에 도메인 분할의 이점을 얻지 못합니다.)
HTTP/2 친화적인 샤딩을 위해 다음 두 가지를 실행하세요.
자세한 내용은 RFC 7540 , Hypertext Transfer Protocol Version 2(HTTP/2)를 참조하세요.
이러한 조건이 충족되면 HTTP/1.x에서는 샤딩이 발생합니다. 즉, 도메인이 서로 다르기 때문에 브라우저가 추가 연결 세트를 생성하게 되고 HTTP/2에서는 그렇지 않습니다. 별도의 도메인은 하나의 도메인으로 처리되고 단일 연결로 모든 도메인에 액세스할 수 있습니다.
HTTP/2와 TLS는 사이트 성능을 향상시키고 사용자에게 사이트와의 상호작용이 안전하다는 것을 알려줍니다. HTTP/2를 구현하는 데 있어 선두주자이든 경쟁자를 따라잡고 있든, HTTP/2 지원을 빠르고 훌륭하게 추가할 수 있습니다.
이러한 팁을 활용하면 최소한의 노력으로 최고의 HTTP/2 성능을 달성할 수 있습니다. 이를 통해 빠르고 효과적이며 보안이 강화된 애플리케이션을 만드는 데 집중할 수 있으며, 유지 관리와 실행이 쉽습니다.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."