JavaScript È°¿ëÆÁ
2008.11.26 / 16:54

gzipÀ» ÀÌ¿ëÇÑ JavaScript¾ÐÃà Àü¼Û ¹æ¹ý

Å×½ºÅÍ
Ãßõ ¼ö 229

gzipÀ» ÀÌ¿ëÇÑ JavaScript¾ÐÃà Àü¼Û ¹æ¹ý

Web 2.0ÀÌ »ýÈ°ÀÇ ÀϺΰ¡ µÇ¸é¼­ JavaScriptÀÇ Å©±â°¡ Á¡Â÷ Ä¿Áö°Ô µÇ¾ú°í ¾ó¸¶³ª »¡¸® JavaScriptÀ» Àü¼ÛÇÒ ¼ö ÀÖ´À³Ä°¡ Áß¿äÇÑ À̽´°¡ µÇ°Ô µÇ¾ú´Ù.
À̹ø¿¡´Â HTTP 1.1¿¡¼­ ±âº»ÀûÀ¸·Î Áö¿øÇÏ´Â gzip¾ÐÃàÀ» ÀÌ¿ëÇؼ­ ÆÐŶ »çÀÌÁ ÁÙÀÌ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ.

ÀÛ¾÷Àº ºê¶ó¿ìÀú´Â Internet Explorer 7.0, ¼­¹ö´Â Tomcat 5.5¸¦ ÀÌ¿ëÇÏ¿´°í ÆÐŶ ¾ÐÃà¿¡ ´ëÇÑ ºÎºÐÀº HTTP Watch¸¦ ÀÌ¿ëÇÏ¿´´Ù.

¸ÕÀú JavaScriptÀ» ¾ÐÃàÇÏ´Â ServletÀ» ÀÛ¼ºÇÑ´Ù.
1) request.getHeader("accept-encoding") ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­ ºê¶ó¿ìÀú¿¡¼­ Áö¿ø°¡´ÉÇÑ Encoding Á¾·ù¸¦ È®ÀÎÇÑ´Ù. ÀϹÝÀûÀÎ ºê¶ó¿ìÀú¿¡¼­´Â gzip, deflate¸¦ Áö¿øÇÑ´Ù.
2) gzipÀ» ºê¶ó¿ìÀú¿¡¼­ Áö¿øÇÏ´Â °æ¿ì responseÀÇ header¿¡ Content-Encoding=gzipÀ¸·Î ¼³Á¤ÇÏ°í java.util.zip.GZIPOutputStreamÀ» ÀÌ¿ëÇؼ­ µ¥ÀÌÅ͸¦ ¾ÐÃàÇÑ´Ù.
3) gzipÀ» Áö¿øÇÏÁö ¾Ê´Â °æ¿ì ±âÁ¸ ¹æ½Ä´ë·Î ServletOutputStreamÀ» ÀÌ¿ëÇؼ­ ºê¶ó¿ìÀú·Î Àü¼ÛÇÑ´Ù.
4) web.xml¿¡ servletÀ» µî·ÏÇÑ´Ù. 

  <servlet>
    <servlet-name>tester1</servlet-name>
    <servlet-class>tester.Test</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>tester1</servlet-name>
    <url-pattern>/tester1</url-pattern>
  </servlet-mapping>

¿¹Á¦ ¼Ò½º´Â ¾Æ·¡¿Í °°´Ù.

package tester;

import java.io.*;
import java.text.*;
import java.util.*;
import java.util.zip.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Test extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException   {
        OutputStream out = null;
        try {
            String jsSource = "alert('hello world!');";
            String ae = request.getHeader("accept-encoding");
            if (ae != null && ae.indexOf("gzip") != -1) {
                response.setHeader("Content-Encoding", "gzip" );
                out = new java.util.zip.GZIPOutputStream( response.getOutputStream() );
                out.write( jsSource.getBytes() );
            } else {
                out.write( jsSource );
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if( out != null ) {
                try {
                    out.flush();
                    out.close();
                    out = null;
                } catch( Exception e ) {}
            }
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}



±× ´ÙÀ½ Å×½ºÆ®¸¦ À§ÇÑ HTMLÀ» ÀÛ¼ºÇÑ´Ù.

<html>
<head>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
<meta http-equiv='Content-Type' content='text/html; charset=euc-kr'>
<title>gzip test</title>
<script language='JavaScript'>
function test() {
    var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    var url = "/tester1";
    oXmlHttp.open("GET", url, true);
    oXmlHttp.onreadystatechange=  function()  {
        if (oXmlHttp.readyState == 4) {
            alert( oXmlHttp.responseText );
            eval( oXmlHttp.responseText );
        }
    };
    oXmlHttp.send( null );
}
</script>
</head>
<body>
<a href="javascript:test()">gzip test</a>
</body>
</html>

HTTP Watch¸¦ ½ÇÇà½ÃÅ°°í Å×½ºÆ®¸¦ ¼öÇàÇÏ¸é ¾Æ·¡¿Í °°´Ù.

ºê¶ó¿ìÀúÀÇ ¸µÅ©¸¦ Ŭ¸¯Çϸé test1 ¼­ºí¸´¿¡¼­ ´Ù¿î¹ÞÀº ½ºÆ®¸µÀÌ Ãâ·ÂµÈ´Ù.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

HTTP WatchÀÇ StreamÅÇÀ» »ìÆ캸¸é gzipÀ¸·Î ¾ÐÃàµÈ µ¥ÀÌÅÍ°¡ Àü¼ÛµÇ¾î ±úÁ® º¸ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö


HTTP WatchÀÇ ContentÅÇÀ» »ìÆ캸¸é ¾ÐÃàÀÌ Ç®·Á ÀÖ´Â Á¤»óÀûÀÎ µ¥ÀÌÅ͸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.  ¶ÇÇÑ µ¥ÀÌÅÍ ¾ÐÃà·üÀÌ 18.6%ÀÎ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. (½ÇÁ¦ µ¥ÀÌÅÍ°¡ ¸¹Àº °æ¿ì ÈνŠ³ªÀº ¾ÕÃàÀ²À» º¸¿© ÁÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ¾ú´Ù.)
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö