기존 설계: 웹 페이지를 하나 열 때마다 웹 서버 쪽에서 방금 열린 웹 페이지에 대응하는 객체를 만들어 유지시킨다.(이런 객체는 네트워크 어댑터, 데이터 캐시, 데이터 변환 등 다양하게 사용된다.)
하지만 이런 객체가 너무 많으면 서버의 성능에 영향을 미친다.
개선 방안:사용자가 동시에 열어볼 수 있는 웹 페이지 수를 제한한다.
하지만, HTTP 메시지를 보내는 그 순간을 쉽게 포착할 수 없다. 또한 웹 브라우저의 창이 닫히거나 사용자가 전혀 새로운 웹 페이지로 이동하는 순간을 웹 서버에서 포착하는 것은 어렵다.
따라서 웹 서버가 웹 페이지가 닫히거나 교체되는 순간을 감지해야 한다.
1. 웹 소켓 사용:
클라이언트와 서버의 양방향 통신으로 해당 순간을 포착할 수 있다.
2. AJAX(Asynchronous JavaScript and XML):
비동기적으로 서버와 통신할 수 있는 기술이다. 일정 주기마다 서버에 요청을 보내고 응답이 없으면 닫힌 것으로 간주한다.
3. Server-Side-Events(SSE):
서버에서 클라이언트로 데이터를 보내는 기술 "keep-alive" 메시지를 주기적으로 보내고 응답이 없으면 닫힌 것으로 간주한다.
4. Cookie, Session:
Cookie, Session을 이용하여 클라이언트의 상태를 확인하고 일정기간 동안 클라이언트와 소통이 없으면 닫힌 것으로 간주한다.
5. 자바 애플릿 사용 :
페이지가 닫히거나 새로운 페이지로 이동할 때 웹 브라우저 프로세스와 함께 동작하는 JVM이 애플릿 내부에 존재하는 'stop', 'destroy' 메서드를 호출한다. 따라서 그 메서드 안에 서 웹 서버에게 신호를 보내면 웹 페이지가 닫히거나 교체되는 순간을 포착할 수 있다.