JSP·script·jquery

jsp 서블릿 압축 방법

초이짬 2014. 9. 19. 11:07
728x90

특정 클라이언트에서 속도로 불만을 표시해서 찾게된 방법입니다.

우선 페이지의 속도에 대해서 표면적 측정은 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에서는 저는 실패 버전안맞아서...

728x90