웹어플리케이션에서의 JSF의 큰 특징은 상태를 유지한다는 점이다.
원래 HTTP 는 stateless 프로토콜이지만 JSF 는 뷰에 대한 상태를 저장하고 복원할 수 있도록 메카니즘이 구성되어 있다. 이 때문에 JSF는 일반적으로 순수 JSP보다 속도가 느려질 수 밖에 없다.
따라서 JSF관점에서 Performance Tuning 의 포인트는 상태를 어떤 식으로 저장하는가이다.
상태저장방식
server side - servlet session 을 이용함
client side - hidden HTML input 을 이용함
상태저장옵션
serialization
compression
encryption
encoding
Server Side vs. Client Side 결정고려사항
Server Memory
Client Memory
CPU usage
Browser back button and multiple views
Bandwidth
Server restart friendlyness
Security
Server Side vs. Client Side 장단점
Server Side | Client Side | |
장점 | -. Bandwidth 사용이 적음 -. CPU 처리시간 사용이 낮음(직렬화하지 않을 경우만) -. AJAX 관련문제가 더 적음 (서버로 상태를 보낼 필요가 없음) -. 자바스크립트없는 어플리케이션이 가능함 |
-. Servlet Session이 전혀 필요없음 -. Request에 대한 메모리 소모가 없음 -. 브라우저 reload 테스트가 가능함 -. 브라우저 뒤로가기 문제가 없음 -. concurrency 이슈가 없음 -. 클러스터 환경구성이 편함 -. 재시작이 가능함 |
단점 | -. 사용자당 한 세션이 필요하므로 메모리 소모가 많음 -. 뒤로가기 지원을 위한 여러 views들에 필요한 메모리 소모 -. 클러스터 환경구성시 세션이 다른 노드로 이동되어야 함 -. context가 저장되지 않으므로 개발시 같은 context를 반복해서 입력해주어야 한다. |
-. 더 높은 Bandwidth -. 더높은 CPU 처리시간 -. 사용자측 메모리 사용이 더 높음 -. 보안 문제가 있을 수 있음 |
Performance Tuning 방법 (Myfaces 기준)
General Performance Tuning
1. StreamingAddResource
2. <HEAD> 태그 대신 컴포넌트를 이용
Server Side State Performance Tuning
1. STATE_SAVING_METHOD => server
2. COMPRESS_STATE_IN_SESSION => false
3. SERIALIZE_STATE_IN_SESSION => false
4. NUMBER_OF_VIEWS_IN_SESSION => 20 (알아서 적당히)
Client Side State Performance Tuning
1. Jboss serialization 이용
참고자료
JavaOne : PerformanceBOFatJavaOne
myfaces wiki : Performance