반응형
프론트엔드 개발에서는 요청을 동시적으로 처리해야 하는 경우가 빈번합니다.
이때 HTTP 1.1과 HTTP 2의 처리 방식 차이를 이해하는 것이 중요합니다.
참고로, Spring에서는 HTTP/2를 수동으로 활성화해야 사용 가능합니다. HTTP/2는 Server에 의존하기 때문입니다.
또한 HTTP/2는 TLS 위에서 작동하기 때문에 아래와 같은 키스토어를 만들어주고 시작해야합니다.
> keytool -genkeypair -alias multiflexing -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore src/main/resources/keystore.p12 -validity 3650 -storepass password -dname "CN=localhost, OU=Dev, O=Organization, L=City, ST=State, C=KR" -keypass password
HTTP 1.1
- HOL Blocking: HTTP 1.1은 기본적으로 하나의 TCP 연결에 하나의 요청만 처리하므로, 하나의 요청이 지연되면 다른 요청도 함께 지연되는 HOL Blocking 문제가 발생합니다. 하지만 실제로 개발해보면 지연 현상을 느낀 적이 없을 겁니다. 그런 경우는 보통 브라우저가 처리해주게 됩니다.
- 브라우저의 처리: 최신 브라우저는 여러 요청을 병렬로 처리하기 위해 병렬 처리 건 마다 TCP 연결을 여러개 사용합니다. 이로 인해 요청들이 동시 처리되지만, 그만큼 부하가 발생할 수 있습니다. 즉, 연결이 많아지면 리소스 소비가 증가하고 성능이 저하될 수 있습니다
이런 식으로 여러 연결을 한번에 TCP로 연결해서(할 수 있는 만큼) 수립하되 모든 응답이 다 받아져야 그 다음 요청이 가능합니다.
그러므로 3개중에 한개라도 지연되면 연결이 안되는 현상이 HOL Blocking입니다.
대표적으로 비교할 수 있는 사이트는 아래와 같습니다.
HTTP 2
- 멀티플렉싱: HTTP/2는 단일 TCP 연결을 사용해 여러 요청을 병렬로 처리할 수 있습니다. 이를 멀티플렉싱이라고 하며, HOL Blocking 문제를 해결합니다.
- 헤더 압축: 또한 HTTP/2는 헤더 압축 기능을 제공해, 요청/응답 데이터의 크기를 줄여 네트워크 비용을 절감하고 트래픽 속도를 향상시킵니다.
- 대용량 트래픽: 대용량 트래픽을 처리할 때 HTTP/2는 성능과 자원 효율성 면에서 큰 장점을 제공합니다. 특히 단일 연결에서의 병렬 처리로 리소스 소모를 줄이고 성능을 최적화할 수 있습니다.
- 브라우저 호환성: 구형 브라우저는 HTTP/2를 지원하지 않을 수 있지만, 이런 경우 HTTP/1.1로 자동으로 전환되도록 개발하면 호환성 문제를 해결할 수 있습니다. 단, 이를 지원하려면 개발 분량이 추가로 필요할 수 있습니다.
결론
- HTTP 1.1은 여러 TCP 연결을 사용하여 동시 요청을 처리하지만, 연결 수가 많아지면 성능 저하와 리소스 소비가 증가할 수 있습니다.
- HTTP/2는 단일 TCP 연결로 여러 요청을 병렬 처리하고, 헤더 압축과 멀티플렉싱을 통해 성능과 효율성을 크게 개선할 수 있습니다.
따라서 대용량 트래픽을 처리하거나 성능 최적화가 중요한 프로젝트에서는 HTTP/2를 적극 고려하는 것이 좋습니다. 다만, 구형 브라우저 지원을 고려하면 HTTP/2와 HTTP/1.1을 함께 지원하는 방식으로 개발해야 할 수도 있습니다.
결과적으로 병렬 요청 처리나 헤더 압축이 큰 이점이 아니라면, 대용량 트래픽이라도 HTTP/1.1로 충분히 처리할 수 있습니다.
728x90
'🕸️ Web' 카테고리의 다른 글
Cloud Database Service(2) - Firebase의 Realtime Database 규칙 (0) | 2023.05.24 |
---|---|
Cloud Database Service(1) - 클라우드 DB의 종류 (0) | 2023.05.23 |
SOP(Same Origin Policy)와 CORS(Cross Origin Resource Sharing)의 차이 (0) | 2022.07.20 |
최초의 웹과 스프링이 나오기까지 (2) (0) | 2022.02.10 |
최초의 웹과 스프링이 나오기까지 (1) (0) | 2022.02.10 |