이미지 등의 정적 리소스는 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를 끄거나 매우 짧게 가져가는 것이 유리할 때도 있다.
API 처럼 지속적 호출이 거의 확실한 경우에는 keepalive를 켠다.
무작정 keepalive 유지 시간을 정하지 말고, 성능 테스트를 해가며 살펴볼 것.
web/performance.txt · 마지막으로 수정됨: 2021/10/19 22:51 저자 kwon37xi