lecture Home > Professional Secrets

À¯¼ö¼®ÀÇ .NET °í±Þ±â¼ú Inside

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2005³â 07¿ù 18ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2006³â 12¿ù 26ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : Loner(À¯ °æ»ó)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : HTTP ¾ÐÃà (2) : HTTP ¾ÐÃà ÀÛµ¿ ¿ø¸®

°­Á Àü Å¿ÀÀÇ Àâ´ã>

À¯¼ö¼®Àº ÇöÀç µå¿ø ¼ÒÇÁÆ®¿þ¾îÀÇ ¼ö¼® ÄÁ¼³ÅÏÆ®·Î ±Ù¹«ÇÏ°í °è½Ã¸ç, .NET ¾ÆÅ°ÅØÃ³ ¹× ÄÁ¼³ÆÃ°ú °ü·ÃÇÑ ÀÏÀ» Çϰí ÀÖ½À´Ï´Ù. °í¼öµé »çÀÌ¿¡¼­´Â ÀÌ¹Ì ¾Ë·ÁÁ® ÀÖ´Â À¯¸íÀÎÀ̸ç, Á¦°¡ ¾Æ´Â ÇÑ ±èÇö½Â(´å³Ý¿¢½ºÆÛÆ®)°ú ´õºÒ¾î ±¹³» .NET ±â¼úºÐ¾ßÀÇ ÃÖ°í °í¼ö·Î Æò°¡¹Þ°í ÀÖ´Â µÑ°°¡¶ó¸é ¼­·¯¿ö ÇÒ Àι°ÀÔ´Ï´Ù.
(ƯÀÌÇϰԵµ º»ÀÎÀº ¼­·¯¿öÇÏÁö ¾ÊÀ½. ÀÌ»óÇÏ°Ô ÁÖº¯ »ç¶÷µéÀÌ ´õ ¼­·¯¿öÇÔ)

Àå±â°£ÀÇ È¸À¯¿Í Ä¿ÇÇÁ¢´ë¸¦ °ÅÃÄ..

µåµð¾î, Àý´ë·Î!! ´Ù¸¥ »çÀÌÆ®³ª ºí·Î±×¿¡ ÆÛ°¨ÁúÀ» Çã¿ëÇÏÁö ¾Ê´Â ±×ºÐÀÇ ±ÛÀ» Å¿À »çÀÌÆ®¿¡¼­µµ ÇÔ²² Çϱâ·Î ÇÏ¿´½À´Ï´Ù. ½±°Ô ¾Ë¼ö ¾ø´Â °í±Þ½º·¯¿î ºñ¹ý °­ÁµéÀÌ À̾îÁø´Ù°í ±â´ëÇØµµ ÁÁ½À´Ï´Ù.

´õºÒ¾î, ÀÌ °­Á´ ¿ÜºÎ Æß ±ÝÁö ±ÛÀ̱⵵ ÇÕ´Ï´Ù
ÆäÀÌÁö ¸µÅ©´Â °¡´ÉÇϳª, ³»¿ë ÀÚü¸¦ ÆÛ°¡¼­ ÀÚ½ÅÀÇ ºí·Î±×¿¡ ¿Ã¸®´Â °ÍÀº ±ÝÁöÇϰí ÀÖ½À´Ï´Ù.
¾çÇØÇØ Áֽñ⠹ٶø´Ï´Ù.

Âü°í·Î, À¯¼ö¼®´ÔÀÇ ºí·Î±×´Â http://www.simpleisbest.net ÀÔ´Ï´Ù
ÇöÀç °­ÁÂÀÇ ¿øº» ±ÛÀÇ ¸µÅ©´Â http://www.simpleisbest.net/archive/2005/07/14/184.aspx ÀÔ´Ï´Ù.



Áö³­ Æ÷½ºÆ®¿¡¼± HTTP ¾ÐÃàÀ» ½á¾ßÇÏ´Â ÀÌÀ¯¿¡ ´ëÇØ ½äÀ» Ç®¾î ºÃ¾¹´Ï´Ù. ¹¹ ¿ì¸®³ª¶ó °°ÀÌ ³×Æ®¿öÅ© ÀÎÇÁ¶ó°¡ ÁÁÀº »óȲ¿¡¼± HTTP ¾ÐÃàÀÌ ¾¾°¡ ¾È¸ÔÈú °¡´É¼ºÀÌ ³ôÁö¸¸ ±×·¡µµ Á¦ »ý°¢Àº HTTP ¾ÐÃàÀÌ À¯¿ëÇÏ´Ù´Â °Ì´Ï´Ù. ÃÖ±Ù¿¡ 100Mbps¸¦ »ç¿ëÇÏ´Â »ç¿ëÀڵ鵵 ¸¹¾ÆÁ³Áö¸¸ ¾ÆÁ÷µµ ÄÉÀ̺í¸ðµ©(ÃÖ°í 10Mbps)À̳ª ADSL(2-4Mbps)À» »ç¿ëÇÏ´Â »ç¶÷µµ ¸¹±â ¶§¹®ÀÌÁÒ(Á»´õ È¿°ú¸¦ º¸·Á¸é À̹ÌÁö ÆÄÀϵ鿡 ´ëÇÑ Ä³½Ã ¿ª½Ã µ¿¹ÝµÇ¾î¾ß ÇϰÚÁö¸¸...). ±×·¡¼­ …A…AÀÌ ¾¾ºÎ·Á º¼·Æ´Ï´Ù.

HTTP Compression (II) - Principle

¿ä¹ø¿£ HTTP ¾ÐÃàÀ̶õ °ÍÀÌ ±¸Ã¼ÀûÀ¸·Î ¾îÄÉ ÀÛµ¿Çϴ°¡¸¦ »ìÆìº¸µµ·Ï ÇϰڴÙ. ÀÌ·±°Å ´Ù ¶§·ÁÄ¡°í °ð¹Ù·Î HTTP ¾ÐÃàÀ» »çÀÌÆ®¿¡ Àû¿ëÇØ º¸°íÀÚ ÇÏ´Â »ç¶÷µé¿¡°Õ ¸¶´Ï ¹Ì¾ÈŸ... ¿ø¸®¸¦ ¸ð¸£°í µ©ºñ´Â °Í ó·³ ¿ë°¨ÇÑ °ÍÀÌ ¾ø´Ù(XX ÇÏ¸é ¿ë°¨ÇÏ´Ü ¸»À» ÀÌ·± ¶§ ¾²´Â°Å ¾Æ´·±î?). ÀÌ·±°Å ¾Æ¹«·± µµ¿ò ¾ÈµÈ´Ù...

HTTP 1.1 Protocol

HTTP 1.1 ÇÁ·ÎÅäÄÝÀ» ¸í¼¼Çϰí ÀÖ´Â RFC2616À» ÂùÂùÈ÷ »ìÆìº¸¸é º¹ÀâÇÑ ¼³¸í°ú ±ä ³»¿ë¿¡ ÇѼû¸¸ ³ª¿Ã °ÍÀÌ´Ù(¹°·Ð ÇÊÀÚµµ ±×·¸´Ù). HTTP ¾ÐÃà¿¡ °ü·ÃµÈ ÇÁ·ÎÅäÄÝ ¸í¼¼´Â ±×´ÙÁö º¹ÀâÇÏÁöµµ ¸¹Áöµµ ¾Ê´Ù. °£´ÜÈ÷ ²À ÇÊ¿äÇÑ °Å¸¸ ¼³¸íÇϰڴÙ(»ç½Ç ÇÊÀÚ°¡ ¾Æ´Â °ÍÀÌ ±×°Í¹Û¿¡ ¾ÈµÇ¹Ç·Î... -_-).

HTTP ¾ÐÃàÀº (»ç½Ç HTTP ÇÁ·ÎÅäÄÝÀº HTTP ¾ÐÃàÀ̶õ ¿ë¾î¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. Content-Coding À̶õ ¿ë¾î¸¦ ¾²¸ç ÀÌ Content-CodingÀÌ ÁÖ·Î ¾ÐÃàÀÇ ¿ëµµ·Î »ç¿ëµÈ´Ù°í ¸í½ÃÇϰí ÀÖÀ» »ÓÀÌ´Ù) µÎ °³ÀÇ HTTP Çì´õ Çʵ忡 ÀÇÇØ ÀÛµ¿ÇÑ´Ù. Accept-Encoding Çì´õ¿Í Content-Encoding Çì´õ°¡ ±×°ÍÀε¥ ÀÌ µÎ°³ÀÇ HTTP Çì´õ °ªÀ» ÅëÇØ Ŭ¶óÀ̾ðÆ®(À¥ ºê¶ó¿ìÀú)¿Í ¼­¹ö(À¥ ¼­¹ö)°¡ ¾ÐÃàÀ» ÇÒ °ÍÀΰ¡ ¸» °ÍÀΰ¡ ±×¸®°í ¾ÐÃà¿¡ »ç¿ëµÇ´Â ¾Ë°í¸®ÁòÀ» ¾¤ºÎÄ¡´Â °ÍÀÌ´Ù.

Accept-EncodingÀº Ŭ¶óÀÌ¾ðÆ®°¡ À¥ ¼­¹ö¿¡°Ô º¸³»´Â HTTP Request ¸Þ½ÃÁö¿¡ ¸í¼¼ ÇÏ´Â °ªÀ¸·Î¼­ Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ Çì´õ¿¡ ¸í½ÃµÈ ÀÎÄÚµù(¾ÐÃà)À» ÀÌÇØÇÏ°í µðÄÚµù(¾ÐÃà ÇØÁ¦)À» ¼öÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¼­¹ö¿¡ ¾Ë¸®´Âµ¥ »ç¿ëÇÑ´Ù. Áï, Ŭ¶óÀÌ¾ðÆ®°¡ ¾ÐÃàµÈ ÄÁÅÙÃ÷¸¦ ¹Þ¾Æ ¾ÐÃàÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ´Â ¾ÐÃà ¾Ë°í¸®ÁòÀ» ¼­¹ö¿¡ ¾Ë¸®´Â ¿ëµµ·Î Accept-Encoding Çì´õ°¡ »ç¿ëµÈ´Ù. IE 6.0¿¡¼­ ¼­¹ö¿¡ º¸³»´Â HTTP Request ¸Þ½ÃÁö¸¦ ¿ì¸®ÀÇ ¸ÚÁø À¯Æ¿¸®Æ¼ÀÎ Fiddler·Î »ì¦ µðºñº¸¸é Accept-EncodingÀÌ ´ÙÀ½°ú °°ÀÌ ¸í½Ã µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.


Accept-Encoding: gzip, deflate
¡¡

¿ä Çì´õ °ªÀÌ ÀǹÌÇÏ´Â °ÍÀº IE°¡ gzip ±×¸®°í deflate ÀÎÄÚµù, Áï ¾ÐÃà ¾Ë°í¸®ÁòÀ» ÀÌÇØÇϹǷΠÀ¥ ¼­¹ö°¡ HTTP Response ¸Þ½ÃÁö¸¦ ÀÌµé ¾Ë°í¸®Áò Áß Çϳª·Î ¾ÐÃàÇØ¼­ º¸³»µµ µÈ´Ù´Â °ÍÀ» ¼­¹ö¿¡°Ô Âñ·¯ ÁÖ´Â °ÍÀÌ´Ù.

À¥ ¼­¹ö´Â Accept-EncodingÀÇ °ªÀ» »ìÆìº¸°í Çʿ信 µû¶ó¼­ HTTP Response(HTML, CSS, À̹ÌÁö µîÀÇ °á°ú¹°)¸¦ ¾ÐÃà ÇÒ ¼ö ÀÖ´Ù. À¥ ¼­¹ö°¡ HTTP Response¸¦ ¾ÐÃàÇß´Ù¸é ¼­¹ö´Â °á°ú°¡ ¾î¶² ¾Ë°í¸®Áò¿¡ ÀÇÇØ ÀÎÄÚµù(¾ÐÃà) µÇ¾ú´Â°¡¸¦ Content-Encoding Çì´õ¸¦ ÅëÇØ ¸í½ÃÇÑ´Ù. ´ÙÀ½Àº http://www.google.co.kr ¿¡¼­ ¹ÝȯÇÑ HTTP Response Çì´õÀÇ ³»¿ëÀÌ´Ù.

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html
Content-Encoding: gzip
Server: GWS/2.1
Content-Length: 1865
Date: Thu, 14 Jul 2005 14:21:24 GMT

±¸±ÛÀº Content-Encoding Çì´õ °ª¿¡ gzip¿¡ ¸í½ÃÇÏ¿©, ÄÁÅÙÃ÷°¡ gzip ¾Ë°í¸®Áò¿¡ ÀÇÇØ ¾ÐÃàµÇ¾úÀ½À» ºê¶ó¿ìÀú¿¡°Ô ¾Ë¸®°í ÀÖ´Ù.

Test

Á÷Á¢ Å×½ºÆ®ÇÏ¿© ´«À¸·Î HTTP ¾ÐÃàÀÌ ¼öÇàµÇ´Â °ÍÀ» »ìÆìº¸ÀÚ. ¸ÕÀú Fiddler¸¦ ¼öÇà½ÃŲ´Ù. ±×¸®°í IE¸¦ ¼öÇà½Ã۰í http://www.yahoo.com ¿¡ Á¢¼ÓÇØ º¸ÀÚ. ±×·¯¸é Fiddler¿¡ IE°¡ Àü¼ÛÇÏ´Â HTTP Request Çì´õ¿Í Yahoo »çÀÌÆ®°¡ ¹ÝȯÇÏ´Â HTTP Response Çì´õ°¡ ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµÉ °ÍÀÌ´Ù. ±×¸®°í »çÀÌÆ®°¡ ¹ÝȯÇÏ´Â ½ÇÁ¦ ÄÁÅÙÃ÷(TextView ¹öưÀ» Ŭ¸¯ÇØ º¸¶ó)´Â HTML ÀÌ ¾Æ´Ñ ¹ÙÀ̳ʸ® ÀÓÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. IE ºê¶ó¿ìÀú°¡ ¾ÐÃàÀ» Ç®°í ±× °á°ú¸¦ Ç¥½ÃÇÏ´Â °ÍÀÌ´Ù.

<<IEÀÇ Accept-Encoding °ª °ú Yahoo »çÀÌÆ®ÀÇ Content-Encoding °ª>>

ÀÌÁ¦ µ¿ÀÏÇÑ »çÀÌÆ®¿¡ ´ëÇØ Accept-Encoding À» ¸í½ÃÇÏÁö ¸»¾Æº¸ÀÚ. FiddlerÀÇ ¿À¸¥ÂÊ ÆÐ³Î¿¡¼­ Request Builder ÅÇÀ» ¼±ÅÃÇϰí HTTP Request¸¦ '»ý¼º'ÇØ º¸ÀÚ. URL ÀԷ¶õ¿¡ Yahoo »çÀÌÆ®¸¦ ÀÔ·ÂÇϰí Execute ¹öưÀ» Ŭ¸¯Çϸé HTTP Request °¡ ¸¸µé¾îÁö°í À̰ÍÀÌ ¼öÇàµÉ °ÍÀÌ´Ù. ±×¸®°í ³ª¼­ HTTP Response °á°ú¸¦ »ìÆìº¸ÀÚ. Request¿¡¼­ Accept-EncodingÀÌ ¸í½ÃµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î, À¥ ¼­¹ö ¿ª½Ã ¾ÐÃàÀ» ¼öÇàÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë ¼ö ÀÖ´Ù. Áï, Content-Encoding ÀÌ ¸í½ÃµÇÁö ¾Ê¾ÒÀ» »Ó´õ·¯ TextView ¹öưÀ» ´­·¯º¸¸é HTMLÀÌ ¾ÐÃàµÇÁö ¾ÊÀº »óÅ·Π¹ÝȯµÇ¾úÀ½À» È®ÀÎÇÏÀÚ.

<< HTTP È£Ãâ ¸¸µé±â >>

HTTP Compression Implementation

´ë·«ÀûÀ¸·Î ¿ø¸®¸¦ ¾Ë¾Æº¸¾ÒÀ¸´Ï ±¸ÇöÀ» ¾î¶»°Ô ÇÏ¸é µÉÁö °¨ÀÌ ÀâÈú °ÍÀÌ´Ù. À¥ ¼­¹ö ±¸ÇöÀ̶ó¸é Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ Accept-EncodingÀ» ÅëÇØ Ŭ¶óÀÌ¾ðÆ®°¡ ¾ÐÃàÀ» Áö¿øÇÏ´ÂÁö °Ë»çÇϰí Áö¿øÇÑ´Ù¸é ÄÁÅÙÃ÷¸¦ ¾ÐÃàÇÑ´Ù. ±×¸®°í Reponse ¸Þ½ÃÁö¿¡ Content-EncodingÀ» ¸í½ÃÇØ ÁÖ¸é µÉ °ÍÀÌ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì, IE¿Í °°Àº ºê¶ó¿ìÀú¸¦ »ç¿ëÇÑ´Ù¸é ÀÌ¹Ì ±¸ÇöÀÌ ´Ù µÇ¾î ÀÖÀ¸¹Ç·Î ¾Æ¹«·± ÀÛ¾÷À» ¼öÇàÇÒ Çʿ䰡 ¾ø´Ù. ÇÏÁö¸¸ System.Net ³×ÀÓ½ºÆäÀ̽ºÀÇ HttpWebRequest Ŭ·¡½º ¹× HttpWebResponse Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù¸é Á÷Á¢ ±¸ÇöÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. HttpWebReqest Ŭ·¡½º¿¡ Accept-EncodingÀ» ¸í½ÃÇØ ÁÖ°í HttpWebResponse¿¡¼­ Content-EncodingÀ» °Ë»çÇÏ¿© ¾ÐÃàµÇ¾ú´Ù¸é ¾ÐÃàÀ» ÇØÁ¦ÇÏ¸é µÈ´Ù. ´ÙÀ½ ÄÚµå´Â SharpZipLib ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© ¾ÐÃàµÈ HTTP ÄÁÅÙÃ÷¸¦ ¾ÐÃà ÇØÁ¦ ÇÏ´Â ¿¹Á¦ ÄÚµåÀÌ´Ù.

using System;
using 
System.IO;
using 
System.Net;
using 
ICSharpCode.SharpZipLib.GZip;

class 
HttpDecompressTest
{
    
// HTTP ¾ÐÃà ÇØÁ¦ ¿¹Á¦ ÄÚµå
    
[STAThread]
    
static void Main(string[] args)
    {
        
string url "http://www.google.co.kr";

        
HttpWebRequest req (HttpWebRequest)WebRequest.Create(url);
        
// gzip ¾ÐÃà Çã¿ë
        
req.Headers["Accept-Encoding""gzip";

        
HttpWebResponse res (HttpWebResponse)req.GetResponse();
        string 
contentEncoding res.Headers["Content-Encoding"];
        
Stream httpStream, resultStream;
        
httpStream res.GetResponseStream();
        
// ¾ÐÃà ¿©ºÎ È®ÀÎ
        if (contentEncoding == "gzip") {
            // SharpZipLibÀÇ ¾ÐÃà ÇØÁ¦ ½ºÆ®¸² »ç¿ë
            resultStream = new GZipInputStream(httpStream);
        
}
        
else {
            resultStream 
httpStream;
        
}
        
// °£´ÜÇÑ ±¸ÇöÀ̹ǷΠeuc-kr·Î Çϵå ÄÚµù.
        
System.Text.Encoding encoding System.Text.Encoding.GetEncoding("euc-kr");
        
// °á°ú Ç¥½Ã
        
StreamReader reader = new StreamReader(resultStream, encoding);
        
Console.WriteLine(reader.ReadToEnd());
        
resultStream.Close();
    
}
}

<< HTTP ¾ÐÃà ÇØÁ¦ ¿¹Á¦ ÄÚµå >>

À§ Äڵ忡¼­ Accept-EncodingÀ» ¼³Á¤ÇÏ´Â ºÎºÐÀ» À¯½ÉÈ÷ »ìÆìº¼ Çʿ䰡 ÀÖ´Ù. ÀÌ ¼³Á¤ÀÌ ¾ø´Â °æ¿ì ±¸±Û »çÀÌÆ®´Â ¾ÐÃàÀ» ¼öÇàÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¶ÇÇÑ Accept-EcodingÀ» ¼³Á¤ÇØ ³õÀº »óÅ¿¡¼­ ¾ÐÃàÀ» Ç®Áö ¾Êµµ·Ï Äڵ带 ¹Ù²Ù°í °á°ú¸¦ »ìÆìº¸ÀÚ. ¾ÐÃàÀ» Ç®Áö ¾ÊÀ¸¸é HTMLÀÌ ¾Æ´Ñ ¿ä»ó½º·± ¹®ÀÚµéÀÌ È­¸éÀ» °¡µæ¸Þ¿ì°Ô µÉ °ÍÀÌ´Ù.

´ëºÎºÐÀÇ °æ¿ì Ŭ¶óÀÌ¾ðÆ®·Î IE¸¦ »ç¿ëÇϱ⠶§¹®¿¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¹®Á¦´Â °ÅÀÇ ¾øÀ» °ÍÀÌ´Ù. »ç½Ç Áß¿äÇÑ °ÍÀº À¥ ¼­¹öÀÇ ±¸ÇöÀÌ´Ù. ¸¸¾à CGI³ª ISAPI ExtensionÀ¸·Î »çÀÌÆ®°¡ ±¸¼ºµÇ¾î ÀÖ´Ù¸é ¾ÐÃàÀ» ¾îÄÉ ½ÃµµÇØ º¼ÅÙµ¥, ´çÃé ASP ³ª ASP.NETÀ¸·Î ±¸ÇöµÈ »çÀÌÆ®¿¡ ¾ÐÃàÀ» Àû¿ëÇÒ·ÁÄ¡¸é ´« ¾ÕÀÌ ´ä´äÇÏ°í ´«¾ËÀÌ Æ¢¾î³ª¿Ã·Á°í ÇÒ °ÍÀÌ´Ù. °Ô´Ù°¡ ¾ÐÃàÀ» À§ÇØ ±âÁ¸ Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù¸é ´õ¿í ¹ÌÄ¥ ³ë¸© ¾Æ´Ñ°¡?

´ÙÀ½ Æ÷½ºÆ®¿¡´Â ÇÁ·Î±×·¥ ¼Ò½º¸¦ ÀüÇô ¼öÁ¤ÇÏÁö ¾Ê°í(´ç¿¬È÷ ±×·¡¾ß ÇÒ°ÍÀÌ´Ù) À¥ ¼­¹öÃø¿¡¼­ HTTP ¾ÐÃàÀ» ¼öÇàÇÏ´Â ¹æ¹ýµé¿¡ ´ëÇØ »ìÆìº¸µµ·Ï ÇϰڴÙ. ƯÈ÷ IIS 6.0ÀÇ ¾ÐÃà ±â´É¿¡ ´ëÇØ¼­ ¸»ÀÌ´Ù. ±Ã±ÝÇÏÁö? ±âµÑ¸®~~~

 

°­Á ¸ñ·ÏÀ¸·Î..