Apache2 + Tomcat + Spring http2 프로토콜 적용

따봉도관절

·

2022. 11. 11. 22:15

http2 프로토콜을 사용해야 하는 이유는 https://www.httpvshttps.com/ 링크에서 http/1.1과 http2 프로토콜의 차이를 확인하실 수 있습니다. 해당 웹페이지는 단순히 https를 적용해서 빠른 것이 아니라 http2 프로토콜을 적용해주었기 때문에 속도가 빨라진 것입니다. 기존 http에서 https로 암호화를 추가했다면 속도가 더 느려지는 것이 정상입니다. 이를 보완하기 위해 http2 프로토콜이 개발되었고, 심지어 구글은 현재 UDP 기반의 http3 프로토콜을 도입하였습니다.

 

http2 프로토콜 적용은 CentOS7 Apache2에 Let's Encrypt으로 SSL 인증서 무료 발급받기 포스팅 이후 이어지는 글임을 참고해주시기 바랍니다.


[STEP 1] mod_http2 설치 진행

 

$ yum install mod_http2

 

위와 같은 에러가 뜨면서 mod_http2 설치 실패시 yum clean metadata 실행 후 재 설치

 

[STEP 2] /usr/lib64/httpd/modules 경로 이동 후 mod_http2.so 파일 확인

 

$ cd /usr/lib64/httpd/modules
$ ls

 

 

[STEP 3] /etc/httpd/conf 경로 이동 후 httpd-ssl.conf 파일 아래 코드 추가

 

$ cd /etc/httpd/conf
$ vi httpd-ssl.conf

SSLProtocol TLSv1.3
Protocols h2 http/1.1

 

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        DocumentRoot /var/www/html
        ServerAdmin gcpower@gmail.com
        ServerName gcpower.kr
        ServerAlias gcpower.kr

        ErrorLog logs/error_log
        CustomLog logs/access_log common

        SSLProtocol TLSv1.3
        Protocols h2 http/1.1

        SSLProxyEngine On
        ProxyRequests off
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:39082/
        ProxyPassReverse / http://127.0.0.1:39082/

        SSLCertificateFile /etc/letsencrypt/live/gcpower.kr/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/gcpower.kr/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/gcpower.kr/chain.pem

        Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
</IfModule>

 

[STEP 4] /etc/httpd/conf.d 경로 이동 후 ssl.conf 파일 77-78 라인 +TLSv1.2 내용 제거

 

$ cd /etc/httpd/conf.d
$ vi ssl.conf

SSLProtocol +TLSv1.3
SSLProxyProtocol +TLSv1.3

 

최신 버전인 TLSv1.3 프로토콜만 사용하도록 수정

 

[STEP 5] 아파치 재시작 후 SSL/TLS 프로토콜 적용 여부 확인

 

$ systemctl restart httpd
$ systemctl status httpd # 아파치 재시작 후 꼭 상태 확인

 

기존 http/1.1 프로토콜에서 h2로 업그레이드 되었다.

 

포스트맨에서 API를 날리고 위와 같이 확인해보면 TLSv1.3이 사용된 것을 확인할 수 있다.

 

[STEP 6] Tomcat /usr/local/tomcat/bin/server.xml 파일 수정

 

$ cd /usr/local/tomcat/bin
$ vi server.xml

 

  • Connector 태그 안에 아래 내용 추가

 

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

 

 

[STEP 7] 톰캣 재실행

 

$ cd /usr/local/tomcat/bin
$ ./shutdown.sh
$ ./startup.sh

 

[STEP 8] Spring Web Application /src/main/resources/application.properties 아래 코드 추가

 

server.http2.enabled=true

 

 

[STEP 9] Spring Web Application 빌드 후 배포


http2 적용 이후 리액트 → 스프링 부트 10초가 넘게 걸렸던 대용량 엑셀 업로드 API가 1~2초 정도로 눈에 띄게 줄었으며 이외에 웹페이지 로딩부터 로그인 API 등 모든 부분에서 체감이 느껴졌다.