일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- zookeeper
- EC2
- jvm
- Trino
- kubectl
- log
- JavaScript
- docker
- Operating System
- tcp
- AWS
- kubeadm
- CVAT
- Kafka
- grafana
- PostgreSQL
- helm
- CSV
- Vision
- kubernetes
- Packet
- OS
- Python
- airflow
- MAC address
- Network
- ip
- Spring
- java
- aws s3
- Today
- Total
JUST WRITE
HTTP/2.0 적용 본문
이번 글에서는 Spring Boot에서 HTTP/2.0 적용에 대해 정리해보려 한다.
HTTP/2.0은 HTTP/1.1에서 개선된 Protocol이다.
자세한 사항은 아래 글에서 확인 가능하다.
Spring Boot HTTP/2.0 적용
Spring Boot에서는 설정값 하나로 HTTP/2.0 적용이 가능하다.
server.http2.enabled 값을 true로 변경해주면 된다.
application.yml이나 application.properties에서 변경해주면 된다.
<!-- application.yml에서 -->
server:
http2:
eabled: true
HTTP/2.0을 적용하려면 SSL 적용이 필수이다.
SSL 적용은 아래 글에서 확인 가능하다.
HTTP/2.0 with Tomcat
Spring Boot에서는 Embedded Web Server로 Tomcat, Jetty, Undertow 등이 있다.
<!-- pom.xml -->
<!-- 1. Default(Tomcat) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 2. jetty -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Use Jetty instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
기본인 Tomcat 기준으로 HTTP/2.0 적용을 살펴보려 한다.
Spring boot의 Embedded Tomcat은 기본적으로 Version 9.0.x을 제공한다.
Tomcat의 Vesion을 변경하려면 pom.xml에서 아래 property 값을 설정해주면 된다.
<properties>
<tomcat.version>9.0.56</tomcat.version>
</properties>
Tomcat 9.0.x과 JDK 9 이상 Version에서는 HTTP/2.0 적용이 문제없이 가능하다.
대신 JDK 8에서는 추가적인 조치가 필요하다.
libtcnative Library 설치가 필요하다.(참고 링크)
libtcnative Library는 APR(Apache Portable Runtime)을 사용할 수 있게 해주는 Library이다.
설치 후 아래 JVM Argument를 추가해야 할 수도 있다.
-Djava.library.path=/usr/local/opt/tomcat-native/lib
JDK8에서 해당 Library 없이 HTTP/2.0을 사용하려고 하면 아래와 같은 Error가 발생한다.
ERROR 8787 --- [ main] o.a.coyote.http11.Http11NioProtocol : The upgrade handler [org.apache.coyote.http2.Http2Protocol] for [h2] only supports upgrade via ALPN but has been configured for the ["https-jsse-nio-8443"] connector that does not support ALPN.
HTTP/2.0 확인
준비가 되었으면 HTTP/2.0 작동 여부 확인이 필요하다.
curl를 통해 확인하려 한다.
Window Version는 아래 링크에서 다운로드 가능하다.
https://winampplugins.co.uk/curl/
curl에 몇 가지 옵션을 주어 확인이 가능하다.
Option | Description |
-I, --head | HTTP Header만 보여주고 Content는 안 보여 줌. |
-k, --insecure | https Site를 SSL Certicate 검증 없이 연결 |
--http2 | http2 통신하기 위한 Option |
server.http2.enabled 옵션 false일 때
HTTP/2.0은 지원하지 않고, HTTP/1.1만 통신하는 것을 확인할 수 있다.
server.http2.enabled 옵션 true일 때
HTTP/2.0은 지원하는 것을 확인할 수 있다.
마지막으로 HTTP/2.0 지원은 Web Browser마다 다르니 아래 사진을 참고하길 바란다.
'Programing > Spring' 카테고리의 다른 글
Spring Boot Configuration with Jasypt (0) | 2022.01.13 |
---|---|
@ControllerAdvice Exception 처리 (0) | 2022.01.03 |
BeanFactory vs ApplicationContext (0) | 2021.12.21 |
Bean Annotations (0) | 2021.12.20 |
@Autowired (0) | 2021.10.22 |