CGI ȯ°æº¯¼ö¶õ?
º¯¼ö¶õ º¯°æÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸ ȤÀº ³ªÁß¿¡ ÇÁ·Î±×·¥³»¿¡¼ ´Ù½Ã ÂüÁ¶Çϱ⸦ ¿øÇÏ´Â µ¥ÀÌŸ¸¦ ÀúÀåÇϱâ À§ÇÑ Àå¼Ò¶ó°í ¹è¿ü´Ù. ȯ°æº¯¼öµµ ÇÑ °¡Áö¸¦ Ư¡À» Á¦¿ÜÇÏ¸é ¸¶Âù°¡ÁöÀÌ´Ù. ±× ÇѰ¡Áö Ư¡Àº ÀÏ¹Ý º¯¼ö°¡ ¾î´À ƯÁ¤ ÇÁ·Î¼¼½º³»¿¡¼¸¸ ¾²ÀÌ´Â °ÍÀ̶ó¸é, ȯ°æº¯¼ö´Â °°Àº ÇÁ·Î±×·¥À¸·Î ÀÛµ¿ÇÏ´Â ¸ðµç ÇÁ·Î¼¼½º¿¡ ¶È°°ÀÌ Àû¿ëµÇ´Â º¯¼ö¶ó´Â Á¡ÀÌ´Ù. µµ½ºÀÇ Ä¿¸Çµå¶óÀο¡¼ set ¸í·ÉÀ» Á־¶ó. ¶Ç´Â Unix Ä¿¸Çµå ¶óÀο¡¼ env ¸í·ÉÀ» Á־¶ó. ¹«¾ùÀÌ ³ª¿À´Â°¡? ¾Æ¸¶ ±× ½©³»¿¡¼ ÀÛµ¿ÇÏ´Â ¸ðµç ÇÁ·Î¼¼½º¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â °ø¿ëÀÇ º¯¼öÀ̸§°ú ±× °ªµéÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù. ±×°ÍÀÌ ¹Ù·Î ȯ°æº¯¼ö(Environment Variables)ÀÌ´Ù.
CGI ȯ°æº¯¼ö´Â CGI ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¶§ À¥¼¹ö·ÎºÎÅÍ ¾ò¾î¼ »ç¿ëÇÒ ¼ö ÀÖ´Â °ø¿ë º¯¼öµéÀÌ´Ù. ¿¹¸¦ µé¾î, ÀÚ½ÅÀÇ À¥ÆäÀÌÁö°¡ ¾î¶² ºê¶ó¿ìÀú¿¡¼ ÀÛµ¿µÇ´Â°¡? ÀÚ½ÅÀÇ À¥ÆäÀÌÁö¸¦ ¹æ¹®ÇÑ »ç¶÷µé¿¡ ´ëÇÑ ¾î¶² Á¤º¸¸¦ ¾Ë¾Æ ³¾ ¼ö´Â ¾øÀ»±î? ÀüºÎ´Â ¾Æ´ÏÁö¸¸ »ó´çÇÑ Á¤º¸¸¦ ÀÌ CGI ȯ°æº¯¼öµéÀ» ÅëÇØ¼ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
ÆÞ·Î CGI ÇÁ·Î±×·¥À» ÀÛµ¿½ÃŰ¸é ÆÞÀº ENV¶ó´Â À̸§ÀÇ hash¹è¿ (associative array : ¸ð¸£´õ¶óµµ ¿ì¼± ³Ñ¾î°¡ÀÚ) À» ÅëÇØ¼ À¯È¿ÇÑ ¸ðµç CGIȯ°æº¯¼ö¸¦ ³Ñ°ÜÁØ´Ù. ±×·¯¹Ç·Î ÇÁ·Î±×·¥³»¿¡¼´Â ±× °ªÀ» ÀÐ¾î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À§¿¡ µç ¿¹¿¡¼ ó·³ ÀÚ½ÅÀÇ À¥ÆäÀÌÁö¸¦ È£ÃâÇÏ´Â »ç¿ëÀÚÀÇ ºê¶ó¿ìÀú¸¦ ¾Ë°í ½Í´Ù¸é $ENV{'HTTP_USER_AGENT'} ¶ó´Â hash¹è¿¿ä¼Ò¸¦ ÀоîÁÖ¸é µÈ´Ù.
3-2. CGI ȯ°æº¯¼ö¸¦ ¾Ë¾Æº¸´Â °£´ÜÇÑ ¿¹Á¦
ȯ°æº¯¼ö¸¦ ¾Ë¾Æº¸´Â ¿¹Á¦·Î¼ ´ÙÀ½ÀÇ °£´ÜÇÑ cgi¸¦ ÀÛ¼ºÇÏ¿© ºê¶ó¿ìÀú¿¡¼ ºÒ·¯ º¸µµ·Ï ÇÑ´Ù.
#!/usr/bin/perl
# HTMLÃú·ÂÀ» À§Çؼ´Â Àû´çÇÑ Mime-Type Header¸¦ °Ç³×ÁÖ¾î¾ß ÇÑ´Ù.
print "Content-Type: text/htmlnn";
# ¾Æ·¡ << °¡ µé¾î°¡´Â ÇÁ¸°Æ®¹®Àº ±× µÞ¹®ÀÚ¿(Áï ¿©±â¼
# END_OF_UPPER)ÀÌ ÀÖ´Â ÁÙ±îÁö Ãâ·ÂÇÑ´Ù°í ÀÌ¹Ì ¹è¿ü´Ù.
print <<END_OF_UPPER;
<HTML>
<HEAD><TITLE>Environment Variables Table</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER><H1>ȯ°æ º¯¼ö Å×À̺í</H1>
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1 bgcolor="#E0E3D7">
<tr><th>º¯¼ö¸í</th><th>°ª</th></tr>
END_OF_UPPER
# Á¶½ÉÇÒ Á¡Àº À§ÀÇ END_OF_UPPER °¡ ÁÙ ¸Ç¾Õ¿¡ ºÙ¾îÀÖ¾î¾ß Çϰí,
# µÚ¿¡µµ °ø¹éÀÌ ¾ø¾î¾ß ÇÑ´Ù. ¶ÇÇÑ UNIX°èÁ¤¿¡¼ ¹ÙÀ̳ʸ® ¾÷·Îµå½Ã
# ÀÌ ºÎºÐ¶§¹®¿¡ ¿¡·¯°¡ ³ª¹Ç·Î ¹Ýµå½Ã ¾Æ½ºÅ°¸ðµå·Î ¾÷·ÎµåÇÑ´Ù.
# ¾Æ·¡ ¼øÈ¯¹®(¹Ýº¹¹®)Àº ¾ÆÁ÷ ¹è¿ìÁö ¾ÊÀº °ÍÀÌ´Ù. ¿ì¼± ±×·¯·Á´Ï
# ÇÏ°í ³Ñ¾î°£´Ù.
# ´Ù¸¸ À̰Ϳ¡ ÀÇÇØ °¢ ȯ°æº¯¼öµéÀÌ Â÷·Ê·Î Ãâ·ÂµÈ´Ù´Â Á¤µµ·Î ¾Ë¾ÆµÎÀÚ.
foreach $value (sort keys (%ENV)) {
print "<tr><td bgcolor="#ffb037">" .
"$value </td><td> $ENV{$value} </td></tr>n";
}
print <<END_OF_FOOTER;
</TABLE>
</CENTER>
</BODY></HTML>
END_OF_FOOTER
# ÀÌ END_OF_FOOTER µµ ¾Õ. µÚ·Î ºó Ä( ÅÇ. ½ºÆäÀ̽º)ÀÌ ¾ø¾î¾ß ÇÑ´Ù
# ÀÌÁ¦ ÇÁ·Î±×·¥À» ºüÁ® ³ª°£´Ù
exit;
¿ì¼± ¾Ë°íÀÚ ÇÏ´Â °ÍÀÌ CGIȯ°æº¯¼öÀ̹ǷΠÀ§ÀÇ ½ºÅ©¸³Æ®¿¡¼ Àß ¸ð¸£´Â »çÇ×Àº ±×´ë·Î µÐ ä ÀÛ¼ºÇؼ CGI¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛÀ¸·Î ¾÷·ÎµåÇÏ¿© ºê¶ó¿ìÀú·Î ÇØ´ç ÆÄÀÏÀÇ URLÀ» ºÒ·¯º¸µµ·Ï ÇÑ´Ù. CGIÀÇ »ç¿ë ¹æ¹ýÀº Áö³ ÁÖ¿¡ ÀÌ¹Ì '°£´ÜÇÑ CGI'¸¦ ÀÛ¼ºÇØ º¸¾ÒÀ¸¹Ç·Î ÆÄ¾ÇÀÌ µÇ¾úÀ¸¸®¶ó º¸Áö¸¸ ¸¸¾à ±×·¸Áö ¾Ê´Ù¸é ¹Ýµå½Ã Áö³ ÁÖ °ÀǸ¦ ´Ù½Ã Âü°íÇϱ⠹ٶõ´Ù. À§ÀÇ ¼Ò½º¿¡ º¸¸é $ENV{$value} ¶ó´Â ºÎºÐÀÌ ³ª¿À´Âµ¥ À̰ÍÀÌ È¯°æº¯¼ö°ª¿¡ ÇØ´çÇÏ´Â ºÎºÐÀÌ´Ù. Á¦´ë·Î ÀÛ¼ºµÇ¾ú´Ù¸é ºê¶ó¿ìÀú¿¡ ¾Æ·¡¿Í À¯»çÇÑ Å×À̺íÀÌ ¶ã °ÍÀÌ´Ù.
3-3. CGI ȯ°æ º¯¼ö ¿¹.
º¯¼ö¸í °ª
DOCUMENT_ROOT /usr/local/etc/httpd/htdocs
GATEWAY_INTERFACE CGI/1.1
HTTP_ACCEPT image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
HTTP_ACCEPT_CHARSET iso-8859-1,*,utf-8
HTTP_ACCEPT_LANGUAGE ko,ja
HTTP_CONNECTION Keep-Alive
HTTP_HOST hitel.net
HTTP_USER_AGENT Mozilla/4.03 [en] (Win95; I)
PATH /opt/SUNWsymon/bin:/sbin:/usr/sbin:/usr/bin:/usr/ucb:/usr/ccs/bin
QUERY_STRING name=cgKim
REMOTE_ADDR 210.114.3.164
REMOTE_HOST 210.114.3.164
REMOTE_PORT 1083
REQUEST_METHOD GET
REQUEST_URI /~cgklyk/environ.cgi
SCRIPT_FILENAME /home1/GHOSTWHITE/cgklyk/public_html/environ.cgi
SCRIPT_NAME /~cgklyk/environ.cgi
SERVER_ADMIN webmaster@hitel.net
SERVER_NAME www.hitel.net
SERVER_PORT 80
SERVER_PROTOCOL HTTP/1.0
SERVER_SOFTWARE Apache/1.2.1
TZ ROK
ÀÌ È¯°æº¯¼ö´Â ÀúÀÚÀÇ À¥°èÁ¤Áß ÇϳªÀÎ ÇÏÀÌÅÚ¿¡¼
http://hitel.net/~cgklyk/environ.cgi?name=cgkim À̶ó´Â URL·Î ºÒ·¯³½ °ÍÀÌ´Ù.
À§¿¡ º¸´Ù½ÃÇÇ »ó´çÈ÷ À¯¿ëÇÑ Á¤º¸µéÀÌ ´ã°ÜÁ® ÀÖ´Ù. HTTP_USER_AGENT ¶ó´Â ȯ°æº¯¼ö¿¡´Â À§ÀÇ À¥ÆäÀÌÁö¸¦ ºÒ·¯³½ »ç¿ëÀÚÀÇ ºê¶ó¿ìÀúÀÇ Á¾·ù¿Í ¹öÀü¿¡ ´ëÇÑ Á¤º¸°¡ ´ã°Ü ÀÖÀ¸¸ç, REMOTE_HOST ¿¡ ÀÇÇØ »ç¿ëÀÚÀÇ ¼¹öÀÇ µµ¸ÞÀÎÀ̳ª IP Address¸¦ ¾Ë ¼ö ÀÖ´Ù.
REQUEST_METHOD ³ª CONTENT_TYPE, QUERY_STRING µîÀÇ È¯°æº¯¼ö´Â CGI ÇÁ·Î±×·¥¿¡¼ ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëÇÏ´Â º¯¼öµéÀÌ´Ù. http://hitel.net/~cgklyk/environ.cgi?name=cgkim À̶ó´Â URL¿¡¼ ÆÄÀÏ¸í ´ÙÀ½¿¡ ¿À´Â name=cgkim ÀÌ QUERY_STRING À̶ó´Â ȯ°æº¯¼ö¿¡ ÀúÀåµÇ¾î ÀÖ´Ù´Â °Íµµ ÁÖ¸ñÇØ¾ß ÇÒ »çÇ×ÀÌ´Ù. Áï, ½ºÅ©¸³Æ®ÀÇ ÆÄÀϸí? µÚ¿¡ ºÙ´Â ÆÄ¶ó¹ÌÅͰ¡ QUERY_STRING À̶ó´Â ȯ°æº¯¼ö¸¦ ÅëÇØ¼ CGIÇÁ·Î±×·¥¿¡ Àü´ÞµÈ´Ù´Â °Í°ú ÀÌ·± Àü´ÞÀ϶§ÀÇ REQUEST_METHOD´Â get À̶ó´Â °ÍÀº ³ªÁßÀ» À§ÇØ ¾Ë¾Æ µÎ¾î¾ß ÇÒ »çÇ×ÀÌ´Ù.
À§ÀÇ ¿¹Á¦¿¡¼ ´ë·« »ìÆìº» ¹Ù¿Í °°ÀÌ ¾î¶² ȯ°æº¯¼öÀÇ °ªÀ» ¾Ë·Á¸é $ENV{'ȯ°æº¯¼ö¸í'}ÀÇ º¯¼öÇüÅ·ΠÀоîÁÖ¸é µÈ´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚÀÇ ¼¹öÀÇ IP Address¸¦ ¾Ë·Á¸é $ENV{'REMOTE_ADDR'} ¸¦ CGI½ºÅ©¸³Æ®³»¿¡¼ ÀоîÁÖ¸é µÈ´Ù.
print $ENV{'REMOTE_ADDR'};# »ç¿ëÀÚ IP Address Ãâ·Â $ip_addr = $ENV{'REMOTE_ADDR'};# »ç¿ëÀÚ IP Address¸¦ ÀÏ¹Ý º¯¼ö ip_addr ¿¡ ÀúÀå
3-4. »ç¿ëÀÚÀÇ ºê¶ó¿ìÀú¿Í IPÁÖ¼Ò¸¦ ¾Ë¾Æ³»´Â ¿¹Á¦
#!/usr/bin/perl
# »ç¿ëÀÚ ¼¹ö IP Address¿Í »ç¿ë ºê¶ó¿ìÀú Ãâ·Â ·çƾ
print "Content-Type: text/htmlnn";
print <<END_OF_HTML;
<HTML>
<BODY>
<H1>ȯ¿µ Àλç!</H1>
¾È³çÇϼ¼¿ä. Á¦ ȨÆäÀÌÁö¸¦ ¹æ¹®ÇØ Áּż °¨»çÇÕ´Ï´Ù.<p>
´ç½ÅÀÌ »ç¿ëÇϽô ºê¶ó¿ìÀú´Â $ENV{'HTTP_USER_AGENT'} À̸ç<br>
´ç½ÅÀÇ IP Adress ´Â $ENV{'REMOTE_ADDR'} ÀÔ´Ï´Ù.
</BODY></HTML>
END_OF_HTML
# End
À§ÀÇ °£´ÜÇÑ ¿¹Á¦´Â HTMLÇüŸ¦ ¶í ÆÞ·Î¼ Áö³ ÁÖ¿¡ ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ print <<END_OF_HTML °ú END_OF_HTML »çÀÌÀÇ ¸ðµç ÁÙÀ» ºê¶ó¿ìÀú¿¡ Ãâ·Â ½ÃÄÑÁØ´Ù. HTMLÃâ·ÂÁß¿¡ ¾²ÀΠȯ°æº¯¼öµéÀÌ ºê¶ó¿ìÀú¿¡ Ãâ·ÂµÇ´Â °ÍÀ» È®ÀÎÇØ º¸±â À§ÇØ ÀÌ ¿¹Á¦µµ ½ÃµµÇØ º¸±æ ¹Ù¶õ´Ù.
3-5. À¯¿ëÇÑ È¯°æº¯¼öµé
Âü°í»ï¾Æ ¾Æ·¡¿¡ »ç¿ëÇÒ À¯¿ëÇÑ È¯°æº¯¼ö¿Í ±× ¾²ÀÓÀ» Àû¾îº»´Ù.
3-5-1. ¼¹öÀÇ HTTPÁ¤º¸¸¦ ³ªÅ¸³»´Â ȯ°æº¯¼öµé
SERVER_SOFTWARE À¥¼¹öÀÇ À̸§°ú ¹öÀüÀ» ³ªÅ¸³½´Ù. Çü½Ä: À̸§/¹öÀü
SERVER_NAME ¼¹öÀÇ È£½ºÆ® À̸§°ú DNS alias ȤÀº IP address
GATEWAY_INTERFACE ¼¹öÀÇ CGI ŸÀÔ°ú °³Á¤·¹º§À» ³ªÅ¸³½´Ù. Çü½Ä: CGI/revision
3-5-2. »ç¿ëÀÚÀÇ ¿äû¿¡ µû¸¥ ȯ°æº¯¼öµé
SERVER_PROTOCOL »ç¿ëÀÚ ¿äûÀÌ »ç¿ëÇÏ´Â ÇÁ·ÎÅäÄÝ. º¸Åë HTTP 1.0 ȤÀº HTTP 1.1
SERVER_PORT »ç¿ëÀÚ ¿äûÀ» º¸³»´Â Æ÷Æ® ¹øÈ£.
REQUEST_METHOD HTML ÆûÀÌ »ç¿ëÇÏ´Â METHOD º¸Åë GETÀ̳ª POST
SCRIPT_NAME ÇöÀç ½ÇÇàÀÌ ¿äûµÈ ½ºÅ©¸³Æ® ¸í
QUERY_STRING GET ¹æ½Ä¿¡¼ URLÀÇ µÚ¿¡ ³ª¿À´Â Á¤º¸¸¦ ÀúÀåÇϰųª ÆûÀÔ·Â
Á¤º¸¸¦ ÀúÀåÇÑ´Ù.(POST¹æ½ÄÀº Á¦¿Ü)
REMOTE_ADDR »ç¿ëÀÚÀÇ IPÁÖ¼Ò
REMOTE_HOST »ç¿ëÀÚÀÇ È£½ºÆ® À̸§
REMOTE_USER ¼¹ö°¡ »ç¿ëÀÚ ÀÎÁõÀ» Áö¿øÇϰí, ½ºÅ©¸³Æ®°¡ ±× È®ÀÎÀ» ¿äûÇÑ´Ù¸é,
À̰ÍÀÌ È®ÀÎµÈ »ç¿ëÀÚÀ̸§ÀÌ µÈ´Ù.
CONTENT_LENGTH POST¹æ½ÄÀÏ °æ¿ì Ŭ¶óÀÌ¾ðÆ®¿¡¼ ³Ñ°Ü Áö´Â »ç¿ëÀÚ ÀÔ·ÂÀÇ ±æÀ̸¦
Ç¥½ÃÇÑ´Ù.
CONTENT_TYPE POST¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© °Ë»ö¹®¿¡ Á¤º¸°¡ µé¾îÀÖ´Â °æ¿ì¿¡ ±× Á¤º¸ÀÇ
ŸÀÔÀ» ³ªÅ¸³½´Ù.
HTTP_USER_AGENT Ŭ¶óÀ̾ðÆ®ÀÇ »ç¿ë ÇÁ·Î±×·¥(À¥ºê¶ó¿ìÀú)À» Ç¥½ÃÇÑ´Ù.
|
|