cgi ÇÁ·Î±×·¡¹Ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>cgi



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<article lang="ko"> 
 
<!--           --> 
<!-- ¹®¼­ Á¤º¸ --> 
<!--           --> 
<articleinfo> 
    <title>CGI ÇÁ·Î±×·¡¹Ö ¼Ò°³</title> 
 
    <author> 
        <surname>À±»ó¹è</surname> 
 
        <affiliation> 
            <address> 
                <email>yundream@join.co.kr</email> 
            </address> 
        </affiliation> 
    </author> 
    <revhistory> 
        <revision> 
            <revnumber>0.9</revnumber> 
            <date>2004³â 5¿ù 17ÀÏ 20½Ã</date> 
            <revremark>docbook ¹®¼­·Î ¿Å±è</revremark> 
        </revision> 
    </revhistory> 
</articleinfo> 
<abstract> 
    <para> 
        Áö±Ý¿¡ ¿Í¼­¾ß CGI(12)´Â Åð¹°·Î ºÐ·ùµÈ´Ù. PHP(12), ASP¿Í °°Àº ÈǸ¢ÇÑ  
        ¼­¹ö»çÀÌÆ® ½ºÅ©¸³Æ®¾ð¾îÀÇ µîÀåÀ¸·Î µ¿ÀûÀÎ ÆäÀÌÁö¸¦ ½±°Ô ÀÛ¼ºÇϴµ¥,  
        ±»ÀÌ ´Ù·ç±â Èûµé°í ±î´Ù·Î¿î ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ CGIÇÁ·Î±×·¡¹ÖÀ»  
        ½ÃµµÇؾßÇÏ´Â Çʿ䰡 »ç¶óÁ³±â ¶§¹®ÀÌ´Ù. 
    </para> 
    <para> 
        ±×·¯³ª ¿©ÀüÈ÷ º¸¾È, ±âÁ¸ Á¦Ç°°úÀÇ È£È¯, ±âŸ Çʿ信 ÀÇÇØ¼­ CGI¿¡ ´ëÇÑ  
        ¼ö¿ä°¡ ¹ß»ýÇÑ´Ù. À̹ø ±ÛÀº CGIÀÇ °³³ä°ú CGI ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÛ¼º¿¡  
        ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ±×¸®°í ±ÛÀÇ ¸¶Áö¸·¿¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡¼­  
        ¿ì¸®°¡ ÀÛ¼ºÇÑ CGI ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛµ¿½Ã۵µ·Ï ÇϰڴÙ.  
    </para> 
</abstract> 
<section> 
    <title>CGI ¼Ò°³</title> 
    <para> 
        CGI´Â Common  Gateway InterfaceÀÇ ÁÙÀÓ¸»Àε¥, information ¼­¹ö(¿Í ¿ÜºÎ  
        ¾ÖÇø®ÄÉÀ̼ǰúÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ Ç¥ÁØ ¹æ¹ýÀÌ´Ù. information ¼­¹öÀÇ °¡Àå  
        ´ëÇ¥ÀûÀÎ ¿¹´Â À¥¼­¹öÀÌ´Ù. ÀϹÝÀûÀÎ plain HTML(12) ¹®¼­°¡ À¥¼­¹ö¸¦ ÅëÇØ¼­  
        ¼­ºñ½ºµÈ´Ù¸é ÀÌ ³»¿ëÀº "Á¤Àû"µ¥ÀÌÅͰ¡ µÈ´Ù. À¥ ÇÁ·Î±×·¡¸Ó°¡ ¹®¼­¸¦ Á÷Á¢  
        ¼öÁ¤ÇϱâÀü¿¡´Â ¾î¶² À¥¼­ÆÛ°¡ ¾î¶² ½Ã°£¿¡ ¹®¼­¸¦ º¸´õ¶óµµ µ¿ÀÏÇÑ ¹®¼­¸¦ ¹Þ¾Æº¸°Ô  
        µÈ´Ù.   
    </para> 
    <para> 
        ¸î³âÀü¸¸ ÇØµµ ÀÌ·¯ÇÑ plain HTML¹®¼­¸¸À¸·Îµµ ÈǸ¢ÇÑ À¥ ¼­ºñ½º¸¦ Á¦°øÇÒ ¼ö  
        ÀÖ¾úÀ¸³ª, ¿äÁòÀÇ À¥¼­ºñ½º´Â ´ëºÎºÐ »óÈ£ ÀÛ¿ëÀûÀÎ °ÍÀÌ´Ù. À̸¦Å×¸é °í°´ÀÇ Á¤º¸¸¦  
        È®ÀÎÇØ¼­ °í°´¸¶´Ù °¢°¢ ´Ù¸¥ Á¤º¸¸¦ Áö´Ñ ÆäÀÌÁö¸¦ »Ñ·ÁÁÖ´Â µîÀÇ ¼­ºñ½º°¡  
        ÇÊ¿äÇØÁø °ÍÀÌ´Ù. CGI´Â ÀÌ·¯ÇÑ µ¿ÀûÆäÀÌÁö ¼­ºñ½º¸¦ À§Çؼ­ ¸¸µé¾îÁ³´Ù.       
    </para> 
    <para> 
        CGIÇÁ·Î±×·¥Àº À¥¼­¹ö¿¡ ÀÇÇØ¼­ <emphasis>¸ðµâ ȤÀº ÇÁ·Î±×·¥ ÇüÅ·Î</emphasis> ½ÇÇàµÇ¸ç,  
        µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇØ¼­ µ¥ÀÌÅ͸¦ Àоî¿Í¼­ À¥ÆäÀÌÁö·Î Ãâ·ÂÇϰųª, µ¥ÀÌÅ͸¦  
        ÀúÀåÇÏ´Â µîÀÇ ÀÏÀ» ÇÑ´Ù. Áß°£¿¡¼­ µ¥ÀÌÅ͸¦ Áß°èÇÏ´Â ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÇ Æ¯Â¡  
        ¶§¹®¿¡ <emphasis>Gateway</emphasis>¶ó´Â À̸§ÀÌ ºÙ¾ú´Ù. ÇöÀç CGIÀÇ ¹öÁ¯Àº 1.1±îÁö ³ª¿Í ÀÖ´Ù.    
        <note> 
        <para>     
            CGIÀº ÀÎÅÍÆäÀ̽º´Ù. ¶óÀ̺귯¸®³ª ÇÔ¼ö°¡ ¾Æ´Ï´Ù. 
        </para>     
        </note> 
    </para> 
    <para> 
        CGI´Â ±âº»ÀûÀ¸·Î ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡¼­ ½ÇÇàµÇ¾îÁö´Â ÇÁ·Î±×·¥À¸·Î ´Ù¸¥ ÇÁ·Î±×·¥(vi,  
        ls ..)µé°ú ÀüÇô ´Ù¸¦¹Ù°¡ ¾ø´Ù. ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ Ãâ·Â°á°ú¸¦ Ç¥ÁØÃâ·ÂÀ» ÅëÇØ¼­  
        Àü´ÞÇÏ´Â °Í°ú´Â ´Þ¸® CGI´Â Ãâ·Â°á°ú¸¦ À¥¼­¹ö·Î Àü´ÞÇÑ´Ù´Â Á¤µµ¸¸ ¾à°£ ´Ù¸£´Ù°í  
        º¸¸é µÈ´Ù.  
    </para> 
    <para> 
        ¸¸¾à ´ç½ÅÀÌ Apache(12) HTTPD ¼­¹ö¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é, ÀÛ¼ºµÈ CGI ÇÁ·Î±×·¥µéÀº  
        /cgi-bin ¿¡ À§Ä¡ÇÒ °ÍÀÌ´Ù. CGIÇÁ·Î±×·¡¹ÖÀº ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ ¾ð¾î¸¦ ÅëÇØ¼­  
        ÀÛ¼º°¡´É ÇÏ´Ù. 
        <itemizedlist> 
            <listitem> 
            <para> 
                C/C++ 
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                PHP(12)         
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                Perl     
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                TCL     
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                Python     
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                Ruby     
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                ¸ðµç Á¾·ùÀÇ À¯´Ð½º Shell Script             
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                Visual Basic     
            </para> 
            </listitem> 
            <listitem> 
            <para> 
                AppleScript         
            </para> 
            </listitem> 
        </itemizedlist> 
        °á·ÐÀûÀ¸·Î ¸»ÇÏÀÚ¸é ¾î¶°ÇÑ ¾ð¾î¸¦ ¾²´õ¶óµµ CGI±Ô°Ý¸¸ ÁöŲ´Ù¸é CGIÇÁ·Î±×·¥ÀÛ¼ºÀ»  
        À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à C¿Í C++°°Àº ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ °³¹ßÇÑ´Ù¸é ÄÄÆÄÀÏÀ»  
        ½ÃÄѼ­ Á¦´ë·Î ½ÇÇàµÇ´ÂÁö ¸ÕÀú Å×½ºÆ®ÇغÁ¾ß ÇÒ °ÍÀÌ´Ù. PerlÀ̳ª shell°ú °°Àº  
        ½ºÅ©¸³Æ® ¾ð¾î¸¦ ÀÌ¿ëÇÑ´Ù¸é ÄÄÆÄÀϽÃŰÁö ¾Ê¾Æµµ µÇ¹Ç·Î Á»´õ ÆíÇÏ°Ô ÇÁ·Î±×·¡¹Ö  
        °¡´ÉÇÒ °ÍÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î ½ºÅ©¸³Æ® ¾ð¾î°¡ °ú°Å¿¡ CGI¸¦ À§Çؼ­ ³Î¸® »ç¿ëµÇ¾ú´Ù.  
        PerlÀÇ °æ¿ì¿¡´Â ¹ü¿ë ¾ð¾î·Î °³¹ßµÇ¾úÁö¸¸ ƯÀ¯ÀÇ °­·ÂÇÑ ¹®ÀÚ¿­ ó¸® ´É·ÂÀ¸·Î  
        ÀÎÇÏ¿© ƯÈ÷ CGIÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¾ð¾î·Î ³Î¸® »ç¿ëµÇ¾ú´Ù.  
    </para> 
    <para> 
        ÄÄÆÄÀÏ µÈ ½ÇÇàÆÄÀÏÀ̳ª, ½ºÅ©¸³Æ®µéÀº /cgi-bin¿¡ ¿Å°Ü ³õ°í À¥ÆäÀÌÁö¸¦ ÅëÇØ¼­  
        ºÒ·¯µéÀ̸é À¥¼­¹ö°¡ ¾Ë¾Æ¼­ ½ÇÇà½ÃŰ°Ô µÈ´Ù.   
    </para> 
    <section> 
        <title>PHP(12), ASP¿Í CGI(12)</title>         
        <para> 
            Âü°í·Î PHP(12)¿Í ASP°°Àº °æ¿ì ÀÚüÀûÀ¸·Î CGI¸¦ ¸¸Á·ÇÑ´Ù. CGI±Ô°ÝÀ»  
            ¿£Áø³»ºÎ¿¡¼­ ¾Ë¾Æ¼­ ó¸®ÇØ ÁֹǷΠ°³¹ßÀÚ´Â CGI¿¡ ´ëÇØ¼­ °ñÄ¡¾ÆÇÁ°Ô ¸Ó¸®  
            ¾µÇÊ¿ä ¾øÀÌ ±¸Çö ÀÚü¿¡ ÁýÁßÇÒ ¼ö ÀÖ´Ù.   
        </para> 
        <para> 
            ±×·¯³ª PHP(12)¿Í ASPÀÇ °æ¿ì À¥¼­¹öÀÇ ¸ðµâ·Î¼­ ÀÛµ¿Çϴµ¥ ÀÌ´Â °íÀüÀûÀÎ  
            CGIÇÁ·Î±×·¥µé°ú´Â Ʋ¸° ÀÛµ¿¹æ½ÄÀÌ´Ù. ±×·¯¹Ç·Î ÀÌÇÏ CGI¸¦ ¼³¸íÇϴµ¥ À־´Â  
            PHP(12)¿Í ASP´Â ¿¹¿Ü·Î ÇÏ°í ¼³¸íÇϵµ·Ï ÇϰڴÙ.  
        </para> 
    </section> 
</section> 
<section> 
    <title>CGI ÇÁ·Î±×·¡¹Ö</title> 
    <section> 
        <title>ÀÛµ¿¹æ½Ä(ÀÔ/Ãâ·Â)</title> 
        <para> 
            À¥¼­¹ö¿¡¼­ CGI ÇÁ·Î±×·¥Àº fork()¸¦ ÅëÇØ¼­ ½ÇÇà½Ã۸ç CGI¿¡ µ¥ÀÌÅ͸¦  
            Àü´ÞÇϱâ À§Çؼ­ Ç¥ÁØÃâ·Â°ú ȯ°æº¯¼ö¸¦ »ç¿ëÇϸç, CGIÇÁ·Î±×·¥À¸·Î ºÎÅÍ  
            µ¥ÀÌÅ͸¦ Àü´Þ¹Þ±â À§Çؼ­ Ç¥ÁØÀÔ·ÂÀ» »ç¿ëÇÑ´Ù. 
        </para> 
        <para> 
            À¥¼­¹ö¿¡¼­ CGIÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§´Â ¿©·¯°¡Áö Á¤º¸µµ CGIÇÁ·Î±×·¥¿¡ Àü´ÞÇÒ  
            °ÍÀÌ´Ù. Àü´Þ¹æ½ÄÀº GET, POST¹æ½ÄÀÌ ´ëÇ¥ÀûÀÌ´Ù. GET¹æ½ÄÀÇ µ¥ÀÌÅÍ ¿äû¿¡¼­  
            ÀÌ·ç¾îÁø URI°ªÀº È­°æº¯¼ö¸¦ ÅëÇØ¼­, POST¹æ½ÄÀº Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼­  
            CGIÇÁ·Î±×·¥À¸·Î ³Ñ¾î°£´Ù.  
            <screen> 
<img src=http://www.joinc.co.kr/albums/album01/aik.gif> 
            </screen> 
        </para> 
        <section> 
            <title>GET ¹æ½Ä</title>     
            <para> 
                GET¹æ½ÄÀº URI¸¦ ÅëÇØ¼­ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ ¿äûÇÏ´Â ¹æ½ÄÀÌ´Ù. 
                <screen> 
http://www.joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=29106 
                </screen> 
                À¥¼­¹ö´Â GET¹æ½ÄÀ» ÅëÇØ¼­ ÀԷ¹ÞÀº µ¥ÀÌÅ͸¦ ȯ°æº¯¼ö¸¦ ÅëÇØ¼­ CGIÇÁ·Î±×·¥¿¡  
                Àü´ÞÇÑ´Ù. CGIÇÁ·Î±×·¥Àº ȯ°æº¯¼ö¸¦ Àоîµé¿©¼­ ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÏ°Ô µÈ´Ù.  
                C¿¡¼­´Â getenv()¸¦ ÅëÇØ¼­ ȯ°æº¯¼ö¸¦ Àоîµé ÀÏ ¼ö ÀÖ´Ù. ´ÙÀ½Àº À§ÀÇ  
                URI·Î Àü´ÞµÈ °ªÀ» °¢ ¾ð¾îº° ȯ°æº¯¼ö¸¦ ÀоîµéÀÌ´Â ¹æ¹ýÀÌ´Ù.  
                <screen> 
perl 
=========== 
print $ENV{'QUERY_STRING'};    # modload 
 
C/C++ 
============ 
char *value; 
value = getenv("QUERY_STRING");    // modload 
 
Shell 
============ 
echo $QUERY_STRING        # modload 
                </screen> 
                ÀÌ·¸°Ô Çϸé Äõ¸® ¹®ÀÚ¿­ÀÎ  
                "op=modload&name=Forum&file=viewtopic&topic=29106"°¡ ³Ñ¾î¿À°í À̰ÍÀ»  
                Àû´çÈ÷ ÆÄ½ÌÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù. 
            </para> 
            <para> 
                ȯ°æº¯¼ö´Â ÇÁ·Î¼¼½ºÀÇ ½ºÅÿµ¿ª¿¡ À§Ä¡ÇÑ´Ù. ±×·¯¹Ç·Î Àü´ÞÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ  
                ¾ç¿¡ Á¦ÇÑÀÌ »ý±ä´Ù(Á¦ÇÑÀ» ¾Æ½Ã´Â ºÐÀÇ ´äº¯ ºÎʵ右´Ï´Ù).  
            </para> 
        </section> 
        <section> 
            <title>POST ¹æ½Ä</title> 
            <para> 
                POST ¹æ½ÄÀº À¥¿¡¼­ <form>À» ÅëÇØ¼­ Àü´ÞµÇ´Â °ªµé·Î CGIÇÁ·Î±×·¥À¸·Î´Â  
                Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼­ Àü´ÞµÈ´Ù. °æº¯¼ö¿¡ ÀÇÇØ¼­ Á¦ÇÑÀÌ »ý±â´Â GET¹æ½Ä¿¡ ºñÇØ¼­  
                Àü´ÞÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¾ç¿¡ Á¦¾à¾øÀÌ »ç¿ë°¡´ÉÇÏ´Ù.  
                GET°ú ¸¶Âù°¡Áö·Î POST¹æ½Ä¿ª½Ã °æ¿ì ÇÁ·Î±×·¥¿¡¼­ ¹®ÀÚ¿­ ÆÄ½ÌÀ»  
                ÇØÁà¾ß ÇÑ´Ù. ÀÌ°Ç »ó´çÈ÷ ±ÍÂúÀº ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖ´Ù.   
                ÀÌ·¯ÇÑ ±ÍÂúÀº ÀÛ¾÷À» ´ë½Å ó¸®ÇØÁÙ ¶óÀ̺귯¸®°¡ ¿©·µ Á¸ÀçÇϴµ¥,  
                ¹®¼­ÀÇ ¸¶Áö¸·¿¡ µû·Î ¾ð±ÞÇϵµ·Ï ÇϰڴÙ. 
            </para> 
        </section> 
    </section> 
    <section> 
        <title>CGI ȯ°æ º¯¼ö</title> 
        <para> 
            CGI ÇÁ·Î±×·¥ÀÇ °æ¿ì ´Üµ¶ÇÁ·Î¼¼½º·Î ÀÛµ¿Çϱ⠶§¹®¿¡, ÀÚ½ÅÀ» ½ÇÇà½ÃŲ À¥¼­¹öÀÇ  
            ¿©·¯°¡Áö Á¤º¸¸¦ ¾î¶±Çؼ­µçÁö À¯ÁöÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. À̸¦Å׸é À¥¼­¹öÀÇ Á¾·ù°¡  
            ¹«¾ùÀÎÁö, ¾î¶² URL(12)ÀÌ À¥¿¡ Á¢±ÙÀ» ÇØ¼­ CGI ÇÁ·Î±×·¥À» °¡µ¿½ÃÄ×´ÂÁö, ¾î¶²  
            Äõ¸® ¹®ÀÚ¿­À» º¸³Â´ÂÁö, GETÀ» ÀÌ¿ëÇß´ÂÁö POST¸¦ ÀÌ¿ëÇß´ÂÁö µîµîÀÇ Á¤º¸¸¦  
            À¥¼­¹ö·Î ºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù.  
        </para> 
        <para> 
            ÀÌ·¯ÇÑ ¸ðµç Á¤º¸´Â ¾à¼ÓµÈ CGI ȯ°æº¯¼ö¸¦ ÅëÇØ¼­ ÀÐ¾î ¿Ã ¼ö ÀÖ´Ù. ÇöÀç CGI  
            ȯ°æº¯¼ö¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ Á¤ÀǵǾî ÀÖ´Ù.  
            <screen>         
   DOCUMENT_ROOT           // ¹®¼­°¡ À§Ä¡ÇÏ´Â ·çÆ® µð·ºÅ丮 
   GATEWAY_INTERFACE       // »ç¿ëµÈ gateway ÀÎÅÍÆäÀ̽º (À̰æ¿ì CGI 1.1)  
   HTTP_ACCEPT  
   HTTP_REFERER            // POST¹æ½ÄÀÏ °æ¿ì ¿äûÇÑ ÆäÀÌÁö À̸§ 
   HTTP_ACCEPT_CHARSET  
   HTTP_ACCEPT_LANGUAGE  
   HTTP_CONNECTION         // ¿¬°á¹æ½Ä (º¸Åë Keep-Alive)  
   HTTP_HOST               // À¥¼­¹öÀÇ IP¿Í PORTÁ¤º¸  
   HTTP_USER_AGENT         // ¿¬°á¿¡ »ç¿ëÇÑ ºê¶ó¿ìÀú Á¤º¸ 
   PATH                    // ½ÇÇàÆÄÀÏ °æ·Î  
   QUERY_STRING            // Äõ¸® ¹®ÀÚ¿­  
   REMOTE_ADDR             // Ŭ¶óÀÌ¾ðÆ® ÁÖ¼Ò 
   REMOTE_HOST                 
   REMOTE_PORT             // Ŭ¶óÀÌ¾ðÆ® Æ÷Æ® 
   REQUEST_METHOD          // ¿äû¹æ¹ý, º¸Åë GETÀ̳ª POST 
   REQUEST_URI             // URIÁ¤º¸ 
   SCRIPT_FILENAME  
   SCRIPT_NAME             // ½ÇÇàÇÑ CGI ÇÁ·Î±×·¥ À̸§  
   SERVER_ADMIN            // ¼­¹ö°ü¸®ÀÚ Á¤º¸, º¸Åë emailÁÖ¼Ò 
   SERVER_NAME             // ¼­¹öÀ̸§, º¸Åë µµ¸ÞÀÎÀ̸§ 
   SERVER_PORT             // ¼­ºñ½º Æ÷Æ®(80, 8080) 
   SERVER_PROTOCOL         // ¼­ºñ½º ÇÁ·ÎÅäÄÝ(HTTP1.0, HTTP1.1) 
   SERVER_SOFTWARE         // ¼­¹ö ÇÁ·Î±×·¥ 
   TZ                      // ŸÀÓÁ¸ 
            </screen>         
        </para> 
    </section> 
    <section> 
        <title>CGI Å×½ºÆ® ÇÁ·Î±×·¥ - GET ¹æ½Ä</title> 
        <para> 
            ±×·³ °£´ÜÇÑ CGIÅ×½ºÆ® ÇÁ·Î±×·¥À» Çϳª ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ. ÀÌ ÇÁ·Î±×·¥Àº  
            ÇöÀç ½Ã°£°ú ÇÔ²² Äõ¸® ½ºÆ®¸µ°ú ±âŸ CGIȯ°æº¯¼ö¸¦ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù. 
            <screen>     
#include <stdio.h> 
#include <string.h> 
#include <time.h> 
#include <sys/types.h> 
#include <unistd.h> 
 
static char dday[256]; 
static char wday[7][2] = {"ÀÏ","¿ù", "È­", "¼ö", "¸ñ", "±Ý", "Åä"}; 
 
char * time2str(time_t, char * ); 
 
char * time2str(time_t org_time, char *format) 
{ 
    struct tm *tm_ptr; 
    int index=0; 
    int i; 
    tm_ptr = localtime(&org_time); 
    memset(dday, 0x00, 256); 
    for (i = 0; i < strlen(format); i++) 
    { 
        switch(format[i]) 
        { 
            case 'y': // ³â                                         
                sprintf(dday+index, "%04d", tm_ptr->tm_year+1900); 
                index += 4; 
                break; 
            case 'm': // ¿ù(1-12), ºÐ(0-59) 
                if (format[i+1] == 'i') 
                { 
                    sprintf(dday+index, "%02d", tm_ptr->tm_min); 
                    index += 2; 
                    i++; 
                    break; 
                } 
                else 
                { 
                    sprintf(dday+index, "%02d", tm_ptr->tm_mon+1); 
                    index += 2; 
                    break; 
                } 
            case 'd': // ÀÏ (1-31)                                 
                sprintf(dday+index, "%02d", tm_ptr->tm_mday); 
                index += 2; 
                break; 
            case 'D': // ¿äÀÏ(ÀÏ ~ Åä)                             
                sprintf(dday+index, "%s", wday[tm_ptr->tm_wday]); 
                index += 2; 
                break; 
            case 'h': // ½Ã(00-23)                                 
                sprintf(dday+index, "%02d", tm_ptr->tm_hour); 
                index += 2; 
                break; 
            case 's': // ÃÊ(00-59)                                 
                sprintf(dday+index, "%02d", tm_ptr->tm_sec); 
                index += 2; 
                break; 
 
            default: 
                dday[index] = format[i]; 
                index++; 
        } 
    } 
    return dday; 
} 
 
void print_header() 
{ 
    printf("Content-type: text/html\n\n"); 
} 
 
int main(int argc, char ** argv) 
{ 
    print_header(); // ¹Ýµå½Ã Æ÷ÇԵǾî¾ß ÇÑ´Ù. 
    printf("<h2>Hello World CGI VERSION : %s</h2>\n", 
            time2str( time((time_t *)NULL), "y³â m¿ù dÀÏ D¿äÀÏ h:mi:s")); 
    printf("Query String %s<br>\n", getenv("QUERY_STRING")); 
 
    printf("SERVER_SOFTWARE = %s<br>\n", getenv("SERVER_SOFTWARE")); 
    printf("GATEWAY_INTERFACE = %s<br>\n", getenv("GATEWAY_INTERFACE")); 
    printf("SERVER_PROTOCOL = %s<br>\n", getenv("SERVER_PROTOCOL")); 
    printf("HTTP_ACCEPT = %s<br>\n", getenv("HTTP_ACCEPT")); 
    printf("REQUEST_METHOD = %s<br>\n", getenv("REQUEST_METHOD")); 
    printf("REMOTE_ADDR = %s\n", getenv("REMOTE_ADDR")); 
    printf("<br><br>\n"); 
} 
            </screen>     
            À§ Äڵ带 ÄÄÆÄÀÏ ÇÑµÚ À¥¼­¹öÀÇ cgi-bin¿¡ test ¶ó´Â À̸§À¸·Î º¹»çÇÑ´ÙÀ½  
            http://hostname/cgi-bin/test?name=yundreamÀ¸·Î Å×½ºÆ® ÇØº¸µµ·Ï ÇÏÀÚ.  
            <screen> 
Hello World CGI VERSION : 2004³â 05¿ù 11ÀÏ È­¿äÀÏ 11:10:27 
 
Query String name=yundream 
SERVER_SOFTWARE = Apache/1.3.26 (Unix) PHP(12)/4.3.0 
GATEWAY_INTERFACE = CGI/1.1 
SERVER_PROTOCOL = HTTP/1.0 
HTTP_ACCEPT = text/*, image/*, audio/*, application/* 
REQUEST_METHOD = GET 
REMOTE_ADDR = 192.168.1.101 
            </screen> 
        </para> 
    </section> 
    <section> 
        <title>CGI Å×½ºÆ® ÇÁ·Î±×·¥ - POST ¹æ½Ä</title> 
        <para> 
            POST ¹æ½ÄÀ̶õ URI¸¦ ÅëÇØ¼­ µ¥ÀÌÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀÌ ¾Æ´Ñ <form>À» ÅëÇØ¼­  
            µ¥ÀÌÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀ» ¶æÇÑ´Ù. CGI ÇÁ·Î±×·¥¿¡¼­´Â Ç¥ÁØÀÔ·ÂÀ¸·Î ¹ÞÀ» ¼ö ÀÖ´Ù.  
            ´ÙÀ½Àº POST ¹æ½Ä Å×½ºÆ®¸¦ À§ÇÑ À¥ÆäÀÌÁöÀÌ´Ù. HTML ÄÚµå´Â ¼³¸í »ý·«Çϵµ·Ï ÇϰڴÙ.  
            ÆäÀÌÁöÀÇ À̸§Àº post.php·Î ÇϰڴÙ. 
            <screen> 
<form action=/cgi-bin/post-cgi method=post> 
À̸§ : <input type=text name=name size=16><br> 
³ªÀÌ : <input type=text name=age  size=16><br> 
<input type=submit name=submit> 
</form> 
            </screen> 
            ´ÙÀ½Àº POST¹æ½ÄÀ¸·Î ³Ñ¾î¿Â µ¥ÀÌÅ͸¦ ¹Þ±â À§ÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. °£´ÜÇϹǷΠ¿ª½Ã ¼³¸íÀº »ý·«Çϵµ·Ï ÇϰڴÙ. 
            <screen> 
#include <stdio.h> 
#include <string.h> 
 
int main(int argc, char **argv) 
{ 
    char buf[1024];  
    int n;    
    printf("Content-type: text/html\n\n"); 
    printf("Referer ÆäÀÌÁö %s<br><br>", getenv("HTTP_REFERER")); 
    memset(buf, 0x00, 1024); 
    while((n = read(0, buf, 1023)) > 0)  
    { 
        printf("POST DATA : %s", buf);  
        memset(buf, 0x00, 1024);  
    }  
} 
            </screen> 
ºê¶ó¿ìÀú¿¡¼­ post.php¸¦ ºÎ¸¥´ÙÀ½ Àû´çÇÑ °ªÀ» ³Ö°í ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù. 
            <screen> 
Referer ÆäÀÌÁö http://localhost/post.php 
 
POST DATA : name=yundream&age=21&submit=SUBMIT 
            </screen> 
Äõ¸® ¹®ÀÚ¿­À» ÀоîµéÀÌ´Â ¹æ¹ý¿Ü¿¡ Äõ¸® ¹®ÀÚ¿­ÀÇ ±¸¼ºÀº GET¹æ½Ä°ú µ¿ÀÏÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ¹°·Ð Ű¿Í °ªÀ» Á¦´ë·Î ¾ò±â À§Çؼ­´Â '=','&'¸¦ ±âÁØÀ¸·Î ÆÄ½ÌÇØÁà¾ß ÇϰÚÁö¸¸ ¸»ÀÌ´Ù.  
        </para> 
    </section> 
    <section> 
        <title>Äõ¸® ¹®ÀÚ¿­ ºÐ¼®</title>     
        <para> 
            Äõ¸® ¹®ÀÚ¿­À» ºÐ¼®Àº ¾ð¶æ º¸¸é º°·Î ¾î·Á¿ï °Í °°Áö ¾Ê´Ù. ±ÍÂúÀ» ¼ö´Â  
            ÀÖ°ÚÁö¸¸ '=','&'À» ±âÁØÀ¸·Î ÆÄ½ÌÇÏ´Â °Ç ±â¼úÀûÀ¸·Î ¾î·Á¿î ¹®Á¦´Â ¾Æ´Ï±â 
            ¶§¹®ÀÌ´Ù.  
        </para> 
        <para> 
            ±×·¯³ª ¾Ë°íº¸¸é ±×·¸°Ô °£´ÜÇÏÁö°¡ ¾Ê´Ù. post.php¿¡¼­ name¿¡ yun&dream  
            °ú °°ÀÌ Äõ¸® ½ºÆ®¸µ ºÐ¸®¸¦ À§ÇÑ Æ¯¼ö¹®ÀÚ°¡ Æ÷ÇÔµÇ¾î ¹ö¸®´Â °æ¿ì¸¦ »ý°¢ÇØ  
            º¸ÀÚ. ´ç¿¬È÷ Á¦´ë·Î ó¸® ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î À¥¿¡¼­ POST,  
            GET¹æ½ÄÀ¸·Î µ¥ÀÌÅ͸¦ Àü´ÞÇÒ ¶§´Â ÀÎÄÚµù°úÁ¤ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.  
            ½ÇÁ¦ post.php¿¡ yun&dreamÀ» ÀÔ·ÂÇÑ´ÙÀ½ submit ¹öưÀ» ´©¸£¸é ´ÙÀ½°ú °°ÀÌ  
            ÀÎÄÚµùµÈ °á°ú°¡ Ç¥½ÃµÈ´Ù.   
            <screen> 
Referer ÆäÀÌÁö http://www.joinc.co.kr/post.php 
 
POST DATA : name=yun%26dream&age=21&submit=SUBMIT 
            </screen> 
            &ÀÌ %25 À¸·Î ÀÎÄÚµù µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. À¥¿¡¼­ °ªÀÇ Àü´ÞÀ»  
            À§Çؼ­ »ç¿ëÇÏ´Â ÀÌ·¯ÇÑ ÀÎÄÚµù ¹æ½ÄÀ» urlencode ¶ó°í ÇÑ´Ù.  
        </para> 
        <para> 
            urlencode´Â ´ÜÁö &, = ¸¸À» ÀÎÄÚµùÇÏÁö ¾Ê´Â´Ù. [[HTML([a-zA-Z0-9\-._])]]À» 
            Á¦¿ÜÇÑ ¸ðµç ¹®ÀÚµéÀ» º¯È¯ÇÑ´Ù. º¯È¯ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù. 
            <screen>     
% + ÇØ´ç¹®ÀÚÀÇ HEX°ª 
            </screen>     
            ¿¹¸¦ µé¾î¼­ * ´Â %2A ·Î ( ´Â %28 ·Î º¯È¯µÈ´Ù. ASCII  
            Å×À̺íÀº <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/ascii_table"> 
            ascii table</ulink>¸¦ Âü°íÇϱ⠹ٶõ´Ù.  
        </para> 
        <para> 
            ±×·¯¹Ç·Î CGI ÇÁ·Î±×·¥¿¡´Â À̵é urlencodeµÈ µ¥ÀÌÅ͸¦ decodeÇϱâ À§ÇÑ Äڵ尡  
            Æ÷ÇԵǾî¾ß ÇÑ´Ù. encode±ÔÄ¢¸¸ ¾È´Ù¸é decode ÄÚµå´Â ¾î·ÆÁö ¾Ê°Ô ÀÛ¼ºÇÒ ¼ö  
            ÀÖÀ» °ÍÀÌ´Ù. urlencode °ü·ÃµÈ Äڵ带  
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code_C_urlencode">Code_C_urlencode</ulink>¿¡ 
            Á¤¸®ÇØ µÎ¾úÀ¸´Ï Çѹø Âü°íÇØ º¸±â ¹Ù¶õ´Ù.  
        </para> 
    </section> 
    <section> 
        <title>CGI °ü·Ã ¶óÀ̺귯¸®</title> 
        <para> 
            Á¦´ë·ÎµÈ CGI ÇÁ·Î±×·¥À» ©·Á¸é ÀÌ°Í Àú°Í ½Å°æ½á¾ß ÇÒ°Ô Çѵΰ¡Áö°¡ ¾Æ´Ï´Ù.  
            HTTP ÇÁ·ÎÅäÄÝ, Cookie, POST, GET, MIME, uuencode, ÆÄÀÏÀü¼Û ... À̰ÍÀ» ÀÏÀÏÀÌ  
            ÀÛ¼ºÇϱâ¶õ ¿©°£ ±î´Ù·Î¿î°Ô ¾Æ´Ï´Ù. ±×·¡¼­ CGI ÇÁ·Î±×·¡¹Ö °ü·Ã ¸î °¡Áö ¶óÀ̺귯¸®¸¦  
            ¼Ò°³ÇÏ°í ±ÛÀ» ¸¶Ä¡°íÀÚ ÇÑ´Ù.  
            <itemizedlist> 
                <listitem> 
                <para> 
                <ulink url="http://www.w3.org/Library">libwww ¶óÀ̺귯¸®</ulink> 
                </para> 
                </listitem> 
                <listitem> 
                <para> 
                <ulink url="http://www.openbird.com/solutions/qdecoder/ko-about.jsp">qDecoder</ulink> 
                </para> 
                </listitem> 
            </itemizedlist> 
        </para> 
    </section> 
</section> 
</article> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.