특정 클라이언트에서 속도로 불만을 표시해서 찾게된 방법입니다.
우선 페이지의 속도에 대해서 표면적 측정은 1차적으로 데이터를 얼마나 빨리 가지고 오는지
그리고 2차적으로 화면에 그리는데 얼마나 걸리는지를 테스트 하면 어느정도 윤곽이 잡힐 것 같습니다.
개발시에 로그를 보면 항상 데이터는(실서버도 마찬가지지만) 클릭과 동시에 거의 마무리가 되는 구조
였습니다. 이는 로직이나 데이터 로딩시에 아무런 문제가 없다는 의미로 봐도 될 것 같습니다.(다른 의견
이 있으시면 답변 주세요). 그럼 2차적으로 화면에 그려주는 속도의 문제인데
이것을 체크 하는 방법은 다양합니다. 크롬의 Network 속도 체크로 볼 수도 있고 하지만 저는 외부 브라
우저로 속도를 체크 하는 방법을 택했습니다.
http://www.webpagetest.org/ 이 주소로 가면 다양한 방법으로 속도를 체크 해주고 그래프로 보여줘서 여
기서 문제 및 개선 방향도 알려주니 많은 도움이 되었습니다.
거기서 알려주는 개선방향중에 압축에 대한 방안이 있었고 그 압축에 대해서 이야기 하려고 합니다.
페이지 압축은 2가지로 나눌수 있는데 하나는 서버에서 하는것이고 다른 하나는 자바라이브러리를 이용
한 방법입니다. 아파치의 경우는 LoadModule deflate_module modules/mod_deflate.so 이 모듈을 주석을 풀
고 개별 로 적용 시킬경우 (단일 서버에 많은 웹서버가 존재 할 경우 전체를 걸면 서버 CPU 의 악영햘을
초래 할 수 있으므로 사전에 환경에 대한 숙지가 필요 합니다.)
vhost 설정 파일에
<IfModule mod_deflate>
AddOutputFilterByType DEFLATE text/plain text/html text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml application/xml application/rss+xml
AddOutputFilterByType DEFLATE text/css application/javascript application/x-javascript
AddOutputFilterByType DEFLATE audio/midi
DeflateCompressionLevel 9
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.xx에는 HTML만 압축해서 보냄
BrowserMatch ^Mozilla/4\.0[678] no-gzip # Netscape 4.06~4.08에는 압축해서 보내지 않음
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # 자신을 Mozilla로 알리는 MSIE에는 그대로 압축해서 보냄
</ifModule>
이렇게 선언 하면 됩니다.
이것은 php 에는 적용되는거 같지만 jsp 에서는 적용이 안되었습니다.
그래서 tomcat 에서 직접 적용하는 방식을 했습니다.
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
compression=on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/plain,text/css,
text/javascript,text/json,application/x-javascript,
application/javascript,application/json"/>
상기와 같이 적용후 적용 여부 확인은
http://www.whatsmyip.org/http-compression-test/
여기서 하였고 결과는 전송률을 80프로 이상 압축 하였다고 결과과 나옵니다.
40KB -> 7KB 로 줄어들고 속도도 체감할 정도는 되는것 같습니다.
그런데 문제는 일반 서버의 경우 tomcat 이 단독으로 구동 되는 구조가 아니고 앞단에 WEB 서버가
존재하는데 위에 기술 한 접속자를 보면 8080으로 던질때 하는 방식 입니다. WEB 서버와 WAS 는
아파치 톰캣의 경우 mod_jk 모듈로 8009 포트를 이용하여 통신을 합니다. 결국 저 방식은 사용을
못하게 되고 8009 포트에 상기 접속기술자를 적용하고 아파치에도 압출모듈을 적용했지만 결과는
실패입니다.(성공하신분 계시면 성공방법을 알려주세요).
그리고 다른 하나는 자바라이브러리를 이용하는 방법입니다.(가장 확실한 방법 같네요)
maven 에
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>8.1.15.v20140411</version>
</dependency>
아래와 같이 서술 하고 (8버전은 JDK1.6, 9버전이 JDK1.7 입니다.)
WEB.XML에
<filter>
<filter-name>GzipFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
<init-param>
<param-name>mimeTypes</param-name>
<param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
와 같이 기술 하면 됩니다. 생각보다 속도는 향상된 느낌입니다.
JBOSS 5에서는 저는 실패 버전안맞아서...
'JSP·script·jquery' 카테고리의 다른 글
jquery table 데이터 컨트롤 로우 클릭시 컬럼데이터 가져오기 (0) | 2015.05.17 |
---|---|
jquery 이용 테이블 동일값 셀 병합 (0) | 2014.09.19 |
jquery 로딩시 select box 변경값 체크 (0) | 2014.04.15 |
jstl c태그 과 스크립틀릿 사이의 데이터 공유 (0) | 2014.04.02 |
스크립트를 이용한 필드 암호화 및 복호화 (0) | 2014.03.10 |