이미지 등의 정적 리소스는 4대 정도의 서버에 분할해서 서빙하는 것이 좋다(예: img1.xxx.com, img2.xxx.com, …). 4대를 초과하면 DNS Lookup시간 때문에 오히려 성능이 떨어질 수 있다.
keepalive
기본적으로 keepalive를 켜서 커넥션을 재활용하는 것이 좋다.
AWS ALB 같은 Proxy 서버에서 Idle 커넥션을 특정 시간에 끊어버릴 수 있다. Http Client 는 Proxy 서버의 idle 타임아웃보다 더 적게 커넥션을 idle 상태로 유지하게 설정해야 한다. 안그러면 Proxy 가 끊어버린 커넥션을 재사용하려들다가 에러가 발생한다.
이에 따라, HTTP Client Keep Alive X → ALB Keep Alive Timeout Y → nginx/was Keep Alive timeout Z 가 있을 때 X < Y < Z 여야 한다.
최근 웹서비스들 중 웹 애플리케이션은 CSS, Image, JS등을 직접 서빙하지 않고 CDN에 맡기고, 웹 애플리케이션 자체는 컨트롤러 역할만 하는 경우가 많다.
이 경우 keepalive를 길게 가져가면 웹 브라우저를 통한 사용자 접속이 커넥션 소켓만 점유할 뿐 실질적인 이득이 없다.
사용자가 컨트롤러를 호출하는 것은 주로 마우스 클릭등이 발생했을 때인데 이 시간이 길기 때문이다.
따라서 웹 애플리케이션 특징에 따라 keepalive를 끄거나 매우 짧게 가져가는 것이 유리할 때도 있다.