HTTP/1.1 프로토콜의 성능 개선 방법에 대해 알아보겠습니다.
HTTP/1.1에서 기본적으로 사용되는 Keep-Alive 기능은 TCP 연결 수를 줄여 네트워크 지연을 감소시키는 방식입니다. 하지만 이 외에도 다양한 최적화 전략이 존재합니다.
주요 최적화 방향은 다음과 같습니다:
- HTTP 요청 횟수 감소
- 요청 처리 효율 향상
- 서버 응답 데이터량 최소화
1. HTTP 요청 횟수 감소 전략
요청 횟수를 줄이는 방법으로는 다음과 같은 접근법이 있습니다:
- 중복 요청 제거: 동일한 콘텐츠에 대한 요청은 로컬 캐시에서 직접 응답을 불러옵니다.
- 요청 병합: 여러 작은 파일은 하나의 대형 파일로 통합하여 전송합니다.
- 지연 요청: 초기 로딩 시 필요한 자원만 우선 전송하고, 나머지는 스크롤 시 동적으로 불러옵니다.
예를 들어, 이미지 스프라이트 기술은 여러 소형 이미지를 하나의 대형 이미지로 합쳐 하나의 요청으로 처리합니다. 또는 웹팩과 같은 도구를 사용해 CSS/JS 파일을 통합할 수 있습니다. 또한, base64 인코딩을 통해 이미지 데이터를 HTML 내부에 포함시켜 추가 요청 없이 전송할 수 있습니다.
2. 요청 처리 효율 향상
요청 처리 속도를 높이기 위한 방법은 다음과 같습니다:
- 리디렉션 최소화: 클라이언트가 리디렉션을 직접 처리하도록 하면 중간 서버에서 처리하는 것보다 더 많은 시간이 소요됩니다.
- 캐시 활용: `ETag`와 `Last-Modified` 헤더를 통해 캐시 무효화를 관리합니다. 클라이언트는 변경된 자원 여부를 확인 후 필요 시 다시 요청합니다.
- TCP 연결 최적화: Keep-Alive를 활성화해 연결 수를 줄이고, HTTP/1.1의 파이프라인 기능을 활용해 동시 요청을 처리합니다.
3. 서버 응답 데이터량 최소화
응답 데이터 크기를 줄이는 방법으로는 다음과 같은 압축 기술을 사용할 수 있습니다:
- 무손실 압축: Gzip이나 Brotli 알고리즘을 사용해 텍스트 데이터를 압축합니다. `Accept-Encoding` 헤더에 지원하는 압축 방식을 명시해야 합니다.
- 유실 압축: 이미지나 비디오처럼 품질 저하가 허용되는 데이터에는 WebP, H.265 등 고압축률 알고리즘을 적용합니다.
예시 코드:
GET /index.html HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate
HTTP/1.1 200 OK
Content-Encoding: gzip
위 예제에서는 클라이언트가 지원하는 압축 방식을 선호순으로 명시하고, 서버는 적절한 압축 방식으로 응답합니다.