제가 운영하는 작은 웹사이트가 있는데 이미지 트래픽을 줄여보려고

LazyLoad를 쓰고 있습니다. (아시죠? 스크롤하면 나중에 이미지 로드하는...)

전에는 그럭저럭 잘 썼는데 http2를 적용하면서 걱정이 생겼습니다.

아시겠지만 http2는 https를 필수로 필요로 하게 되죠. 거기에 추가로

이것저것 올라갔으니 http2의 커넥션은 그냥 http와 비교하면 훨씬

느리면 느렸지 절대 빠르지는 않겠죠.

그런데 lazyload를 하게 되면 스크롤에 따라 이미지를 띄엄띄엄

한장씩 로드하게 되니다.

그러다보니 전보다 (걍 HTTP쓸때) 느려진게 아닌가 하는 생각이 들더군요.

(웬지 붐비는 시간대에는 이미지 로딩되는거 덜커덩 덜커덩 거리는

느낌도 들구요 스크롤해도 한박자 늦게 이미지가 뜨는거죠.)

그래서 http2 커넥션을 끊지 않고 계속 유지하고 있으면 화면을

스크롤해서 새로운 이미지를 로드해야 할때 새로운 커넥션을

맺지 않아도 되니까 더 빨라지지 않을까 했습니다.

하지만 이와 관련된 자세한 정보를 찾을 수가 없더군요.

일단 저같은 고민을 하는 사람이 없는건 아니었습니다.

하지만 stackoverflow에 답변은 lazyload같은거 쓰지 마세요 였습니다.

하지만 안되요! 트래픽 절감 효과를 확실히 느끼고 있단 말입니다...

일단 제 생각엔 Keep-Alive를 길게 늘리면 되지 않을까? 상상하고 있습니다.

(한 2분 정도?)

다만 이게 HTTP2가 안되는 경우에는 좀 크게 문제가 되는게 아닐까 하는

생각도 들고.. HTTP2야 커넥션 딱 하나니까 길게 유지해도 괜찮겠지만

다수의 HTTP 커넥션이 길게 유지된다고 치면... 거기에 사람까지 늘어나면

어우야..

그리고 Keep-Alive가 HTTP2에서도 적용된다는걸 확신할 수가 

없더군요. 그리고 이렇게 커넥션을 계속 유지하고 있으면 아파치 메모리가

어떻게 될지도 잘 모르겠구요...

이렇게 다수의 커넥션을 오랫동안 유지하려면 아파치가 아니라

nginx로 이사가는게 좋은걸까 하는 생각도 들고...

혹시 여기에 관해서 좀 정보나 지식을 가지고 계신 분이 계시다면 저에게

공유해주시면 안될까요? 부탁드리겠습니다...

크롬 디버그 창을 아무리 뒤져도 HTTP/2 연결이 지금 살아있는지 죽어있는지

알 수가 없어요..

  • profile

    http2는 기본적으로 http보다 빠릅니다. 이것저것 많이 올라가기는 했지만, 그 사이에 기술 자체가 훨씬 발전했으니까요. 예를 들면 모든 http 요청과 응답에 기본으로 포함되어 있는 헤더들을 압축해서, 처음에 오가는 패킷 수를 확 줄여버립니다. 푸쉬 같은 고급 기능을 사용하지 않더라도 이것만으로도 성능 개선 효과가 엄청납니다.

     

    그러나 http에서 속도를 향상시켜 준다고 알려져 있던 갖가지 트릭들은 대부분 재검토가 필요합니다. 예전에는 일부러 여러 커넥션을 열어서 쓰기도 했지만, SSL 때문에 커넥션 하나하나를 여는 데 시간이 많이 걸리니 (TCP round trip + SSL round trip) 이제는 하나의 커넥션으로 최대한 많은 통신을 해야 하지요.

     

    Lazyload 쓰지 말라는 답이 정답이기는 합니다. 특히 Stack Overflow에서 나온 답이라면 해외 개발자들의 관점에서 쓰여졌을 것이고, 미국이나 유럽에서는 트래픽에 신경쓸 필요가 거의 없기 때문에 웬만큼 큰 사이트 운영자가 아니라면 트래픽 절약의 필요성 자체를 이해하지 못합니다. 당연히 그런 부분은 전혀 감안하지 않은 채 기술의 발전이 이루어집니다.

     

    Keep-Alive를 길게 쓰시려면 아파치보다 nginx가 좋습니다. 아니, 일반인이 운영하는 사이트라면 99%의 확률로 그냥 아파치보다 nginx가 좋습니다. (아파치님 죄송합니다 ㅜㅜ)

  • profile ?
    아.. 자문자답이 되었는데 HTTP/2에서는 Connection과 Keep-Alive를 무시한다네요...
    커넥션 맺고 끊는 것은 그냥 혼자 알아서 척척척..
    외부 컨트롤이 안되나 봅니다.
    걍 포기해야겠네요.