°í±Þ CGI ÇÁ·Î±×·¡¹Ö

ÀÌÅðæ
¼­¿ï½Ã °­³²±¸ û´ãµ¿ 81-8 ¿ì¿øºôµù 5Ãþ
(ÁÖ)´ÙÀ½Ä¿¹Â´ÏÄÉÀÌ¼Ç °³¹ßÆÀ
E-mail : kyung@daum.co.kr
URL : http://cezanne.daum.co.kr/~kyung/
Abstract:
WWW´Â ÇÏÀÌÆÛ¸µÅ©±â´É°ú Æí¸®ÇÑ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º·Î ÀÎÇÏ¿© »ç¿ëÀÚµéÀÌ ±ÞÁõÇϰí ÀÖ´Â Ãß¼¼ÀÌ´Ù. ÀϹÝÀûÀÎ WWW ½Ã½ºÅÛÀº Á¤ÀûÀÎ ¹®¼­¸¸À¸·Î ±¸¼ºµÇ¾î, Ŭ¶óÀ̾ðÆ®ÀÇ ´Ù¾çÇÑ ¿äûÀ» ó¸®Çϱâ À§Çؼ­´Â CGI¸¦ ÅëÇÑ ¹®¼­ÀÇ µ¿ÀûÀÎ »ý¼ºÀÌ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ WWW ½Ã½ºÅÛÀº »óŸ¦ À¯ÁöÇÏÁö ¾Ê´Â Ư¼ºÀ» Áö´Ï°í À־ CGI ÇÁ·Î±×·¥ÀÇ Á¦ÀÛ¿¡ ¾î·Á¿òÀÌ ÀÖ´Ù.
º»°í¿¡¼­´Â CGIÀÇ ÀÛµ¿¿ø¸®¿¡ ´ëÇØ Àü¹ÝÀûÀ¸·Î ¾Ë¾Æº¸°í, »õ·Î¿î ¹æ½ÄÀÎ dynamic document, È­ÀÏ ¾÷·Îµå¸¦ ¼³¸íÇÑ´Ù. ¶ÇÇÑ »óŸ¦ À¯ÁöÇÏÁö ¾Ê´Â ¹®Á¦Á¡À» ÇØ°áÇϱâ À§ÇÑ ¸ðµ¨À» Á¦½ÃÇϰí, »õ·Î¿î ¹æ½ÄÀÎ ÄíŰ¿¡ ´ëÇØ ¼³¸íÇÑ´Ù.
Keywords:
WWW, CGI, Cookie, Client/Server, Form

1. ¼­·Ð

WWW(World Wide Web) ½Ã½ºÅÛÀÌ µµÀԵǸ鼭ºÎÅÍ, WWWÀÇ Æí¸®ÇÑ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º·Î ÀÎÇÏ¿© ÀϹݻç¿ëÀÚµéÀÇ ÀÎÅÍ³Ý »ç¿ëÀÌ ±ÞÁõÇϰí ÀÖ´Â Ãß¼¼ÀÌ´Ù. ÇÏÁö¸¸ ±âÁ¸ÀÇ Á¤ÀûÀÎ ¹®¼­¸¸À¸·Î´Â ´Ã¾î³ª´Â »ç¿ëÀÚµéÀÇ ´Ù¾çÇÑ ¿äûÀ» È¿°úÀûÀ¸·Î ó¸®ÇÏÁö ¸øÇϸç, À̸¦ À§Çؼ­ CGI¸¦ ÅëÇÑ ¹®¼­ÀÇ µ¿ÀûÀÎ »ý¼ºÀÌ ÇÊ¿äÇÏ´Ù.

WWW ½Ã½ºÅÛÀº Ŭ¶óÀ̾ðÆ®/¼­¹ö ¸ðµ¨¿¡ ±â¹ÝÀ» µÎ°í ÀÖÀ¸¸ç, »óŸ¦ À¯ÁöÇÏÁö ¾Ê´Â(stateless) Ư¼ºÀ» Áö´Ï°í ÀÖ´Ù. ÀÌ´Â ¼­¹öÀÇ ºÎÇϸ¦ ÁÙ¿©Áشٴ ÀåÁ¡À» °¡Áö°í ÀÖÀ¸³ª, »óŸ¦ À¯ÁöÇϱâ À§ÇØ º°µµÀÇ ½Ã½ºÅÛÀÌ ÇÊ¿äÇÏ´Ù´Â ´ÜÁ¡À» ¾È°í ÀÖ´Ù. µû¶ó¼­ º»°í¿¡¼­´Â CGIÀÇ ÀϹÝÀûÀÎ ÀÛµ¿¿ø¸®¿¡ ´ëÇØ »ìÆìº¸°í, NetscapeÀÇ »õ·Î¿î ¹æ½ÄÀÎ µ¿Àû¹®¼­(dynamic document), È­ÀÏ ¾÷·Îµå¸¦ ¼³¸íÇϰí, »óŸ¦ À¯ÁöÇϱâ À§ÇÑ ¸ðµ¨À» Á¦½ÃÇϸç, »õ·Î¿î ¹æ½ÄÀÎ ÄíŰ¿¡ ´ëÇØ ¼³¸íÇÑ´Ù.

2. CGI

CGI(Common Gateway Interface)´Â ¼­¹ö¿Í ¿ÜºÎ ÇÁ·Î±×·¥°úÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ Ç¥ÁØÀÌ´Ù. ÀϹÝÀûÀ¸·Î ¼­¹ö°¡ ³Ñ°ÜÁÖ´Â ¹®¼­´Â Á¤ÀûÀÎ ¹®¼­ÀÌ´Ù. ÀÌ¿¡ ºñÇØ CGI¸¦ ÅëÇØ ¿ÜºÎ ÇÁ·Î±×·¥¿¡ Á¤º¸ ¿äûÀ» ÇÏ°í ¿ÜºÎ ÇÁ·Î±×·¥ÀÌ ÀûÀýÇÑ ¹®¼­¸¦ µ¿ÀûÀ¸·Î »ý¼º½Ãų ¼ö ÀÖ´Ù. ´ÙÀ½ ±×¸²Àº µ¿ÀûÀ¸·Î »ý¼ºµÈ ¹®¼­ ¿¹ÀÌ´Ù.


±×¸² 1 : BBS¿¡¼­ µ¿ÀûÀ¸·Î »ý¼ºµÈ »ç¿ëÀÚ ¸®½ºÆ®

2.1 ÀÛµ¿¿ø¸®

´ÙÀ½ ±×¸²°ú °°ÀÌ Å¬¶óÀÌ¾ðÆ®°¡ ¹®¼­¸¦ ¿äûÇÏ¸é ¼­¹ö´Â CGI ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ÀμöµéÀ» Àü´ÞÇÏ¸ç ½ÇÇà½ÃŲ´Ù. ½ÇÇàµÈ °á°ú·Î ¹®¼­°¡ µ¿ÀûÀ¸·Î »ý¼ºµÇ¸ç, ÀÌ ¹®¼­´Â ¼­¹ö¸¦ °ÅÃļ­ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô·Î ³Ñ°ÜÁø´Ù.


±×¸² 2 : CGIÀÇ ÀÛµ¿¿ø¸®

CGI ÇÁ·Î±×·¥À» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº 1) URL¿¡¼­ CGI ÇÁ·Î±×·¥°ú Àü´ÞÇÒ ÀμöµéÀ» ÁöÁ¤Çϰųª, 2) Æû¹®¿¡¼­ CGI ÇÁ·Î±×·¥°ú Àü´ÞÇÒ Àμö(ÀÌÈÄ »ç¿ëÀÚ°¡ ÀÔ·Â)µéÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ¶ÇÇÑ ÀμöµéÀ» CGI ÇÁ·Î±×·¥À¸·Î Àü´ÞÇÏ´Â ¹æ½ÄÀº "GET" ¹æ½Ä°ú "POST" ¹æ½ÄÀÇ µÎ°¡Áö°¡ ÀÖ´Ù. "GET" ¹æ½ÄÀº ¸ðµç ÀμöµéÀ» ȯ°æº¯¼öµéÀ» ÅëÇØ¼­ Àü´ÞÇÏ°Ô µÇ¸ç, "POST" ¹æ½ÄÀº ȯ°æº¯¼ö¿Í "stdin"À» ÅëÇØ¼­ ÀμöµéÀ» Àü´ÞÇÏ°Ô µÈ´Ù. URL¿¡¼­ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº "GET" ¹æ½ÄÀ» ÀÌ¿ëÇϸç, Æû¹®¿¡¼­ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº "GET"°ú "POST&quuot; ¹æ½Ä µÎ°¡Áö ¸ðµÎ¸¦ ÀÌ¿ëÇÑ´Ù.

2.2 Æû¹® °ü·Ã ű×(Fill-Out Form Tag)

Æû¹®Àº ´ÙÀ½ ±×¸²°ú °°ÀÌ »ç¿ëÀڷκÎÅÍ ÇÊ¿äÇÑ ÇʵåµéÀ» ÀԷ¹޴ ¹æ½ÄÀÌ´Ù.


±×¸² 3 : BBS¿¡¼­ ÀüÀÚ¿ìÆíÀ» ¾²°íÀÚ ÇÒ ¶§ ³ªÅ¸³ª´Â Æû¹®

Æû¹®ÀÇ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.

2.3 CGIÀÇ ÀÔ·Â

ÀμöµéÀº ´ÙÀ½°ú °°Àº ÇüÅ·Π³Ñ¾î¿Â´Ù.

NAME1=VALUE1&NAME2=VALUE2...

"GET" ¹æ½Ä¿¡¼­´Â À§ÀÇ ÀμöµéÀÌ "QUERY_STRING"À̶ó´Â ȯ°æº¯¼ö¸¦ ÅëÇØ ³Ñ¾î¿À¸ç, "POST" ¹æ½Ä¿¡¼­´Â À§ÀÇ ÀμöµéÀÌ "stdin"À» ÅëÇØ ³Ñ¾î¿À°Ô µÈ´Ù. ±×¿Ü ÇÊ¿äÇÑ Á¤º¸µéÀº ´Ù¸¥ ȯ°æº¯¼öµéÀ» ÅëÇØ ³Ñ¾î¿À°Ô µÈ´Ù. ³Ñ¾î¿À´Â ÀμöµéÀº Ç¥ÁØ URL Çü½ÄÀ¸·Î ÀÎÄÚµåµÇ¾î ³Ñ¾î¿À¹Ç·Î ÀûÀýÈ÷ µðÄÚµå(decode)½Ãų Çʿ䰡 ÀÖ´Ù. ÀÎÄÚµå Çü½ÄÀº °ø¹éÀº '+'·Î º¯È¯µÇ°í, Ư¼ö¹®ÀÚ´Â %XX(16Áø¼ö)·Î º¯È¯µÈ´Ù.

2.4 CGIÀÇ Ãâ·Â

CGI´Â ¼¼°¡ÁöÀÇ Çì´õ - Location, Content-type, Status - ¸¦ Á¤ÀÇÇϰí ÀÖ´Ù. ¼­¹ö´Â CGIÀÇ Ãâ·ÂÀÎ ÀÌ Çì´õÁ¤º¸¸¦ HTTP ÀÀ´äÇì´õ(HTTP response header)¿¡ ÀûÀýÈ÷ »ðÀÔÇÏ¿© Ŭ¶óÀÌ¾ðÆ®·Î ³Ñ°ÜÁØ´Ù.

2.5 È­ÀÏ ¾÷·Îµå

È­ÀÏ ¾÷·Îµå´Â Netscape 2.0 À̻󿡼­ Áö¿øµÇ¸ç, ¾÷·ÎµåÇϰíÀÚ ÇÏ´Â È­ÀÏÀ» ´ëÈ­»óÀÚ¿¡¼­ ¼±ÅÃÇÏ¿© ¼­¹öÂÊÀ¸·Î Àü¼Û½ÃŲ´Ù. ´ÙÀ½ ±×¸²Àº È­ÀÏ ¾÷·Îµå¸¦ ÀÌ¿ëÇÏ¿© ¿¹ÀÌ´Ù.


±×¸² 4 : BBS¿¡¼­ °ø°³ÀÚ·á½Ç¿¡ ¾÷·ÎµåÇϰíÀÚ ÇÒ ¶§ ³ªÅ¸³ª´Â ´ëÈ­»óÀÚ

È­ÀϾ÷·Îµå¸¦ À§Çؼ­´Â "type"ÀÌ "file"ÀÎ "<input>" ű׸¦ ÀÌ¿ëÇÏ¸é µÇ¸ç, ¶ÇÇÑ "enctype"À» "multipart/form-data"·Î ÁöÁ¤ÇØ¾ß µÈ´Ù. À̸¦ ÀÌ¿ëÇϸé "browse"¹öưÀÌ ¿ìÃø¿¡ ³ªÅ¸³ª°Ô µÈ´Ù. È­ÀÏ ¾÷·Îµå Æû¹®ÀÇ ¿¹´Â ´ÙÀ½°ú °°´Ù.

<form enctype="multipart/form-data" method="post" action="URL">
Upload File : <br>
<input type="file" name="filename" size="50"><br>
Keyword : <br>
<input type="text" name="keyword" size="50"><br>
File Description :<br>
<textarea name="description" cols="70" rows="5"></textarea><br>
<input type="submit" value="Upload">
</form>

À§ÀÇ Æû¹®À» ÀûÀýÈ÷ ÀÔ·ÂÇÑ µÚ, "Upload"¹öưÀ» ´©¸£¸é, CGI´Â ȯ°æº¯¼ö¿Í "stdin"À¸·Î ´ÙÀ½°ú °°Àº µ¥ÀÌŸ¸¦ Àü¼Û¹Þ°Ô µÈ´Ù.

ȯ°æº¯¼ö

getenv("CONTENT_TYPE") => multipart/form-data; boundary=---------------------------19241282464929 getenv("CONTENT_LENGTH") => 7209

stdin

-----------------------------19241282464929
Content-Disposition: form-data; name="filename"; filename="C:\Program Files\Netscape\Navigator\Readme.txt"
Content-Type: text/plain


Netscape Navigator 2.0 is subject to the terms detailed in the...
...
...


-----------------------------19241282464929
Content-Disposition: form-data; name="keyword"

text
-----------------------------19241282464929
Content-Disposition: form-data; name="description"

This is "readme.txt" file.
-----------------------------19241282464929--

À§ÀÇ ¿¹¿¡¼­ "keyword" Àμö´Â "text"¸¦ °ªÀ¸·Î °¡Áö¸ç, "description" Àμö´Â "This is .."¸¦ °ªÀ¸·Î °¡Áø´Ù. "filename" Àμö´Â ´ëÈ­»óÀÚ¿¡¼­ ¼±ÅÃÇÑ È­ÀϸíÀ» °¡Áö¸ç, ¾÷·ÎµåµÈ È­ÀÏÀº "text/plain" Çü½ÄÀÇ È­ÀÏÀ̰í, "Netscape Navigator 2.0 is ..." ºÎºÐÀÌ ¾÷·ÎµåµÈ È­ÀÏÀÇ ³»¿ëÀÌ´Ù.

3. µ¿Àû¹®¼­(Dynamic Document)

±âÁ¸ÀÇ WWW ½Ã½ºÅÛ¿¡¼­ Ŭ¶óÀÌ¾ðÆ®´Â Ç×»ó »ç¿ëÀÚÀÇ ÀԷ¸¸À» µû¶ó »õ·Î¿î ÀڷḦ °¡Á®¿À¸ç, ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¸¸À» µû¶ó °á°ú ÀڷḦ ³Ñ°ÜÁÖ´Â Çǵ¿ÀûÀÎ ÀÔÀå¿¡ ÀÖ´Ù. ÀÌ¿¡ ºñÇØ, µ¿Àû¹®¼­´Â »ç¿ëÀÚÀÇ ÀÔ·ÂÀÌ ¾ø¾îµµ ÀÏÁ¤ÁֱⰡ Áö³ª¸é »õ·Î¿î ÀڷḦ °¡Á®¿Ã ¼ö ÀÖÀ¸¸ç, ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû ¾øÀ̵µ »õ·Î¿î ÀڷḦ ³Ñ°ÜÁÖ´Â ´Éµ¿ÀûÀÎ ÀÔÀå¿¡ ¼³ ¼ö ÀÖ°Ô ÇÑ´Ù. ÀÌ ¹æ½ÄÀº ÇöÀç Netscape 1.1 À̻󿡼­¸¸ Áö¿øµÈ´Ù.

3.1 Ŭ¶óÀÌ¾ðÆ® ´ç±â±â(Client Pull)

3.1.1 ÀÛµ¿¿ø¸®

»ç¿ëÀÚÀÇ ÀÔ·ÂÀÌ ¾ø¾îµµ ÀÏÁ¤ÁֱⰡ Áö³ª¸é »õ·Î¿î ÀڷḦ °¡Á®¿Ã ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î¼­, HTML ¹®¼­³»¿¡ ÇöÀç ¹®¼­ÀÇ Áö¼Ó½Ã°£°ú ´ÙÀ½ ¹®¼­¸¦ ¸í½ÃÇϰí Áö¼Ó½Ã°£ÀÌ ³¡³ª¸é ´ÙÀ½ ¹®¼­¸¦ ´Ù½Ã ºÒ·¯¿À°ÔÇÑ´Ù.

ÀÌ °úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.


±×¸² 5 : Ŭ¶óÀÌ¾ðÆ® ´ç±â±âÀÇ ÀÛµ¿¿ø¸®

3.1.2 ÀÀ¿ëºÐ¾ß

´ÙÀ½°ú °°Àº ºÐ¾ß¿¡ ÀÀ¿ëÀÌ °¡´ÉÇÏ´Ù.

3.1.3 ¹®¹ý

´ÙÀ½°ú °°ÀÌ ¸ÞŸÅ±×(meta tag)¾È¿¡ Áö¼Ó½Ã°£°ú ´ÙÀ½ ¹®¼­¸¦ ¸í½ÃÇϸç, ÀÌ ¸ÞŸÅ±״ HTML ¹®¼­ÀÇ HEAD ºÎºÐ¿¡ ¿Í¾ß ÇÑ´Ù.

<META HTTP-EQUIV="Refresh" CONTENT="12; URL=http://host.domain/next.html">

À¯ÀÇÇÒ Á¡Àº ´ÙÀ½°ú °°´Ù.

3.1.4 Æò°¡

3.2 ¼­¹ö ¹Ð±â(Server Push)

3.2.1 ÀÛµ¿¿ø¸®

Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû ¾øÀ̵µ ¼­¹öÂÊ¿¡¼­ °è¼ÓÇÏ¿© »õ·Î¿î ÀڷḦ º¸³»´Â ¹æ¹ýÀ¸·Î¼­, MIME Çü½ÄÁß "multipart" Çü½ÄÀ» ÀÌ¿ëÇÏ¿© º¹ÇÕ¹®¼­ÇüÅ·Π»õ·Î¿î ÀڷḦ °è¼Ó º¸³½´Ù. µû¶ó¼­ ¼­¹öÂÊ¿¡¼­ º¸´Ù ´Éµ¿ÀûÀÎ ÀÚ·áÀÇ Àü¼ÛÀÌ °¡´ÉÇÏ´Ù.

ÀÌ °úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.


±×¸² 6 : ¼­¹ö ¹Ð±âÀÇ ÀÛµ¿¿ø¸®

3.2.2 ÀÀ¿ëºÐ¾ß

ÀÀ¿ëºÐ¾ß´Â Ŭ¶óÀÌ¾ðÆ® ´ç±â±â¿Í À¯»çÇϸç, HTML ¹®¼­³»ÀÇ ÀϺκÐ(À̹ÌÁö, ¿Àµð¿À µî)¸¸À» µ¿ÀûÀ¸·Î º¸ÀÌ°Ô ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

3.2.3 ¹®¹ý

¼­¹öÂÊ¿¡¼­ »ý¼ºµÈ HTTP ÀÀ´ä ¸Þ½ÃÁö´Â ´ÙÀ½°ú °°¾Æ¾ß ÇÑ´Ù.

HTTP/1.0 200 OK
Content-type: multipart/x-mixed-replace;boundary=TestBoundary

--TestBoundary
Content-type: text/plain

first document

--TestBoundary
Content-type: text/html

<html>
<body>
second document
</body>
</html>

--TestBoundary--

À§ÀÇ ¿¹´Â °¢°¢ "first document", "second document" ¸¦ Ãâ·ÂÇÏ´Â µÎ °³ÀÇ ¿¬¼ÓÀûÀÎ ¹®¼­·Î ±¸¼ºµÈ º¹ÇÕ¹®¼­À̸ç, ¹®¼­°¡ º¯ÇÏ´Â ½Ã°£Àº ¼­¹öÂÊ¿¡¼­ µÎ¹øÂ° ¹®¼­¸¦ Àü¼ÛÇÏ´Â ½Ã±â¸¦ Á¶Á¤ÇÔÀ¸·Î½á °¡´ÉÇÏ´Ù.

µ¿Àû¹®¼­¸¦ ÁߴܽÃų·Á¸é ¼­¹öÂÊ¿¡¼­ Àüü º¹ÇÕ¹®¼­¸¦ ¸ðµÎ º¸³»¾ú°Å³ª, Ŭ¶óÀ̾ðÆ®ÂÊ¿¡¼­ »ç¿ëÀÚ°¡ Áß´Ü ¹öưÀ» ´©¸£¸é µÈ´Ù.
´ÙÀ½Àº 1ºÎÅÍ 10±îÁöÀÇ ¼ýÀÚ¸¦ ¿¬¼ÓÀûÀ¸·Î Ãâ·ÂÇÏ´Â C ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù.

#include <stdio.h>

main()
{

}

3.2.4 Æò°¡

4. CGI ÇÁ·Î±×·¥ÀÇ ¸ðµ¨¸µ ¹× µð¹ö±ë

4.1 »óÅÂÁ¤º¸ À¯Áö ¸ðµ¨(State-Info Management Model)

WWWÀÇ Å¬¶óÀ̾ðÆ®/¼­¹ö ¸ðµ¨À» ±¸¼ºÇÏ´Â HTTP ÇÁ·ÎÅäÄÝÀº ¿¬°áÀÌ ¾ø°í(connectionless), »óŸ¦ À¯ÁöÇÏÁö ¾Ê´Â(stateless) ÇÁ·ÎÅäÄÝÀÌ´Ù. ¿¬°áÀÌ ¾ø´Ù´Â °ÍÀº ÇѹøÀÇ ¿¬°á¿¡ ¿ÀÁ÷ ÇϳªÀÇ ¿äû¸¸À» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇϸç, »óŸ¦ À¯ÁöÇÏÁö ¾Ê´Â´Ù´Â °ÍÀº ¿¬¼ÓÀûÀΠ󸮿¡ ÇÊ¿äÇÑ ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. »óŸ¦ À¯ÁöÇÏÁö ¾Ê±â ¶§¹®¿¡ ¾ò´Â ÀÌÁ¡Àº ¼­¹ö°¡ ºÎ°¡ÀûÀÎ Á¤º¸µéÀ» À¯ÁöÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡ ´õ¿í È¿À²ÀûÀ¸·Î ÀÛµ¿µÉ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ÇÏÁö¸¸ ¹Ý¸é¿¡ ÀÌÀü 󸮷κÎÅÍ ÇÊ¿äÇÑ Á¤º¸µéÀ» ¸Å ¿¬°á¸¶´Ù ´Ù½Ã Àü¼ÛÇØ¾ß ÇÑ´Ù´Â ´ÜÁ¡À» ¾È°í ÀÖ´Ù. ¿¹¸¦ µé¾î BBS¿¡¼­ ÀÌÀü¸Þ´º·Î µ¹¾Æ°¡°íÀÚ ÇÒ °æ¿ì, ÀÌÀü 󸮷κÎÅÍ Çö »óÅ¿¡ °ü·ÃµÈ Á¤º¸µéÀ» ¸ðµÎ ³Ñ°Ü¹Þ¾Æ¾ß ÇÑ´Ù.

WWW ½Ã½ºÅÛÀº Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°£ÀÇ ¿¬¼ÓÀûÀÎ Åë½Å¿¡ ÀÇÇØ ÀÛ¾÷À» ¼öÇàÇÏ°Ô µÇ¸ç, ÀÌ °úÁ¤¿¡¼­ ÇÊ¿äÇÑ CGIµéÀÌ Àüü ÀÛ¾÷È帧¿¡ µû¶ó ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÇ°Ô µÈ´Ù. µû¶ó¼­ °¢ CGIÀÇ ½ÇÇàÀº Àüü ÀÛ¾÷È帧 ÁßÀÇ ÇÑ ÇÁ·Î¼¼½º·Î °£ÁÖµÉ ¼ö ÀÖÀ¸¸ç, Àüü ÀÛ¾÷Àº ´ÙÀ½ ±×¸²°ú °°ÀÌ °¢ CGIµéÀÇ »óŵµÇ¥(state diagram)·Î ³ªÅ¸³¾ ¼ö ÀÖ´Ù.


±×¸² 7 : CGIµé°£ÀÇ »óŵµÇ¥

°¢ CGIµéÀº ´ÙÀ½ CGIÀÇ ½ÇÇà¿¡ ÇÊ¿äÇÑ ¸ðµç Á¤º¸µéÀ» »ý¼º½ÃÄÑ, À̸¦ URLÀÇ Àμö³ª Æû¹®ÀÇ "hidden" Çü½ÄÀÇ "<input>" ű׸¦ ÀÌ¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ®¿¡ ¹ÝȯµÇ´Â HTML ¹®¼­¿¡ Æ÷ÇÔ½ÃŲ´Ù. ±×·¯¸é Ŭ¶óÀÌ¾ðÆ®´Â »ç¿ëÀÚÀÇ ¼±Åÿ¡ µû¶ó ´ÙÀ½ CGI¸¦ ¼öÇàÇÏ°Ô µÇ¸ç, HTML ¹®¼­³»¿¡ Æ÷ÇÔµÈ Á¤º¸µéÀ» ´ÙÀ½ CGI·Î ³Ñ°ÜÁÖ°Ô µÈ´Ù. ÀÌ ÁøÇà°úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.


±×¸² 8 : CGIµéÀÇ ÁøÇà°úÁ¤

À§ÀÇ ±×¸²¿¡¼­ CGI A´Â ´ÙÀ½ CGI B¿¡ ÇÊ¿äÇÑ Á¤º¸ B¿Í ±× ´ÙÀ½ CGI C¿¡ ÇÊ¿äÇÑ Á¤º¸ A¸¦ »ý¼º½ÃŲ µÚ, ÀÌ Á¤º¸µéÀ» HTML ¹®¼­³»¿¡ Æ÷ÇÔ½ÃÄÑ Å¬¶óÀ̾ðÆ®ÂÊ¿¡ ³Ñ°ÜÁØ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ´Ù½Ã URL¿¡ ÀÌ Á¤º¸µéÀ» Æ÷ÇÔ½ÃÄÑ CGI B¸¦ È£ÃâÇÑ´Ù. CGI B´Â ³Ñ°Ü¹ÞÀº Á¤º¸µé Áß ÇÊ¿äÇÑ Á¤º¸ÀÎ Á¤º¸ B¸¦ ÀÌ¿ëÇÏ¿© ÀÛ¾÷À» ¼öÇàÇÑ µÚ, ´ÙÀ½¹ø CGIÀÎ CGI C¿¡ ÇÊ¿äÇÑ Á¤º¸ A¸¦ HTML ¹®¼­³»¿¡ Æ÷ÇÔ½ÃÄÑ ³Ñ°ÜÁØ´Ù. ÀÌ °úÁ¤¿¡¼­ CGI A´Â ºñ·Ï CGI B¿¡´Â ÇÊ¿äÇÏÁö ¾ÊÁö¸¸ CGI C¿¡ ÇÊ¿äÇÑ Á¤º¸ A¸¦ »ý¼º½ÃÄÑ CGI B·Î ³Ñ°ÜÁÖ°í, CGI B´Â ÀÌ Á¤º¸ A¸¦ ´Ü¼øÈ÷ CGI CÂÊÀ¸·Î ³Ñ°Ü¸¸ ÁÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌÈÄ Å¬¶óÀÌ¾ðÆ®´Â Æû¹®ÀÇ Á¤º¸¿Í ÇÔ²² ÇÊ¿äÇÑ Á¤º¸ A¸¦ CGI CÂÊÀ¸·Î ³Ñ°ÜÁÖ°Ô µÈ´Ù.

¿©·¯ CGIµéÀ» ÀÌ¿ëÇÏ¿© ÀüüÀûÀÎ ÇϳªÀÇ ½Ã½ºÅÛÀ» ±¸ÃàÇÒ °æ¿ì, ´ÙÀ½°ú °°Àº µÎ°¡Áö ¹æ½Ä Áß Çϳª¸¦ ÀÌ¿ëÇÏ¿© ÀÛ¾÷ ÁøÇà°úÁ¤¿¡¼­ ÇÊ¿äÇÑ Á¤º¸¸¦ À¯ÁöÇÏ¿©¾ß ÇÑ´Ù.

1) °¢ CGIµéÀÌ ÇÊ¿ä·Î ÇÏ´Â Á¤º¸µéÀ» ¸ðµÎ ÃëÇÕÇÏ¿© Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö»çÀÌÀÇ Åë½Å¿¡ Ç×»ó Æ÷ÇÔ½ÃŲ´Ù.

2) Àüü ÀÛ¾÷ÁøÇà°úÁ¤ÀÇ »óŵµÇ¥¸¦ ÀÛ¼ºÇÑ µÚ, ¸ðµç °¡´ÉÇÑ °æ·Î¿¡ ÇÊ¿äÇÑ ÃÖ¼ÒÇÑÀÇ Á¤º¸µéÀ» °¢ CGIµéÀÌ »ý¼º½ÃŰ°Ô ÇÑ´Ù.

4.2 ÅëÇÕÀÎÅÍÆäÀ̽º ¸ðµ¨

¸¹Àº CGIµé·Î ±¸¼ºµÈ WWW ½Ã½ºÅÛÀÏ °æ¿ì, ÅëÇÕµÈ ÀÎÆÛÅ×À̽º¸¦ ÅëÇÏ¿© ÇϳªÀÇ CGI¸¦ µÎ¸é º¸´Ù Àϰü¼ºÀ» °¡Áö°í ½Ã½ºÅÛÀ» ±¸¼ºÇÒ ¼ö ÀÖ´Ù.

¿¹) BBS¿¡¼­ »ç¿ëÀÚ¸¦ »èÁ¦ÇϰíÀÚ ÇÒ ¶§ÀÇ URL

/cgi-bin/DeleteUser?ID=guest : CGI À̸§ÀÌ ¼öÇàÀÛ¾÷À» ÁöÁ¤ÇÑ´Ù.
/cgi-bin/BBS?Menu=User&Cmd=Delete&ID=guest : CGI´Â BBS Çϳª¸¸ µÎ°í ÀμöµéÀ» ÅëÇØ ¼öÇàÀÛ¾÷À» ÁöÁ¤ÇÑ´Ù.

¿©·¯ CGI¸¦ ÅëÇÕµÈ ÀÎÅÍÆäÀ̽º·Î ´ÙÀ½°ú °°ÀÌ ¸ðµ¨¸µÇÒ ¼ö ÀÖ´Ù.


±×¸² 9 : ÅëÇÕÀÎÅÍÆäÀ̽º ¸ðµ¨

°¢ ¸ðµâµéÀº ´ÙÀ½°ú °°´Ù.

4.3 µð¹ö±ë

CGI ÇÁ·Î±×·¥Àº ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î µð¹ö±ëÀ» ÇϱⰡ °ï¶õÇÏ¸ç ´ÙÀ½°ú °°Àº ¹æ¹ýµéÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

4.3.1 ÀÔ·Â

CGIÀÇ ÀÔ·ÂÀ» ½Ã¹Ä·¹À̼ÇÇϱâ À§Çؼ­´Â ¸ÕÀú ȯ°æº¯¼öµéÀ» ÀûÀýÇÏ°Ô ¼³Á¤ÇÑ µÚ, "GET"ÀÎ °æ¿ì´Â ÀμöµéÀ» "QUERY_STRING"¿¡ ÁöÁ¤ÇÑ µÚ ÇØ´ç CGI¸¦ ½ÇÇà½ÃŰ¸é µÇ¸ç, "POST"ÀÎ °æ¿ì´Â ÀμöµéÀÇ Å©±â¸¦ "CONTENT_LENGTH"¿¡ ÁöÁ¤Çϰí ÇØ´ç CGI¸¦ ½ÇÇà½ÃŲ ´ÙÀ½ ÀÔ·ÂµÉ ÀμöµéÀ» ÁöÁ¤µÈ Å©±â±îÁö ŸÀÌÇÎÇÏ¸é µÈ´Ù. ÅëÇÕÀÎÅÍÆäÀ̽º ¸ðµ¨ÀÇ °æ¿ì, ¿ÜºÎÇÁ·Î±×·¥µéÀº ¸í·É¾î¿¡ Àμö(*argv[])¸¦ Æ÷ÇÔÇÏ¿© ½ÇÇà½ÃŰ¸é µÈ´Ù.

4.3.2 Ãâ·Â

ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥ÀÇ »óŸ¦ ÃßÀûÇϱâ À§ÇØ "stderr"·Î Áß°£°á°ú°ªµéÀ» Ãâ·Â½ÃŲ´Ù. ÇÏÁö¸¸ WWW ½Ã½ºÅÛ¿¡¼­ ¼­¹ö´Â CGIÀÇ "stderr"¿Í "stdout"·Î °¡´Â Ãâ·ÂµéÀ» ¸ðµÎ °¡·Îæ´Ù. µû¶ó¼­ Áß°£°á°ú°ªµéÀ» Ãâ·ÂÇϱâ À§Çؼ­´Â HTML ¹®¼­¸¦ »ý¼º½Ãų¶§ ÁÖ¼®¹®¾È¿¡ ³ÖÀ¸¸é µÈ´Ù. ±×¸®°í ÁøÇà°úÁ¤À» °Ë»çÇϱâ À§Çؼ­´Â ¼­¹ö¿¡¼­ »ý¼ºÇÏ´Â log È­ÀϵéÀ» ºÐ¼®ÇÏ¸é µÈ´Ù. ¶ÇÇÑ HTTP ÀÀ´äÇì´õºÎºÐÀ» °Ë»çÇϱâ À§Çؼ­´Â 80¹ø Æ÷Æ®·Î telnetÀ» ¿­¾î HTTP¸¦ ½Ã¹Ä·¹À̼ÇÇÏ¸é µÈ´Ù. HTTP¸¦ ½Ã¹Ä·¹À̼ÇÇÑ ¿¹´Â ´ÙÀ½°ú °°´Ù.

[cezanne-kyung] telnet cezanne.daum.co.kr 80
Trying 203.248.135.66...
Connected to cezanne.daum.co.kr.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.0 200 Document follows
Date: Tue, 12 Mar 1996 23:07:41 GMT
Server: NCSA/1.5
Content-type: text/html
Last-modified: Wed, 21 Feb 1996 15:30:08 GMT
Content-length: 1881

<HTML>
<HEAD>
<TITLE>DAUM ON-LINE</TITLE>
....

5. ÄíŰ(Cookie)

ÄíŰ´Â CGI¿Í °°Àº ¼­¹öÂÊ ÀÎÅÍÆäÀ̽º¿¡¼­ Ŭ¶óÀÌ¾ðÆ®¿¡ »óÅÂÁ¤º¸¸¦ ÀúÀåÇϰí ÃßÃâÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛÀÌ´Ù. Äí۸¦ ÀÌ¿ëÇÏ¸é »óÅÂÁ¤º¸¸¦ È¿À²ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ¾î, WWW¿¡ ±â¹ÝÀ» µÐ Ŭ¶óÀ̾ðÆ®/¼­¹ö ½Ã½ºÅÛÀ» ´õ¿í È®Àå½Ãų ¼ö ÀÖ´Ù.

5.1 ÀÛµ¿¿ø¸®

¼­¹öÂÊ¿¡¼­ °á°ú¹®¼­¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¹ÝȯÇÒ ¶§, Ŭ¶óÀÌ¾ðÆ®°¡ ÀúÀåÇÒ ÄíŰ(»óÅÂÁ¤º¸)¸¦ °°ÀÌ º¸³¾ ¼ö ÀÖ´Ù. ÀÌÈÄ¿¡ Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹öÂÊ¿¡ ¹®¼­¸¦ ¿äûÇÒ ¶§, ÇöÀç Ŭ¶óÀÌ¾ðÆ®¿¡ ÀúÀåµÈ ÄíŰ Áß Á¶°ÇÀÌ ÀÏÄ¡ÇÏ´Â Äí۵éÀ» ´Ù½Ã ¼­¹öÂÊÀ¸·Î ³Ñ°Ü ÁØ´Ù.
ÀÌ °úÁ¤À» ±×¸²À¸·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.


±×¸² 10 : ÄíŰÀÇ ÀÛµ¿¿ø¸®

5.2 ÀÀ¿ëºÐ¾ß

´ÙÀ½°ú °°Àº ºÐ¾ß¿¡ ÀÀ¿ëÀÌ °¡´ÉÇÏ´Ù.

5.3 ¹®¹ý

Ŭ¶óÀÌ¾ðÆ®¿¡ Äí۸¦ ÀúÀåÇϱâ À§Çؼ­´Â HTTP ÀÀ´äÇì´õ¿¡ ´ÙÀ½°ú °°ÀÌ µé¾î°¡°Ô µÈ´Ù.

Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure

ÀÏ´Ü Äí۰¡ ÀúÀåµÇ¸é, ÀÌÈÄ¿¡ Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹öÂÊ¿¡ ¹®¼­¸¦ ¿äûÇÒ ¶§ µµ¸ÞÀΰú °æ·Î°¡ À¯È¿ÇÑ Äí۵éÀ» HTTP ¿äûÇì´õ(HTTP request header)¿¡ Æ÷ÇÔ½ÃÄÑ ¼­¹öÂÊ¿¡ ³Ñ°ÜÁÖ°Ô µÈ´Ù. HTTP ¿äûÇì´õ¿¡ ´ÙÀ½°ú °°ÀÌ µé¾î°¡°Ô µÈ´Ù.

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ...

Ŭ¶óÀÌ¾ðÆ®´Â Äí۸¦ ¹«ÇÑÁ¤À¸·Î ÀúÀåÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, Á¤ÇØÁø °¹¼ö¸¸À» ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÃÖ¼ÒÇÑÀ¸·Î ÀúÀåµÇ´Â ÃÖ´ë °¹¼ö´Â ´ÙÀ½°ú °°´Ù.

µû¶ó¼­ ÁöÁ¤µÈ °¹¼ö¸¦ ÃʰúÇϸé ÀÌÀü¿¡ ÀúÀåµÈ ÄíŰ´Â »õ·Î¿î Äí۰¡ µ¤¾î¾²°Ô µÇ¸ç, À̶§ ÃÖ±Ù¿¡ °¡Àå Àû°Ô »ç¿ëµÈ ¼ø¼­¿¡ µû¶ó Áö¿öÁö°Ô µÈ´Ù - LRU(Least Recently Used) ¹æ½Ä. À¯ÀÇÇÒ Á¡µéÀº ´ÙÀ½°ú °°´Ù. ¿¹Á¦¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.

¼­¹ö°¡ ¹®¼­ ¹Ýȯ½Ã
Set-Cookie: USER=guest; path=/
Ŭ¶óÀÌ¾ðÆ®°¡ "/" °æ·ÎÀÇ ¹®¼­ ¿äû½Ã
Cookie: USER=guest;
¼­¹ö°¡ ¹®¼­ ¹Ýȯ½Ã
Set-Cookie: USER=guest2; path=/CUG
Ŭ¶óÀÌ¾ðÆ®°¡ "/CUG" °æ·ÎÀÇ ¹®¼­ ¿äû½Ã
Cookie: USER=guest2; USER=guest

C ¿¹Á¦ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÈ´Ù.

5.4 Æò°¡

4.1¿¡¼­ »óÅÂÁ¤º¸À¯Áö¸¦ À§ÇÑ CGI¸¦ ÄíŰ·Î ¹Ù²Ù¾î ±¸ÇöÇØ º¸¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ µÈ´Ù.


±×¸² 11 : ÄíŰÀÇ ÁøÇà°úÁ¤

À§ÀÇ ±×¸²¿¡¼­ CGI A´Â CGI B, CGI C¿¡ ÇÊ¿äÇÑ ÄíŰ B, Äí±â A¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ³Ñ°ÜÁØ´Ù. ±×´ÙÀ½ Ŭ¶óÀÌ¾ðÆ®°¡ CGI B¸¦ È£ÃâÇÒ ¶§ CGI BÀÇ °æ·Î¿¡ À¯È¿ÇÑ ÄíŰ B¸¦ ³Ñ°ÜÁØ´Ù. ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®°¡ CGI C¸¦ È£ÃâÇÒ ¶§ CGI CÀÇ °æ·Î¿¡ À¯È¿ÇÑ ÄíŰ A¸¦ ³Ñ°ÜÁØ´Ù. ¿©±â¼­ ±âÁ¸ÀÇ ½Ã½ºÅÛ°ú °¡Àå Å« Â÷ÀÌÁ¡Àº, Ŭ¶óÀÌ¾ðÆ®°¡ Äí۸¦ ÀúÀåÇϰí Àֱ⿡ CGI B°¡ CGI C¿¡ ÇÊ¿äÇÑ ÄíŰ A¸¦ À¯ÁöÇϱâÀ§ÇÑ ¹öÆÛ¿ªÇÒÀ» ÇÒ Çʿ䰡 ¾ø´Ù´Â Á¡ÀÌ´Ù.

ÄíŰ´Â À̿Ͱ°ÀÌ »óÅÂÁ¤º¸À¯Áö¸¦ ´õ¿í ¸Å²ô·´°Ô ±¸ÇöÇÒ ¼ö ÀÖÀ¸³ª, Äí۸¦ Çѹø¿¡ Çϳª¾¿¹Û¿¡ ÁöÁ¤ÇÒ ¼ö ¾øÀ¸¸ç, ÄíŰÀÇ ÀúÀå°¹¼ö¿¡ Á¦ÇÑÀ» °®´Â ´ÜÁ¡À» ¾È°í ÀÖ´Ù.

6. °á·Ð

¾Õ¿¡¼­ CGIÀÇ ÀÛµ¿¿ø¸®¿Í »õ·Î¿î ¹æ½Äµé, »óÅ À¯Áö¸¦ À§ÇÑ ¹æ¹ýµéÀ» ¼³¸íÇÏ¿´´Ù. WWW ½Ã½ºÅÛÀº Æí¸®ÇÔ°ú È®À强À¸·Î ÀÎÇÏ¿© ¾ÕÀ¸·Îµµ ²ÙÁØÈ÷ º¸±ÞÀÌ Áõ°¡µÉ °ÍÀ¸·Î ÃßÃøµÈ´Ù. ±×·¯³ª WWW ½Ã½ºÅÛÀº »óÅ À¯Áö°¡ ¾î·Æ´Ù´Â ´ÜÁ¡À» ¾È°í ÀÖ´Ù. ÄíŰ ¹æ½ÄÀÇ µµÀÔÀ¸·Î ÀÎÇÏ¿© »óÅ À¯Áö°¡ ¿ëÀÌÇØÁ³À¸³ª, ¾ÆÁ÷ ÄíŰÀÇ ±â´ÉÀº Á¦¾àÁ¡ÀÌ ¸¹´Ù. µû¶ó¼­ ÇâÈÄ ÀÌÀÇ º¸¿ÏÀÌ ¿ä±¸µÈ´Ù.

Âü°í¹®Çå(References)

[ÃÖ 95]
ÃÖÀ±¼ö, "¼­¹ö ÀÎÅÍÆäÀ̽º", °¡ÀÚ! À¥ÀÇ ¼¼°è·Î - °­ÀÇÀÚ·áÁý (Á¦2ȸ WWW-Workshop), WWW-KR, 1995.
[NCSA 95]
"The Common Gateway Interface", NCSA, 1995.
URL: http://hoohoo.ncsa.uiuc.edu/cgi/
[Net.Genesis 95]
Net.Genesis, Hall, D., Build a Web Site, PRIMA, 1995.
[Netscape 95a]
"An Exploration of Dynamic Documents", Netscape, 1995.
URL: http://home.mcom.com/assist/net_sites/pushpull.html
[Netscape 95b]
"Persistent Client State HTTP Cookies", Netscape, 1995.
URL: http://home.netscape.com/newsref/std/cookie_spec.html