CGI ÀÇ ±âÃÊ


Contents

1.CGI¶õ ¹«¾ùÀΰ¡?

2.ÀԷ°ª Àü´Þ¹æ½Ä

2-1. GET METHOD
2-2. POST METHOD

3. CGI¸¦ ÅëÇÑ º¯¼ö Àü´Þ ¹æ¹ý ¿¹

3-1. ¹æ¸í·Ï HTML ÆÄÀÏ¿¡¼­ÀÇ FORM TAG
3-2. PERL·Î º¸´Â ÀԷ°ª ÇØµ¶(decoding) ¹æ¹ý ¿¹
3-3. CGIÇÁ·Î±×·¥ Ãâ·Â
3-3-1. MIME TYPE
3-3-2. Location: [URL]

4. ȯ°æ º¯¼ö(Environment Variables)

4-1. ¼­¹ö¿¡ ´ëÇÑ HTTP Á¤º¸¸¦ ³ªÅ¸³»´Â ȯ°æº¯¼öµé
4-2. Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ µû¸¥ ȯ°æº¯¼öµé
4-3. ȯ°æº¯¼ö¸¦ CGI ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇϱâ

5. ÆÞ½ºÅ©¸³Æ®¸¦ »ç¿ëÇϱâ À§ÇÑ ¼±Çà ÀÛ¾÷

5-1. PERL INTERPRETER °®Ãß±â
5-2. ȯ°æ ÆÄÀÏ Ã¼Å©

1. CGI¶õ ¹«¾ùÀΰ¡?

CGI´Â Common Gateway InterfaceÀÇ ¾àÀÚÀÔ´Ï´Ù. À¥ºê¶ó¿ìÀú¿¡¼­ HTML·Î ¿©·¯°¡Áö Á¤º¸¸¦ ó¸®ÇÕ´Ï´Ù¸¸, ±× ±â´É¸¸À¸·Î ¸ðµç Á¤º¸Ã³¸®¸¦ ´Ù ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀ» º¸ÃæÇϱâ À§ÇÑ ¿ÜºÎ ÇÁ·Î±×·¥°ú À¥¼­¹ö(HTTP Server) °£ÀÇ ¿¬°á ¿ªÇÒÀ» Çϱâ À§ÇÑ ±Ô¾àÀÌ CGIÀÔ´Ï´Ù.

¶Ç´Â ³ÐÀº Àǹ̷ΠCGI¸¦ ¼öÇàÇÏ´Â ¿ÜºÎ ÇÁ·Î±×·¥À» Æ÷ÇÔÇÏ¿© ¸»Çϱ⵵ ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ȨÆäÀÌÁö¿¡ ¹æ¹®°´µéÀÇ comment¸¦ ¹ÞÀ» ¼ö ÀÖ´Â ¹æ¸í·ÏÀ» ¸¸µé·Á°í ÇÒ ¶§, À¥¿¡¼­ ±¸ÇöÇÏ´Â HTML¸¸À¸·Î´Â ÇØ°áÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¡¼­ ¿ÜºÎ ÇÁ·Î±×·¥ÀÌ ÇÊ¿äÇѵ¥, ÀÌ ¶§ ¿ÜºÎ ÇÁ·Î±×·¥°ú À¥ °£¿¡ ¼­·Î ÁÖ°í ¹ÞÀ» ¼ö ÀÖ´Â ±Ô¾àÀ» CGI¶ó°í Çϰí, ±× ¶§ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À» gatewayÇÁ·Î±×·¥À̶ó°í Çϴµ¥ À̰ÍÀ» ÈçÈ÷ CGI ÇÁ·Î±×·¥(ȤÀº ½ºÅ©¸³Æ®)À̶ó°í ÇÕ´Ï´Ù. ÀÌ CGIÇÁ·Î±×·¥Àº Åë»óÀûÀ¸·Î C/C++ ³ª PERLȤÀº UNIX Shell, Tcl/Tk µîÀ» »ç¿ëÇÏ¿© ±¸ÇöÇÕ´Ï´Ù.

ÀÌ CGI¸¦ ±¸ÇöÇϱâ À§Çؼ­´Â º¸Åë À¥ ÂÊ¿¡¼­´Â FORM ÅÃÀ» ÅëÇØ¼­ »ç¿ëÀÚÀÇ ÀԷ°ªµéÀ» À¥¼­¹ö(httpd)·Î º¸³»°í, ¼­¹ö¿¡¼­´Â ±× °ªÀ» CGIÇÁ·Î±×·¥¿¡°Ô ÀԷ°ªµéÀ» ³Ñ°ÜÁÝ´Ï´Ù.

À§ÀÇ ±×¸²À» º¸°í µ¥ÀÌŸÀÇ È帧À» ¾Ë¾Æ º¸¸é,

(1). Ŭ¶óÀ̾ðÆ®(À¥ºê¶ó¿ìÀú)¿¡¼­ ¼­¹ö·Î TCP/IP ¿¬°áÀ» ÅëÇØ µ¥ÀÌŸ ¿äûÇÕ´Ï´Ù.
(2). ¼­¹ö°¡ CGIÇÁ·Î±×·¥¿¡°Ô ½ÇÇàÀ» Çϵµ·Ï ¿äûÀ» °Ç³×ÁÝ´Ï´Ù.
(3). CGIÇÁ·Î±×·¥¿¡¼­ ¼­¹ö·Î Ãâ·ÂÀÌ Àü´ÞµË´Ï´Ù.
(4). ÀûÀýÇÑ MIMEÇì´õ¸¦ °®°í ¼­¹ö°¡ Ŭ¶óÀÌ¾ðÆ®·Î ÀÀ´äÇÑ ÈÄ, ¿¬°áÀÌ ÇØÁ¦µË´Ï´Ù.

2. ÀԷ°ª Àü´Þ ¹æ½Ä

À¥ ÂÊ¿¡¼­ ÀԷ°ªµéÀ» ³Ñ°ÜÁÖ´Â FORMÅÃÀÇ ±¸¼ºÀº º¸Åë ´ÙÀ½°ú °°½À´Ï´Ù.

<FORM METHOD=get/post ACTION="http://www.abc.com/cgi-bin/abc.cgi">

¹°·Ð À̰ÍÀº º¸ÆíÀûÀ¸·Î »ç¿ëÇÏ´Â °æ¿ìÀÇ ¿¹À̰í, ÀÌ FORMÅÿ¡´Â ´Ù¸¥ ¸¹Àº ¼Ó¼ºµéÀÌ ÀÖ½À´Ï´Ù. ¿©±â¼­ METHOD´Â post¿Í get µÎ °³ÀÇ ¹æ½ÄÀÌ Àִµ¥, ÀÌ ¹æ½Ä¿¡ ´ëÇØ¼­ ¾Ë¾Æ º¸°Ú½À´Ï´Ù.

2-1. get method

FORMÅÿ¡ METHOD=getÀ¸·Î Çϰųª »ý·«ÇÏ¸é »ç¿ëÀÚÀÇ ÀԷ°ªµéÀÌ È¯°æº¯¼ö(Environment Variable)¿¡ ÀúÀåµÇ¾î ³Ñ°ÜÁý´Ï´Ù. Áï °¢ ÀԷ°ªµéÀÌ ±âº»URL¿¡ ºÙ´Â Àμö(PARAMETER)·Î¼­ ÷°¡µÇ¾î CGIÇÁ·Î±×·¥À¸·Î °ªÀ» ³Ñ°Ü ÁÖ°Ô µË´Ï´Ù.

¹°·Ð ÀÌ get METHOD´Â FORMÅÃÀ» »ç¿ëÇÏÁö ¾Ê°í ¹Ù·Î URL¿¡ Àμö¸¦ ÷°¡ÇÏ¿© »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î, http://www.abc.com/cgi-bin/abc.cgi?First+Name=foo&Last+Name=bar ¿Í °°Àº Çü½ÄÀ¸·Î »ç¿ëµË´Ï´Ù.

ÀÌ GET METHOD¸¦ ÀÌ¿ëÇÏ¸é ±× ÀԷ°ªµéÀÌ È¯°æº¯¼öÀÇ ÇϳªÀÎ QUERY_STRING ¿¡ µé¾î°¡¼­ Àü´ÞµÇ´Âµ¥, CGI½ºÅ©¸³Æ®´Â ±× QUERY_STRING¿¡ µé¾î ÀÖ´Â °ªÀ» ÀнÀ´Ï´Ù. ÀÌ ¶§ ±× °ªµéÀº ÀÔ·ÂµÈ ±×´ë·Î ³Ñ¾î°¡´Â °ÍÀÌ ¾Æ´Ï¶ó ¼­¹ö¿¡ ÀÇÇØ ¿©·¯°¡Áö·Î º¯È¯(ÀÎÄÚµù)µÇ¾î ³Ñ¾î°¡´Âµ¥ CGI½ºÅ©¸³Æ®¿¡¼­´Â ±× °ªµéÀ» ÇØµ¶(decoding)ÇØ¾ß ÇÕ´Ï´Ù.

ÀÌ GET METHOD´Â º¸Åë ÀԷ°ªµéÀÌ ¸¹Áö ¾Ê´Â °æ¿ì ȤÀº ±×³É URL¿¡ ºÙ´Â ÆÄ¶ó¹ÌÅÍ·Î ³Ñ°Ü¼­ CGI½ºÅ©¸³Æ®·Î Àü´ÞÇÒ ¶§¿¡ »ç¿ëÇÕ´Ï´Ù.

2-2. post method

FORMÅÿ¡¼­ METHOD=post·Î Çϸé, get METHOD°¡ ȯ°æº¯¼öÁßÀÇ ÇϳªÀÎ QUERY_STRINGÀ» ÅëÇØ Àü´ÞµÇ´Â °Í°ú ´Þ¸® stdin(standard input:Ç¥ÁØÀÔ·Â) À» ÅëÇØ¼­ Àü´ÞµË´Ï´Ù. get METHOD°¡ Àμö¸¦ ÅëÇØ¼­ Àü´ÞµÇ¹Ç·Î Ä¿¸Çµå¶óÀÎ ÀÇ ±æÀÌ¿¡ ÀÇÇÑ Á¦ÇÑÀ» ¹Þ´Â ¹Ý¸é¿¡, post METHOD´Â stdinÀ» ÀÌ¿ëÇϹǷΠµ¥ÀÌŸ¾çÀÇ Á¦ÇÑÀÌ ¾ø½À´Ï´Ù. ¶ÇÇÑ post METHOD¿¡¼­µµ ȯ°æº¯¼öµéÀº stdin°ú ÇÔ²² Àü´ÞµË´Ï´Ù. ±×¸®°í post¹æ½Äµµ ¸¶Âù°¡Áö·Î ÀԷ°ªµéÀÌ encodingµÇ¾î ³Ñ¾î¿ÈÀ¸·Î CGI¿¡¼­ ±× °ªµéÀ» decodingÇØ¾ß ÇÕ´Ï´Ù.

3. CGI¸¦ ÅëÇÑ º¯¼ö Àü´Þ ¹æ¹ý ¿¹

ÀÌÁ¦ FORM¿¡¼­ ÀÔ·ÂµÈ °ª (ȤÀº get METHODÀÎ °æ¿ì´Â ÆÄ¶ó¹ÌÅÍ·Î Àü´ÞµÈ °ª) µéÀ» ¾î¶»°Ô ó¸®ÇØ¾ß ÇÏ´Â Áö ÀúÀÇ ¹æ¸í·Ï ÇÁ·Î±×·¥À» ¿¹·Î µé¾î ¼³¸íÇϰڽÀ´Ï´Ù.

3-1. ¹æ¸í·Ï HTML ÆÄÀÏ¿¡¼­ÀÇ FORM TAG

¿ì¼± ¹æ¸í·Ï¿¡¼­ Àü´ÞµÇ´Â FORM TAGÀ» table µîÀÇ ÅõéÀ» Á¦¿ÜÇÏ°í ¼ø¼öÇÏ°Ô FORM°ú °ü·ÃµÈ tagµéÀ» Ãß·Áº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

<FORM METHOD=POST ACTION="http://www.abc.com/cgi-bin/guestbook.cgi">
ÀÌ ¸§ : <input type=text name=guest_name size=30 value= "">
Email : <input type=text name=guest_email size=40 value= "" >
ȨÆäÀÌÁö : <input type=text name=guest_url size=50 value= "" >
³²±æ ¸»¾¸ : <textarea name=comment COLS=60 ROWS=5 value= "" >
<input type=submit name=enter_guest value="ÀÔ·Â ¿Ï·á">
<input type=reset value="Àç ÀÔ·Â">
À§ FORMÅÃÀ» TABLE ÅÃÀ» ÇÔ²² ½á¼­ Á¤¸®µÈ ¸ð¾çÀÌ ¾Æ·¡ÀÇ ±×¸²°ú °°½À´Ï´Ù.

ÀÌ ¸§ :
Email :
ȨÆäÀÌÁö :
³²±æ ¸»¾¸ :

À§ÀÇ FORMÅÿ¡¼­ METHOD´Â post·Î, action¿¡´Â »ç¿ëÇÏ´Â cgiÇÁ·Î±×·¥ÀÇ URLÀÌ ÀûÈ÷°Ô µË´Ï´Ù. À̸§°ú E_Mail¹× ȨÆäÀÌÁö´Â ÇÑ ÁÙ·Î ³ªÅ¸³ª´Â text inputÀ¸·Î 󸮵Ǿú°í ³²±æ ¸»¾¸¶õÀº ¿©·¯ ÁÙÀÇ ÀÔ·ÂÀÌ °¡´ÉÇϵµ·Ï textarea ¶õ input ¼Ó¼ºÀ¸·Î 󸮵Ǿî ÀÖ½À´Ï´Ù.

submit¶õ input¼Ó¼ºÀº ±Û´ÜÃ߷μ­ ÀÔ·ÂµÈ °ªÀ» À¥¼­¹ö·Î Àü´ÞÇÏ´Â ¿ªÇÒÀ» Çϸç, reset¶õ input ¼Ó¼ºÀº ±Û´ÜÃ߷μ­ ÀÔ·ÂµÈ °ªÀ» ¸ðµÎ Áö¿ì°í »õ·Î ÀÔ·ÂÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù.
(FormÅÿ¡ °üÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº ´Ù¸¥ ÆäÀÌÁö¿¡ µû·Î ¸¶·ÃÇÕ´Ï´Ù.) ÀÌÁ¦, "ÀԷ¿Ϸá" ±Û´ÜÃ߸¦ ´­·¯ ÀԷµǾî ÀÖ´Â °ªÀ» À¥¼­¹ö¸¦ °æÀ¯ÇÏ¿© CGIÇÁ·Î±×·¥À¸·Î Àü´ÞµË´Ï´Ù.

ÀÌ Àü´ÞµÇ´Â °úÁ¤¿¡¼­ ¸ðµç µ¥ÀÌŸµé (ÀԷº¯¼ö¹× stdin)ÀÌ encodingµÈ »óÅ·ΠÀü´ÞµË´Ï´Ù.
EncodingµÈ °ÍµéÀ» ¾Ë¾Æº¸¸é,

  • °¢ ÀԷº¯¼ö Çʵå´Â &·Î ±¸ºÐµÇ¾îÀÖ´Ù.
  • ÀԷº¯¼ö ÇʵåÀÇ À̸§°ú °ªÀº =·Î ±¸ºÐµÇ¾îÀÖ´Ù.
  • °ø¹é(space)´Â +·Î ġȯµÇ¾î ³Ñ¾î¿Â´Ù.
  • +, &, = µîÀÇ Æ¯º°ÇÑ Àǹ̰¡ ÀÖ´Â ±âÈ£¹®ÀÚ´Â 16Áø¼ö°ªÀ¸·Î ¹Ù²î¾î ³Ñ¾î¿Â´Ù.

ÀÌÁ¦ ÀÌ·¸°Ô encodingµÈ °ªµéÀ» ´Ù½Ã decodingÇÏ´Â °ÍÀº cgiÇÁ·Î±×·¥¿¡¼­ ÇØ¾ßÇÒ ÀÏÀÔ´Ï´Ù.

3-2. PERL·Î º¸´Â ÀԷ°ª ÇØµ¶(decoding) ¹æ¹ý ¿¹

ÀúÀÇ ¹æ¸í·Ï ÇÁ·Î±×·¥¿¡¼­ ÀÌ decodingÀº read_parse¶ó´Â subroutine¿¡¼­ ó¸®Çϰí ÀÖ½À´Ï´Ù. ¹°·Ð read_parseºÎºÐÀ» ¾ÆÁÖ Àß Ã³¸®Çϵµ·Ï µÈ library°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀº º¸Åë cgi-lib.plÀ̶õ ÆÞ½ºÅ©¸³Æ® ¶óÀ̺귯¸® ÆÄÀϷμ­ ÀÌ library¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â read_parse ¿Í °°Àº ¼­ºê·çƾÀÌ ÇÊ¿ä¾øÀÌ ¹Ù·Î &ReadParse; ¶õ ¸í