CGI ÇÁ·Î±×·¡¹Ö ±è½Â¿µ (nobreak@cgiserver.net)
1ȸ : Äõ¸® ½ºÆ®¸µ µðÄÚ´õÀÇ Á¦ÀÛ 2ȸ : CGI Å×Å©´Ð 3ȸ : ÀÎÆ®¶ó³ÝÀ» À§ÇÑ À¥ º¸µå Á¦ÀÛ
Áö³È£¿¡¼´Â ÄíŰ, SSIµîÀÇ CGI ±â¹ýµéÀ» ¾Ë¾Æº¸¾Ò´Ù. CGIÀÇ µ¶Æ¯ÇÑ µ¿ÀÛ ¹æ½Ä ¶§¹®¿¡ ´Þ¶ó Á®¾ßÇÏ´Â ÀÔ¡¤Ãâ·Â ±â¹ýÀ» ¤¾î º¸¾ÒÀ¸¹Ç·Î, ¾î´À Á¤µµ °³³äÀÌ Á¤¸³µÆÀ¸¸®¶ó ÆÇ´ÜµÈ´Ù. »óÅÂÁ¤º¸¸¦ À¯ÁöÇÏÁö ¸øÇÏ´Â Á¡°ú ÀÔ¡¤Ãâ·Â ¹æ½ÄÀÇ Â÷À̸¦ Á¦¿ÜÇϸé ÀϹÝÀûÀÎ ±×°Í°ú º° Â÷À̰¡ ¾øÀ¸¹Ç·Î À̹ø È£¿¡¼´Â À¥º¸µå¶ó´Â CGI¸¦ ¼³°èÇϸç, ¸î¸î ±â±³¸¦ Àû¿ëÇÏ¿© º¸¸ç, ÀÌ·¯ÇÑ ·ùÀÇ ÇÁ·Î±×·¥À» Á¦ÀÛÇÏ¸ç °Þ´Â ¹®Á¦Á¡À» »ìÆìº¸ÀÚ. ÀüüÀûÀ¸·Î À¥º¸µåÀÇ ¿Ü°üÀº ¸ñ·Ï(list), Ãß°¡, »èÁ¦, °ü¸® ¸ðµâÀ» °®Ãß°í ÀÖ¾î¾ß ÇϰڴÙ. ÅëÇÕÀÎÅÍÆäÀ̽º·Î ±¸¼ºÇϸç, °¢ ¸ðµâÀº 'mode'¶ó´Â Äõ¸®·Î ºÐ¸®Çϰí, ÇϳªÀÇ CGI·Î½á ´Ù¼öÀÇ DB¸¦ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ¸ç ¸ðµâ°£ÀÇ ÀÎÀÚ Àü´ÞÀº °ú¿ùÈ£¿¡¼ ¼³¸íÇÑ ISINDEX ¹æ½ÄÀ» ÃëÇϵµ·Ï ÇÏÀÚ.
µ¥ÀÌÅͺ£À̽º ÀÌ·¯ÇÑ ·ùÀÇ ÇÁ·Î±×·¥ Á¦ÀÛ¿¡ ÀÖ¾î ÇÙ½ÉÀº µ¥ÀÌÅͺ£À̽º(ÀÌÇÏ DB)ÀÇ ¼±Åà ¶Ç´Â ±¸ÇöÀ̶ó »ý°¢µÇ´Âµ¥, ´ÙÀ½°ú °°ÀÌ Å©°Ô 3°¡Áö ¹æ½ÄÀ¸·Î ³ª´ ¼ö ÀÖ°Ú´Ù.
ÀϹÝÀûÀ¸·Î ¼ÒÇÁÆ®¿þ¾î°¡ ¾ÈÁ¤È ´Ü°è¿¡ Á¢¾îµå´Âµ¥´Â ¸î ¹øÀÇ ¹öÀü¾÷ ÀÛ¾÷ÀÌ µ¿¹ÝµÇ´Âµ¥, ÀÚü ¼³°èµÈ DBÀÇ ±¸¼º¿¡ ¹®Á¦°¡ ÁöÀûµÈ´Ù¸é, ±âÁ¸ ÀÚ·áÀÇ ¾ÈÁ¤¼ºÀ» º¸Àå¹Þ±â°¡ Èûµé´Ù. µû¶ó¼ °³¹ßÀÚµéÀº ù°¿Í µÑ°ÀÇ ¹æ¹ýó·³ ¾ÈÁ¤¼ºÀÌ ¾î´ÀÁ¤µµ º¸ÀåµÈ DB¸¦ µµÀÔÇÏ°Ô µÈ´Ù. ÀÌ´Â ÀÚ·áÀÇ È£È¯¼º, ½Å·Ú¼º, µ¶¸³¼ºÀÌ Á¦°øµÇ¹Ç·Î ¼ÒÇÁÆ®¿þ¾îÀÇ ¹öÀü¾÷À̳ª ±¸¼ºÀÇ º¯È¯ µî¿¡µµ ½±°Ô ´ëó°¡ °¡´ÉÇÏ¿© ¼±È£µÇ´Â ¹æ½ÄÀÌ´Ù. ±×·¯³ª ÀڷᱸÁ¶°¡ µ¶Æ¯Çϰųª, °Ë»ö¼Óµµ Çâ»ó µîÀÇ ÀÌÀ¯·Î DB ¿£Áø ÀÚü¸¦ ¿ªÆÄÀϵîÀÇ ¾Ë°í¸®ÁòÀ» µµÀÔÇÏ¿© ¼³°èÇÏ´Â °æ¿ìµµ ÈçÈ÷ º¼ ¼ö Àִµ¥, ÆÄÀÏ Àá±Ý¿¡¼ºÎÅÍ ÀúÀ塤ÃßÃâÀÇ ÃÖÀûȱîÁö °³¹ßÀÚ°¡ ÀÏÀÏÀÌ ±¸ÇöÇØ¾ßÇÏ´Â ÁüÀ» Á®¾ß ÇÑ´Ù. ¸ðµÎ Àå´ÜÁ¡ÀÌ ÀÖÀ» ÅÙµ¥, ¿ì¸®°¡ ±¸ÇöÇÒ À¥º¸µåÀÇ °æ¿ì´Â ¾î¶°ÇÑ ÆÇ´ÜÀ» ³»·Á¾ß ÇÒ±î? ´ë±Ô¸ðÀÇ DB¸¦ ±¸ÃàÇÑ´Ù¸é, DBMS(DataBase Management System)¸¦ µµÀÔÇÏ´Â °ÍÀÌ È¿À²ÀûÀ̰ÚÁö¸¸, À¥º¸µåÀÇ °æ¿ì´Â ÀÚ·á°¡ ¸¸°ÇÀ» ³Ñ±â Èûµé¸ç, ÀÚ·áÀÇ ¾ç ¶ÇÇÑ Àû±â¿¡ DBMSÀÇ Àû¿ëÀº ¿À¸®»ç³É¿¡ ´ëÆ÷µé°í °¡´Â °ÝÀ̶ó ÆÇ´ÜµÈ´Ù. ¶ÇÇÑ °ø°³ ¹èÆ÷¸¦ ¸ñÀûÀ¸·Î ÇÑ´Ù¸é DBMS ¹è°æÁö½ÄÀÌ ¿ä±¸µÇ¹Ç·Î »ç¿ëÀÚ°¡ Èû°Ü¿ö ÇÒ ¼ö ÀÖ°Ú´Ù. ÀÚü ¿£ÁøÀ» ±¸ÇöÇÏ´Â °Í ¶ÇÇÑ ±â´ÉÀû Çâ»óÀ» ±â´ë Çϱä Èûµå¹Ç·Î Á¦ÃÄ µÎ°í ¹èÆ÷µÇ´Â DB ¶óÀ̺귯¸®¸¦ Àû¿ëÇϵµ·Ï ÇÏÀÚ.
GNU 'gdbm' Library ¿©·¯ °¡Áö Á¾·ùÀÇ DB ¶óÀ̺귯¸®°¡ Á¸ÀçÇÏÁö¸¸, ¿©±â¼± GNU ProjectÀÇ ÀÏȯÀ¸·Î °³¹ßµÈ 'gdbm' ¶óÀ̺귯¸®¸¦ ¼±ÅÃÇÏ¿´´Ù. 'gdbm'´Â ±âº»ÀûÀ¸·Î À¯ÀÏÇÑ 'key'°ª¿¡ ÇϳªÀÇ 'data'°¡ Á¸ÀçÇÑ´Ù. ¿äÁò ÈçÈ÷ ¸»ÇÏ´Â RDBMS¶ó´Â '°ü°³Çü µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ'¿¡¼´Â Table Á¤ÀÇ, ÆÐÅϰ˻öµîÀÌ DB ¿£Áø ÀÚü¿¡ Æ÷ÇÔÇϹǷΠ°³¹ßÀÚ´Â ´Ü¼øÈ÷ SQLµîÀ» Àû¿ëÇÏ¿© À̸¦ Á¦¾îÇÒ ¼ö ÀÖÁö¸¸, 'gdbm'Àº ´Ü¼øÈ÷ ÀÚ·áÀÇ ÀúÀå, ÃßÃ⸸À» Áö¿øÇϹǷÎ, ÀÌ·¯ÇÑ ºÎºÐÀº °³¹ßÀÚ°¡ ¼Õ¼ö ÇÁ·Î±×·¡¹Ö ÇÏ¿©¾ß Çϳª, ±× ±¸Á¶°¡ °£´ÜÇϹǷÎ, ¼Ò±Ô¸ð DB¸¦ Àû¿ëÇÒ ¶§ Æí¸®ÇÏ´Ù. ´ÜÁ¡À¸·Î´Â °ÅÄ£Àá±Ý±â¹ýÀ» »ç¿ëÇϹǷÎ, Àб⠸ðµå·Î´Â ¿©·¯ »ç¿ëÀÚ°¡ Á¢±ÙÇÒ ¼ö ÀÖÁö¸¸, ¾²±â ¸ðµå·ÎÀÇ Á¢±ÙÀº ÇϳªÀÇ ÇÁ·Î¼¼½º¸¸ÀÌ Çã¿ëµÈ´Ù. [Ç¥ 1]ÀÇ ÄÚµå´Â 'gdbm'À» »ç¿ëÇÏ¿© DB¸¦ »ý¼ºÇϰí, ÀڷḦ Ãß°¡, ÃßÃâÇÏ´Â ÇÔ¼ö¸¦ ¿¹·Î º¸¿©ÁØ´Ù.
'gdbm' ¹èÆ÷ÆÇ°ú ÀÚ¼¼ÇÑ ¼³¸íÀº ¾Æ·¡ÀÇ ÁÖ¼Ò¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. - ftp://cair-archive.kaist.ac.kr/pub/gnu/gnu.mit/gdbm-1.7.3.tar.gz - http://funnelweb.utcc.utk.edu/~harp/gnu/gdbm/gdbm_toc.html
Å×À̺í(Table) ¼³°è ¸ÕÀú À¥º¸µå¿¡¼ »ç¿ëµÉ Å×À̺íÀ» [Ç¥ 2], [Ç¥ 3]°ú °°ÀÌ ±¸¼ºÇÏÀÚ. [Ç¥ 2]´Â À¥º¸µåÀÇ ±¸¼º¿¡ ´ëÇÑ °ÍÀ̸ç, [Ç¥ 3]Àº °Ô½Ã¹°¿¡ ´ëÇÑ Å×À̺íÀÌ´Ù. ¾Ë¾Æº» ¹Ù¿Í °°ÀÌ 'gdbm'Àº Àú¼öÁØÀÇ Á¦¾î¸¸À» Á¦°øÇϹǷÎ, ¿øÇÏ´Â Çü½ÄÀÇ Å×À̺íÀ» SQLÀÇ 'create table' ¸í·É°ú °°ÀÌ °£´ÜÈ÷ ±¸Çö ÇÒ ¼ö´Â ¾ø°Ú´Ù. ¿ì¸®´Â DBMS°¡ À¥º¸µå¿¡ ºÒÇÕ¸®ÇÏ´Ù°í ÆÇ´ÜÇÏ¿´À¸¹Ç·Î, Á» ¼ö°í½º·´Áö¸¸ ÀÌ·¯ÇÑ ±â´ÉÀ» ¼ÒÇÁÆ®¿þ¾î ÀÚü¿¡ ½É¾î ÁÖ¾î¾ß ÇÑ´Ù. Á¦ÀÛÇÒ À¥º¸µå´Â '±Û¾²±â' ¸ðµå ¶ÇÇÑ º°µµÀÇ HTML¹®¼·Î Á¦ÀÛÇÏÁö ¾Ê°í ÅëÇÕÈÇÏ·Á ÇϹǷΠ'conf.language'¶ó´Â Ç׸ñÀ» µÎ¾î ¸î°¡Áö ÇüÅÂÀÇ ÆûÀ» ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. ÀÌ´Â µÚ¿¡ ³ª¿Ã '°ü¸®' ¸ðµâ¿¡¼ Á¦¾îµÈ´Ù.
¸ñ·Ï º¸±â ¸ðµâ°ú Å¥(queue) ±¸Ã¼ÀûÀÎ ÀÚ·á ÇüűîÁö ±¸»óÇÏ¿´À¸´Ï, ¸ñ·Ï º¸±â ¸ðµâºÎÅÍ ¼³°èÇØ º¸ÀÚ. 'wwwboard.cgi?db=test&mode=list'¿Í °°ÀÌ È£ÃâµÇ¾úÀ» ¶§ Àû¿ëµÇµµ·Ï Çϰí, 'Á¦¸ñ, À̸§, ³¯Â¥, ¹øÈ£, ³»¿ë'À» ÆÐÅϰ˻ö ÇÒ ¼ö ÀÖµµ·Ï ÇÏÀÚ. °Ë»öÆÐÅÏ ¾øÀÌ È£ÃâµÉ °æ¿ì ¸¶Áö¸· Æ÷½ºÆÃµÈ °Ô½Ã¹°ºÎÅÍ º¸¿©ÁÖ¸ç, ÇöÀçÀÇ º¯¼ö´Â ISINDEX ¹æ½ÄÀ¸·Î »óÅ À¯Áö¸¦ Çϵµ·Ï ÇÏÀÚ. ±âº»ÀûÀ¸·Î 'conf.lastnum'¿¡¼ ¸¶Áö¸· °Ô½Ã¹° ¹øÈ£¸¦ ã¾Æ 'conf.lines'ÀÇ °³¼ö¸¸Å Ãâ·ÂÇÏ¿© ÁÙ ¼ö ÀÖ°Ú´Ù. Ãâ·ÂµÈ ÆäÀÌÁöÁß ÃÖ»ó´Ü°ú ÃÖÇÏ´ÜÀÇ °Ô½Ã¹° ¹øÈ£°¡ 30°ú 15 ¶ó¸é, '´ÙÀ½ÆäÀÌÁö' ¾ÆÀÌÄÜ ¸µÅ©¿£ 'wwwboard.cgi?db=test&num=14'¸¦ 'ÀÌÀü ÆäÀÌÁö' ¸µÅ©¿£ 'wwwboard.cgi?db=test&num=45'¿Í °°ÀÌ ±¸Çö ÇÒ ¼ö ÀÖ°Ú´Ù. ±×·¯³ª ÀÌ·¸µí °Ô½Ã¹° ¹øÈ£¸¦ »ç¿ëÇÑ ¹æ¹ü¿£ ¾à°£ÀÇ ¹®Á¦Á¡ÀÌ º¸ÀδÙ. '´ÙÀ½ÆäÀÌÁö' ¸µÅ©ÀÏ °æ¿ì¿£ º° ¹®Á¦½ÃµÇÁö ¾ÊÀ¸³ª, 'ÀÌÀüÆäÀÌÁö' ¸µÅ©ÀÇ °æ¿ì 45¹ø°ú 31¹ø »çÀÌ¿¡ »èÁ¦µÈ °Ô½Ã¹°ÀÌ ÀÖ´Ù¸é, Ãâ·ÂµÇ´Â °Ô½Ã¹°ÀÇ °³¼ö´Â 'conf.lines'¿¡ Á¤ÀÇµÈ °³¼ö 15(°¡Á¤ÇÏÀÚ)º¸´Ù ÀûÀº Ãâ·ÂÀ» º¸¿©ÁÙ °ÍÀÌ´Ù. ÆÐÅϰ˻öÀÇ °æ¿ì¸¦ »ý°¢ÇØ º¸¸é, 45¹ø°ú 31¹ø »çÀÌ¿¡ ¸ÅĪµÇ´Â °Ô½Ã¹°ÀÌ ¾øÀ» ¼öµµ ÀÖ´Ù. HTTP ÇÁ·ÎÅäÄÝÀÇ Æ¯¼º»ó ÀϹÝÀû ÇÁ·Î±×·¥°ú °°ÀÌ »óÅÂÀ¯Áö°¡ µÇÁö ¾Ê±â ¶§¹®¿¡ °í·ÁµÇ´Â ºÎºÐÀÏÅÙµ¥, Å¥¸¦ Àû¿ëÇϸé È¿°úÀûÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù. 'wwwboard.cgi?db=test&num=31&dir=up'°ú °°ÀÌ È£ÃâÇϸé, ³»ºÎÀûÀ¸·Î
31¹ø °Ô½Ã¹°ºÎÅÍ ¸¶Áö¸· °Ô½Ã¹°±îÁö(Å« ¹øÈ£) °Ë»öµÈ °á°ú¸¦ Å¥¿¡ ÀúÀåÈÄ
Àιö½º Ãâ·ÂÇÏ¿© ÆäÀÌÁö´ç °Ë»ö°³¼ö¸¦ [±×¸² 1] ¸ñ·Ï º¸±â ¼ø¼µµ ÀÏÁ¤·® À¯ÁöÇÒ ¼ö ÀÖ´Ù. À̸¦ µµÇ¥ÈÇÏ¿© [±×¸² 1]¿¡ ³ªÅ¸³»¾ú°í,
[±×¸² 2]´Â ȸé Ãâ·Â ÇüÅÂÀÌ´Ù.
[±×¸² 2] À¥º¸µåÀÇ ¸ñ·Ïº¸±â °ü¸® ¸ðµâ °ú ºñ¹Ð¹øÈ£ È®ÀÎ Á¦ÀÛÇÒ À¥º¸µå´Â ¿©·¯°³ÀÇ °Ô½ÃÆÇÀ» »ç¿ëÇÒ ¼ö Àִµ¥, °¢ °Ô½ÃÆÇÀÇ ±¸¼º(configuration)À» °ü¸® ÇÒ ¼ö ÀÖ´Â ¸ðµâÀ» žÀçÇÏ¿© [±×¸² 3]°ú °°ÀÌ À¥»ó¿¡¼ °ü¸®¸¦ ÇàÇÏ¸é Æí¸®ÇÏ´Ù. °ü¸® ¸ðµâ¿¡¼´Â [Ç¥ 3]ÀÇ Å×ÀÌºí °ªÀ» Á¤Á¤ÇÒ ¼ö Àִµ¥, DB¸¦ »ç¿ëÇÏ¿© ÀúÀ塤ÂüÁ¶Çϱ⵵ ÇÏÁö¸¸, ¸ðµâȵîÀÇ ÀÌÀ¯·Î 'db.conf'¿Í °°ÀÌ º°µµÀÇ ÆÄÀÏÀ» ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î °ü¸®Çϱ⵵ ÇÑ´Ù.
°Ô½Ã¹°ÀÇ »èÁ¦³ª, °ü¸® ¸ðµâ ÁøÀÔÀ» À§Çؼ´Â ½Å¿ø È®ÀÎ ¹æ¹ýÀ¸·Î ºñ¹Ð¹øÈ£¸¦ ´ëÁ¶ Çϴµ¥, ºñ¹Ð¹øÈ£ÀÇ À¯ÃâÀ» ÃÖ´ëÇÑ ¸·±âÀ§ÇØ ÀÔ·ÂµÈ ºñ¹Ð¹øÈ£´Â ¾ÏÈ£È(Encrypt)ÇÏ¿© ÀúÀåÇϸç, °¢ ¸ðµâ°£ÀÇ Àü´Þ½Ã¿¡µµ ¾ÏÈ£ÈµÈ ±×°ÍÀ» »ç¿ëÅä·Ï ÇÑ´Ù. ÀÔ·ÂµÈ ºñ¹Ð¹øÈ£°¡ ¾ÏȣȵÇÁö ¾Ê°í °ü¸® ¸ðµâ·Î Àü´Þ(ISINDEX ¶Ç´Â HIDDEN TAG)µÉ °æ¿ì '¹®¼ ¼Ò½º º¸±â'µîÀÇ ¹æ¹ýÀ¸·Î À¯ÃâµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. Ȥ, ±âÁ¸¿¡ Á¦ÀÛµÈ CGI°¡ º¸¾Èº¸´Ù´Â °ü¸®ÀÇ Æí¸®¼º ¶§¹®¿¡ À̸¦ °£°úÇÏ¿´´Ù¸é, ¾Æ·¡¿Í °°Àº HTMLÀ» Ãâ·Â ¹®¼¿¡ »ðÀÔÇÔÀ¸·Î½á [±×¸² 4]¿Í °°ÀÌ '¹®¼ ¼Ò½º º¸±â'¸¦ ¹«·ÂÈ ½Ãų ¼ö ÀÖÀ¸³ª, ¸ðµç ºê¶ó¿ìÀú¿¡ Àû¿ëµÇ´Â °ÍÀº ¾Æ´Ï´Ï ÁÖÀÇ ¹Ù¶õ´Ù.
¶ÇÇÑ ¾Æ·¡¿Í °°ÀÌ »õ·Î¿î ºê¶ó¿ìÀú¸¦ ¿¾î Ãâ·ÂÇϰí, ÀÏ·ÃÀÇ ÀýÂ÷¸¦ ¸¶Ä£ ÈÄ ºê¶ó¿ìÀú¸¦ ´Ý´Â ¹æ¹ýµµ °í·ÁµÉ ¼ö ÀÖ´Ù.
´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼´Â ´Ü ¹æÇâ ¾ÏÈ£È ÇÔ¼ö¸¦ Á¦°øÇϴµ¥ ´ÙÀ½ÀÇ Äڵ带 »ìÆìº¸ÀÚ.
°°Àº ¹®ÀÚ¿À» ¾ÏÈ£ÈÇØµµ 'salt'°ª¿¡ ÇØ´çÇÏ´Â 2¹ÙÀÌÆ®ÀÇ ¹®ÀÚ¿¿¡ µû¶ó ÀüÇô ´Ù¸¥ °á°ú¸¦ ¾òÀ» ¼ö Àִµ¥, º¹±ÍµÇ´Â ¹®ÀÚ¿ÀÇ Ã³À½ 2¹ÙÀÌÆ®´Â salt°ªÀ» Ç¥½ÃÇÑ´Ù. ÇÊÀÚÀÇ ½Ã½ºÅÛ¿¡¼ ¹®ÀÚ¿ "0000"À» ÀÎÀڷΠȣÃâÇÏ¿´À» ¶§ º¹±ÍµÇ´Â °ªÀº "SYi30NGbHBYMs"¿´´Ù. [±×¸² 5]´Â À̸¦ ÀÌ¿ëÇÑ ºñ¹Ð¹øÈ£ È®ÀΠȸéÀÌ´Ù.
[±×¸² 3] °ü¸® ¸ðµâ
[±×¸² 4] 'no-cache' Àû¿ë
[±×¸² 5] ºñ¹Ð¹øÈ£ È®ÀÎ
¾²±â ¸ðµâ°ú ÄíŰ(Cookie) »ç¿ëÀÇ Æí¸®¼ºÀ» À§ÇØ, ¾²±â ȸ鵵 ³»ÀåÀ» ½ÃŰÀÚ. ¾²±â ¸ðµâ·ÎÀÇ ÁøÀÔÀº 'wwwboard?db=test&mode=write'·Î Çϸç, ¹®¼ÈÀÏÀÇ ¾÷·Îµåµµ Áö¿øÇϵµ·Ï ÇÏÀÚ. ¾÷·Îµå´Â Áö³È£¿¡ ¾Ë¾Æº»¹Ù¿Í°°ÀÌ enctype='multipart/form-data'·Î ÀÎÄÚµùÇÏ¿© boundary°ªÀ¸·Î ºÐ¸®, ÀúÀåÅä·Ï ÇÒ¼öÀÖ´Ù. [±×¸² 6]°ú °°Àº ¾²±â ȸéÀÇ ÀÎÀÚ´Â À̸§, E-mail, Á¦¸ñ, ³»¿ë, ÆÄÀÏÀÇ ¼øÀ¸·Î Àü´ÞµÇ´Âµ¥, stdin¿¡¼ '--boundary'¿Í '--boundary' »çÀÌÀÇ °ªµéÀ» ¼ø¼´ë·Î ÃëÇÏ¿© ó¸® ÇÒ ¼ö ÀÖ´Ù.
[±×¸² 6] À¥º¸µåÀÇ ¾²±â ¸Þ´º ±ÛÀ» ¾µ ¶§¸¶´Ù À̸§, E-mailÀ» ¾²´Â °ÍÀº ¼º°¡½Å ÀÏ Àϼö ÀÖÀ¸´Ï, Äí۸¦ Àû¿ëÇÏ¿© ÇÊ¿äÇÑ Á¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀúÀå½Ã۰í, Äí۰¡ Á¸ÀçÇÏ¸é ±× °ªÀ» À̸§°ú E-mail¶õ¿¡ Ç¥½ÃÇÏ¿© ÁÖµµ·Ï ÇÏÀÚ. ¶ÇÇÑ, E-mail°ú °°ÀÌ °Ë»ç°¡ °¡´ÉÇÑ ºÎºÐÀº Ÿ´ç¼º ¿©ºÎ¸¦ ÆÇº°ÇÏ¿© »ç¿ëÀÚÀÇ ½Ç¼ö¸¦ ¾Ë·ÁÁÙ¼ö ÀÖ°Ú´Ù. ¾Æ·¡ÀÇ ÄÚµå¿Í °°ÀÌ E-mailÁÖ¼ÒÀÇ ¿À·ù¸¦ °£´ÜÈ÷ ÆÇº°ÇÒ¼ö ÀÖ´Ù.
±Û º¸±â ¸ðµâ ±Û º¸±â ¸ðµâÀº ¼±ÅÃµÈ ±ÛÀ» [±×¸² 7]°ú °°ÀÌ º¸¿©ÁÙ ¶§ »ç¿ëµÇ´Âµ¥, ³»¿ëÁß¿¡ 'http://abc.com'°ú °°Àº Ç׸ñÀ» ÀÚµ¿À¸·Î ¸µÅ©ÇØ ÁÖ´Â ¹æ¹ý¿¡ ´ëÇØ »ìÆìº¸ÀÚ. ³»¿ë Ãâ·ÂÀº °ø¹éµµ Á¤È®È÷ Ãâ·ÂÇÏ¿© ÁÖ¾î¾ß ÇϹǷÎ, <pre> TAG³ª <xmp> TAG¸¦ Ȱ¿ëÇÒ¼ö Àִµ¥, ÀÚµ¿ ¸µÅ©¸¦ ¼öÇàÇϱâ À§Çؼ´Â <pre> TAG¿Í [Ç¥ 4]¿Í °°Àº Ãâ·Â ÇÔ¼ö¸¦ Ȱ¿ëÇÏ¿© ±¸ÇöÇÒ¼ö ÀÖ°Ú´Ù. [Ç¥ 5]´Â [Ç¥ 4]ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÑ Ãâ·Â ÇüŸ¦ º¸¿©ÁØ´Ù.
[±×¸² 7] ÀÚµ¿ ¸µÅ© Àû¿ë ȸé
·Î±×(Log) ÀÛ¼º À¥¼¹ö¿¡¼ Á¦°øÇÏ´Â ·Î±× À̿ܿ¡ ÀÚüÀûÀÎ ·Î±×¸¦ ÀÛ¼ºÇØ¾ß ÇÒ ¶§°¡ Àִµ¥, ¾Æ·¡¿Í °°Àº °ü·Ê¸¦ ÁöŲ´Ù¸é, °ø°³µÈ ·Î±× ºÐ¼®Åøµµ ±×´ë·Î Àû¿ëÇÒ ¼ö°¡ ÀÖ´Ù.
Time Out°ú °Á¦ ½Ã±×³Î (signal) Ãâ·ÂÀÌ ¿Ï·áµÇÁö ¾ÊÀº »óÅ¿¡¼ »ç¿ëÀÚ°¡ ºê¶ó¿ìÀúÀÇ 'STOP'¹öưÀ» ´©¸£¸é ¾î¶»°Ô µÉ±î? CGI´Â °Á¦ Á¾·áµÉ±î? ±×·¸Áö ¾Ê´Ù. ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°£ÀÇ ¿¬°á¸¸ÀÌ ²÷¾îÁö°í CGI´Â °è¼Ó ½ÇÇàµÈ´Ù. µû¶ó¼, CGI´Â ¾î¶°ÇÑ ±ÔÁ¦ ¾øÀÌ Ã³¸®¸¦ ¿Ï·áÇϰí Á¤»ó Á¾·á¸¦ ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¼¹ö¿¡ ±ÔÁ¤µÈ Time Out ½Ã°£ ¾È¿¡ Á¾·áÇÏÁö ¾ÊÀ¸¸é, ¼¹ö´Â ÇØ´ç ÇÁ·Î¼¼¼¸¦ °Á¦ÀûÀ¸·Î Á¾·áÇÏ·Á ½ÃµµÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì ÀÌ·¯ÇÑ °æ¿ì±îÁö ´ëóÇÒ ÇÊ¿ä´Â ¾øÁö¸¸, ÇÁ·Î±×·¥ÀÇ ±¸¼º»ó DBÀÇ µ¿±âÈ(Sync)³ª ÆÄÀÏ ½Ã½ºÅÛ ÃÖÀûÈ¿Í °°Àº ÀÛ¾÷ Áß¿¡´Â Á¾·áÀü ¸¶¹«¸® ÀÛ¾÷ÀÌ ÇÊÈ÷ ¼±ÇàµÇ¾î¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡ ¼¹öÀÇ °æ¿ì ÀÚ½ÄÇÁ·Î¼¼¼(¼¹ö´Â ÀÚ½ÅÀ» º¹Á¦[fork()]ÇÑÈÄ º¹Á¦µÈ ÇÁ·Î¼¼¼¸¦ ÇØ´ç CGI·Î º¯È¯ ½ÇÇà[execl()]ÇÑ´Ù. Áï, CGI°¡ ÀÚ½ÄÇÁ·Î¼¼¼ÀÓÀ» ¶æÇÑ´Ù.)°¡ °Á¦ Á¾·áµÇÁö ¾ÊÀ» °æ¿ì SIGHUP, SIGTERM, SIGKILL ½Ã±×³ÎÀ» ¾à°£ÀÇ ½Ã°£Â÷¸¦ µÎ°í ÇÁ·Î¼¼¼¿¡ º¸³½´Ù. SIGKILL ½Ã±×³ÎÀº ¹«½ÃÇÒ ¼ö ¾ø±â ¶§¹®¿¡, ½Ã±×³ÎÀ» Æ÷ÂøÇÑ ½ÃÁ¡ºÎÅÍ SIGKILL µµ´Þ Àü¿¡ (¾à 2, 3ÃÊ) ÇÊ¿äÇÑ ÀÛ¾÷À» ¸¶¹«¸®ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ Äڵ带 ¹é±×¶ó¿îµå·Î ½ÇÇà½Ã۰í, 'kill -SIGHUP ÇÁ·Î¼¼¼¹øÈ£' ¸í·ÉÀ» ³»·Áº¸ÀÚ.
¸¶Ä¡¸ç... 3ȸ¿¡ °ÉÃÄ CGIÀÇ Àü¹ÝÀûÀÎ ¸ð½ÀÀ» ÈȾ¾Ò´Âµ¥, ÇÊÀÚ ³ª¸§´ë·Î ºÎÁ·ÇÑ Á¡ÀÌ ¸¹¾Æ ¿å½É¸¸Å ÁÁÀº ³»¿ëÀ» ±Û·Î½á Ç¥ÇöÇÏÁö ¸øÇÑ µí ½Í´Ù. ¹Ì¼÷ÇÑ ±Û¼Ø¾¾·Î µÎ¼¾øÀÌ ¾´ ±ÛÀÌÁö¸¸ µ¶ÀÚµéÀÌ ÀÌ ±ÛÀ» Àаí Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÑ´Ù. ÄÚµù¿¡ °üÇÑ ±Ã±ÝÁõÀº ¾Æ·¡ ÁÖ¼Ò¿¡¼ ¼Ò½º¸¦ ´Ù¿î ¹Þ¾Æ »ìÆìº¸±â ¹Ù¶õ´Ù. http://cgi.hongik.ac.kr/wwwboard/CrazyWWWBoard2.0.tar.Z
|