728x90

http는 state less이며 connection less이다.

즉 계속 연결되어 있는 상태가 아니라 하고싶은 말만하고 연결을 끊는다.

이 방식을 채택하게된데는 바로 "여러 클라이언트의 접속"을 원활히 하기 위해서이다.


하지만 당연히 비연결 지향이라는것은 단점역시 가지고 있다.

인터넷에서 모든 데이터는 보내는데 생각보다 많은 비용을 지불한다.

그래서  추가한 기능이 바로 keep alive이다.


왼쪽의 경우를 보면 데이터를 주고 받을 때 열고 닫고를 반복한다.

그러나 keep alive를 설정하면 데이터를 계속 주고 받을 수 있다. 바로 우리가 지정한 시간 내에서 말이다.

데이터를 빈번하게 주고받아야한다면 좋은 선택이 될 수 있다.


단 무조건 좋은 기능은 아니다.

사실 keepalive는 오히려 성능 하락의 주범인 경우가 많다.

사용자가 많다면 연결이 늘어나서 새로운 사용자를 받아들이지 못하는 경우가 빈번히 일어난다.

그래서 사용자가 많고 유동이 많은 서비스에서는 사용이 권장되지 않는다.


이게 어떻게 설정하고 동작하는지 서버별로 보자.


apache



apache에서는 keep alive의 default는 on상태이다.

즉 아무 설정을 안하면 keep alive는 켜져있는 상태이다.

보면 알겠지만 Connection이 Keep-Alive로 되어있다.

아래 보면 Keep-Alive 헤더에 timeout과 max가 보인다.


timeout - keep alive를 유지하는 시간

max - keep alive의 횟수 제한


즉 위의 경우 5초 안에 같은 경로로 호출하면 max수가 깎이면서 호출이된다.



보다시피 max의 카운터가 까지면서 호출이 된다.

즉 시간제한과 갯수제한이 있다.


만약 keep alive기능을 종료하고 싶다면 아래처럼하면된다.



apache설정파일 위치로 가보도록 하자. httpd.conf파일을 열어본다.



만약 KeepAlive를 끄고싶다면 아래처럼 추가시켜준다.



이제 apache를 재시작해준다.



그럼 보다시피 Connection이 close가 되어 keep alive상태가 아닌걸 확인할 수 있다.




KeepAliveTimeout - 시간제한을 설정

MaxKeepAliveRequests - 횟수제한을 설정


httpd.conf 에서 횟수제한과 시간제한을 설정할 수 있다.



보다시피 횟수제한과 시간제한이 바뀐걸 확인할 수 있다.


nginx



nginx에서도 기본 설정은 on이다.

다만 여기서 keep-alive헤더는 없다.

이유는 아래와 같다.



사실 keep alive는 표준 헤더가 아니며 사용이 권장되지도 않는다.

물론 억지로 만들어 줄려면 add_header로 만들어줄 수 있다. 하지만 굳이 그렇게 까지 할 필요는 없다.



keepalive_timeout - 시간제한을 지정, 0으로 지정하면 keep-alive를 종료한다.

keepalive_requests - 횟수제한을 지정


nginx의 설정파일로가서 각각 시간제한과 횟수제한을 선택할 수 있다.

nginx.conf파일로 가서 설정해주면 된다.

+ Recent posts