본문 바로가기

리눅스

CentOS 7에서 curl을 컴파일하여 HTTP/2를 지원하도록 설치하는 방법

728x90

CentOS 7에서 curl을 컴파일하여 HTTP/2를 지원하도록 설치하는 방법

테스트 환경

$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

curl 버전 확인

$ curl --version
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets

컴파일 도구 설치

sudo yum install -y gcc make

1. 컴파일에 필요한 의존성 설치

sudo yum install -y openssl-devel libnghttp2-devel

2. curl 소스 코드 다운로드

cd /usr/local/src
wget https://curl.se/download/curl-8.1.2.tar.gz
tar xfz curl-8.1.2.tar.gz
cd curl-8.1.2

3. 컴파일 및 설치

./configure --with-nghttp2 --with-ssl --prefix=/usr/local
make
make install

4. 기존 curl 대신 컴파일한 버전을 사용하도록 심볼릭 링크 설정

sudo mv /usr/bin/curl /usr/bin/curl_old
sudo ln -s /usr/local/bin/curl /usr/bin/curl

5. 설치된 curl 버전 확인

curl --version
$ /usr/local/bin/curl --version
curl 8.1.2 (x86_64-pc-linux-gnu) libcurl/8.1.2 OpenSSL/1.0.2k-fips zlib/1.2.7 nghttp2/1.33.0
Release-Date: 2023-05-30
Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS HSTS HTTP2 HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL UnixSockets

 

컴파일된 버전의 curl이 설치되고 HTTP/2를 지원합니다. 이제 curl 명령어로 HTTP/2를 사용하여 웹 서버와 통신할 수 있습니다.

728x90

curl 명령어를 사용하여 HTTP/1.1과 HTTP/2의 속도를 측정하는 방법

출처-https://blog.restcase.com/content/images/2018/01/http1-vs-http2-multiplexing.png

 

HTTP/2는 HTTP/1.1과 비교하여 다양한 성능 개선을 제공합니다. 주요한 속도 차이 포인트는 다음과 같습니다.

 

  1. Multiplexing: HTTP/2는 단일 TCP 연결을 통해 여러 요청과 응답을 병렬로 처리할 수 있습니다. 이는 요청과 응답을 동시에 처리하므로 웹 페이지 로딩 시간을 단축시킵니다. 반면, HTTP/1.1은 동시에 처리할 수 있는 요청 수에 제한이 있으며, 병렬 요청을 위해 여러 개의 TCP 연결을 필요로 합니다.
  2. 헤더 압축: HTTP/2는 헤더 필드를 압축하여 데이터 전송량을 줄입니다. 이는 더 적은 네트워크 대역폭을 사용하며, 웹 페이지 로딩 속도를 향상시킵니다.
  3. 서버 푸시: HTTP/2는 서버에서 클라이언트 요청 이전에 리소스를 프로액티브하게 푸시할 수 있습니다. 이는 클라이언트가 요청하지 않은 리소스를 사전에 전송하여 웹 페이지 로딩 속도를 향상시킵니다.

HTTP/1.1 속도 측정

curl -s -w 'HTTP/1.1: %{time_total}\n' -o /dev/null https://www.google.com
$ curl -s -w 'HTTP/1.1: %{time_total}\n' -o /dev/null https://www.google.com
HTTP/1.1: 0.259970

위 명령어는 http://www.google.com에 대한 HTTP/1.1 요청을 보내고 소요된 전체 시간을 출력합니다.

HTTP/2 속도 측정

curl -s --http2 -w 'HTTP/2: %{time_total}\n' -o /dev/null https://www.google.com
$ curl -s --http2 -w 'HTTP/2: %{time_total}\n' -o /dev/null https://www.google.com
HTTP/2: 0.286711

위 명령어는 https://www.google.com에 대한 HTTP/2 요청을 보내고 소요된 전체 시간을 출력합니다.

 

주의할 점은 -s 옵션은 출력을 간소화하여 필요한 정보만을 출력하도록 설정합니다. -w 옵션은 출력 형식을 지정하며, %{time_total}은 전체 소요 시간을 나타냅니다. -o /dev/null은 응답 본문을 출력하지 않도록 설정합니다.

 

실제로 테스트할 때는 원하는 사이트의 URL을 사용하면 됩니다. 위 명령어에서 http://www.google.com 및 https://www.google.com을 각각 원하는 사이트의 URL로 변경하세요. 

 

참고URL

- Benefits For REST APIs with HTTP/2 HTTP/1.x vs HTTP/2

 

728x90