Warning: dba_open(./data/counter.db,n) [function.dba-open]: No such handler: gdbm in /home/youngrok/public_html/wiki/wiki.php on line 316
¿µ·ÏÀÌ ºí·Î±×: ÀÚ¹ÙÀ¥ÇÁ·Î±×·¡¸ÓÀDZ⺻
ÀÚ¹ÙÀ¥ÇÁ·Î±×·¡¸ÓÀDZ⺻
FrontPage|FindPage|TitleIndex|RecentChanges|UserPreferences E D R S I M H RSS

¸¶¼Ò 2005³â 1¿ùÈ£ ±â°í
1 Á¦¸ñ
2 ¹ß¹®
3 ÇÊÀÚ ¼Ò°³
4 º»¹®
4.1 ¼­·Ð, ¾î¶»°Ô °øºÎÇÒ °ÍÀΰ¡
4.2 º»·Ð
4.2.1 web.xml
4.2.2 ¿¹¿Ü ó¸®
4.2.3 ·Î±ë
4.2.4 ¿¹¿Ü ÃßÀû
4.2.5 ÇÑ±Û ¹®Á¦
4.2.6 URL ÀÎÄÚµå
4.2.7 Ŭ·¡½ºÆÐ½ºÀÇ ¸®¼Ò½º »ç¿ë¹ý
4.2.8 ¼­ºí¸´/¾×¼Ç ¸â¹ö º¯¼ö °øÀ¯ ¹®Á¦
4.3 °á·Ð, »ý°¢Çϱâ
4.4 ÂüÁ¶

1 Á¦¸ñ #

ÀÚ¹Ù À¥ ÇÁ·Î±×·¡¸ÓÀÇ ±âº»

2 ¹ß¹® #

ÇÁ·Î±×·¡¹Ö Ãʺ¸ÀÚ°¡ ´ÉÈ÷ ÇÑ »ç¶÷ ¸òÀ» ÇÒ Á¤µµ·Î, È¥ÀÚ ÄÚµùÇϵµ·Ï ³»¹ö·ÁµÖµµ ´Ù¸¥ »ç¶÷µéÀÌ ºÒ¾È¿¡ ¶³Áö ¾ÊÀ» ¸¸Å­ ¼ºÀåÇÏ´Â °¡Àå ºü¸¥ ¹æ¹ýÀº ¹«¾ùÀϱî? µðÀÚÀÎ ÆÐÅÏÀ» °øºÎÇϰí Ãֽбâ¼úÀ» ÀÍÈ÷°í ½ÇÀü ÇÁ·Î±×·¡¹ÖÀ» ¸¹ÀÌ ÇØº¸´Â °Í? ±×°Íµµ ¹°·Ð Áß¿äÇÏ´Ù. ±×·¯³ª, À̺¸´Ù ÈξÀ ´õ Áß¿äÇÑ °ÍÀº ±âÃʸ¦ ´ÙÁö´Â °ÍÀÌ´Ù. ½½·¥µ¢Å©¿¡¼­ °­¹éÈ£´Â ³ó±¸ºÎ ÀÔ´Ü ÈÄ 2ÁÖÀÏ °£ µå¸®ºí ¿¬½À¸¸ Çß°í À̰ÍÀÌ ±×°¡ ºü¸¥ ½Ã°£ ¾È¿¡ ÇÑ »ç¶÷ ¸òÀ» ÇØ³»´Âµ¥ ¹Ø°Å¸§ÀÌ µÇ¾ú´Ù. Àá½Ã ´õºí Ŭ·¯Ä¡ ¿¬½ÀÀº ¸ØÃß°í µå¸®ºíÀ» ÇØº¸ÀÚ. º¹ÀâÇÑ ÀÌ·Ð, ¾î·Á¿î ½Å±â¼úÀº Àá½Ã Á¢¾îµÎ°í ÇÁ·Î±×·¡¸Ó·Î¼­ÀÇ ±âº»À» ÀçÁ¡°ËÇØº¸ÀÚ.

3 ÇÊÀÚ ¼Ò°³ #

¹Ú¿µ·Ï refactorer@naver.com code for human, not for programmer. Àΰ£´Ù¿î ÇÁ·Î±×·¡¸Ó, °ÔÀ¸¸¥ ÇÁ·Î±×·¡¸Ó¸¦ ÁöÇâÇÑ´Ù. ÇöÀç NHN¿¡¼­ ÇÁ·¹ÀÓ¿÷ °³¹ß°ú ¼­¹ö °ü¸®¸¦ ´ã´çÇϰí ÀÖ´Ù.

4 º»¹® #

4.1 ¼­·Ð, ¾î¶»°Ô °øºÎÇÒ °ÍÀΰ¡ #

4³â Àü, Çб³¿¡¼­ ¾î´À º¥Ã³ °æ¿µÀÎÀÇ °­¿¬À» µéÀº ÀûÀÌ ÀÖ´Ù. ¹Ì±¹¿¡¼­ º¥Ã³¸¦ ½ÃÀÛÇØ¼­ ¾î´À Á¤µµÀÇ ¼º°øÀ» °ÅµÐ ±â¾÷°¡¿´´Ù. ±×´Â °­¿¬ ³»³» ±âº»À» °­Á¶Çß´Ù. ¹Ì±¹°ú Çѱ¹ÀÇ ±â¾÷ ¹®È­ÀÇ Â÷À̸¦ ºñ±³Çϸ鼭 ¹Ì±¹ÀÇ º¥Ã³µéÀº ´ëü·Î °æ¿µÀÎÀ¸·Î¼­ÀÇ ±âº»ÀûÀ¸·Î ÁöÄѾßÇÒ °ÍµéÀ» Àß ÁöŰ´Â ¹Ý¸é Çѱ¹ÀÇ º¥Ã³´Â ±âº»ÀûÀÎ °ÍµéÀ» Á¦´ë·Î ÁöŰÁö ¸øÇÏ°í ±×·Î ÀÎÇØ ½ÇÆÐÇÏ´Â °æ¿ì°¡ ¸¹´Ù°í Çß´Ù. º¥Ã³ ºÕÀÌ ÀÏ ¶§ ¼ö¸¹Àº Çлý º¥Ã³°¡ °æ¿µ¿¡ ´ëÇÑ ¹«Áö·Î °¡Áø ±â¼úÀ» ÆîÃĺ¸Áöµµ ¸øÇÏ°í ¸ÁÇÑ Çö»ó¿¡ ´ëÇØ º¥Ã³´Â °æ¿µÀÌ¸ç °æ¿µÀ» ÇÏ·Á¸é °æ¿µ¿¡ ´ëÇØ ¹è¿ö¾ßÇÏ´Â °ÍÀº ±âº»Àε¥ ±× ±âº»ÀÌ ÁöÄÑÁöÁö ¾Ê¾Ò±â ¶§¹®À̶ó°í Çß´Ù. ´ç½Ã ºÎµµ´öÇÑ º¥Ã³ ±â¾÷°¡µéÀÇ ÇàŰ¡ »çȸÀûÀ¸·Î ³í¶õÀÌ µÇ°í ÀÖ¾ú´Âµ¥ ÀÌ¿¡ ´ëÇØ¼­´Â »çȸÀÎÀ¸·Î¼­ÀÇ ±âº»ÀûÀÎ ¼Ò¾çÀÌ °®Ãß¾îÁ® ÀÖÁö ¾Ê±â ¶§¹®À̶ó°í Çß´Ù. ±×´Â ¸ðµç °ÍÀ» ±âº»À̶õ ¸» Çϳª·Î ¼³¸íÇß´Ù. ±âº»ÀÌ ¹°·Ð ¼º°øÀÇ ÃæºÐÁ¶°ÇÀº ¾Æ´Ï´Ù. ±×·¯³ª, ±âº»À» ÁöŰÁö ¾Ê°í´Â ¼º°øÇÒ ¼ö ¾ø´Ù. ¾î¶² ºÐ¾ßµç À̰ÍÀº ¿¹¿Ü°¡ ¾øÀ» °ÍÀÌ´Ù.

±×·¸´Ù¸é ÇÁ·Î±×·¡¸Ó, ±× Áß¿¡¼­µµ ÀÚ¹Ù À¥ ÇÁ·Î±×·¡¸ÓÀÇ ±âº»Àº ¹«¾ùÀϱî? ´ç¿¬È÷ ÀÚ¹Ù ¾ð¾î¿¡ ´ëÇØ¼­ Àß ¾Æ´Â °ÍÀÌ´Ù. À¥ ÇÁ·Î±×·¡¹ÖÀ̶ó´Â °Íµµ °á±¹ »ç¿ëÇÏ´Â API°¡ ´Ù¸¥ °Í »Ó, ÁÁÀº ÀÚ¹Ù À¥ ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á¸é ¸ÕÀú ÁÁÀº ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó°¡ µÇ¾î¾ßÇÑ´Ù. ³Ê¹«µµ ´ç¿¬ÇÑ ¸» °°Áö¸¸ Çö½ÇÀº ±×·¸Áö ¾Ê´Ù. ¿©·¯ ÀÚ¹Ù Ä¿¹Â´ÏƼ¿¡ °¡º¸¸é ÀÚ¹Ù¿¡ ´ëÇÑ Á¤¸» ±âº»ÀûÀÎ Áú¹®µéÀÌ ¼öµµ ¾øÀÌ ¿Ã¶ó¿À¸ç, Çö¾÷ ÇÁ·Î±×·¡¸Ó Áß¿¡µµ ±âÃʰ¡ ºÎÁ·ÇÑ »ç¶÷ÀÌ ³Ê¹«³ªµµ ¸¹´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó¶ó¸é ÀÚ¹Ù¿¡ °üÇÑ ±âº»¼­ Çϳª Á¤µµ´Â ¸¶½ºÅÍÇÏ°í ½ÃÀÛÇϵµ·Ï ÇÏÀÚ. ÀÚ¹Ù ±âº»¼­µéÀº ´ëü·Î ³»¿ëÀÌ Ãæ½ÇÇϹǷΠ¾Æ¹« °Å³ª »çµµ ³ª»Û ¼±ÅÃÀº ¾Æ´Ò °ÍÀÌ´Ù. ±×·¡µµ ÃßõÀÌ ÇÊ¿äÇÏ´Ù¸é Thinking in Java¸¦ ÃßõÇÑ´Ù. ÇÁ·Î±×·¡¹Ö¿¡ óÀ½ ÀÔ¹®ÇÏ´Â °Å¶ó¸é ¿¹Á¦µéÀ» Á÷Á¢ µû¶óÇØº¸´Â °Íµµ ÁÁÀ» °ÍÀÌ´Ù.

ÀÚ¹Ù¿¡ Àͼ÷ÇØÁ³´Ù¸é ´ÙÀ½ ´Ü°è´Â À¥ ±â¼úÀÌ´Ù. À¥ ÇÁ·Î±×·¡¹ÖÀÇ ±âº»Àº À¥°ú °ü·ÃµÈ ½ºÆå(Specification)¿¡ ´ëÇÑ Áö½Ä, ±¸Ã¼ÀûÀ¸·Î Servlet/JSP ½ºÆå, HTTP ½ºÆå(RFC 2068), HTML ?W3C ½ºÆå µîÀÌ´Ù. ÀÌ ½ºÆåµé¿¡ ´ëÇØ »ó¼¼È÷ ´Ù ¾Ë ÇÊ¿ä´Â ¾øÁö¸¸ À¥ ÇÁ·Î±×·¡¹Ö¿¡¼­ »ç¿ëÇÏ´Â APIµéÀÌ ¾î¶² ½ºÆå¿¡ ±â¹ÝÇϰí ÀÖ´ÂÁö, ÀÚ¼¼È÷ ¾Ë°í ½ÍÀ¸¸é ¹«¾ùÀ» ã¾Æ¾ßÇÏ´ÂÁö´Â ¾Ë¾Æ¾ßÇÑ´Ù. °ø´ë»ýÀÌ °øÇмöÇÐÀÇ ³»¿ëÀ» ÀüºÎ ¾Ë°í ÀÖÀ» ÇÊ¿ä´Â ¾øÁö¸¸ ¹ÌºÐ¹æÁ¤½ÄÀ» Ç®°í ½ÍÀ¸¸é ¾î´À ÆäÀÌÁö¸¦ ã¾ÆºÁ¾ßÇÏ´ÂÁö´Â ¾Ë°í ÀÖ¾î¾ßÇÏ´Â °Íó·³ ¾î¶² ¿ä±¸»çÇ×ÀÌ ¹ß»ýÇßÀ» ¶§ ±× ¿ä±¸»çÇ×À» ±¸ÇöÇÏ·Á¸é ¾î¶² ½ºÆåÀ» ã¾ÆºÁ¾ßÇÏ´ÂÁö Á¤µµ´Â ¾Ë°í ÀÖ¾î¾ßÇÑ´Ù. ±×¸®°í ÀǿܷΠ¸¹Àº À¥ ÇÁ·Î±×·¡¸ÓµéÀÌ HTML, CSS¿¡ Àͼ÷Áö ¾ÊÀºµ¥ ÀÌ ¶§¹®¿¡ À¥»çÀÌÆ®ÀÇ ºê¶ó¿ìÀú ȣȯ¼ºÀÌ ¶³¾îÁú »Ó¸¸ ¾Æ´Ï¶ó ÁöÀúºÐÇÑ Äڵ带 ¾ç»êÇÏ°Ô µÈ´Ù. HTML ÄÚµå ¿ª½Ã À¯Áöº¸¼ö ´ë»óÀÌ µÇ´Â ÄÚµåÀ̸ç ÀÚ¹Ù ÄÚµå ¸øÁö ¾Ê°Ô ±ò²ûÇÏ°Ô À¯ÁöÇÒ ¼ö ÀÖ¾î¾ßÇÔÀ» ±â¾ïÇÏÀÚ. À̸¦ À§Çؼ­´Â HTML°ú CSS¿¡ ´ëÇØ »ó¼¼È÷ ¾Ë¾ÆµÑ Çʿ䰡 ÀÖ´Ù. XMLÀº ÀÌÁ¦ ÇÁ·Î±×·¡¸ÓÀÇ ±âº»ÀÌ´Ï ¾ð±ÞÇÒ Çʿ䵵 ¾øÀ» °ÍÀÌ´Ù. XML ÆÄÀÏÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ ÆíÇÏ°Ô ´À²¸Áú Á¤µµ°¡ µÇ¸é ÄÚµåÀÇ À¯¿¬¼ºÀ» ³ôÀÏ ÁÁÀº ¹æ¹ýµéÀ» ¸¹ÀÌ »ý°¢Çس¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

½ºÆåÀ» ½ÇÁ¦·Î Ȱ¿ëÇÏ´Â °ÍÀº API(Application Programming Interface)¸¦ ÅëÇØ¼­ÀÌ´Ù. Servlet/JSP API´Â ½ºÆå°ú´Â ´Þ¸® ½ÇÁ¦·Î API¸¦ ÅëÇØ¼­ ¹«¾ùÀ» ÇÒ ¼ö ÀÖ´ÂÁö¸¦ »ó¼¼ÇÏ°Ô ¾Ë°í ÀÖ¾î¾ßÇÑ´Ù. À̰ÍÀº ºñ´Ü Servlet/JSP API »Ó ¾Æ´Ï¶ó Java ±âº» API, °¢Á¾ ¶óÀ̺귯¸®ÀÇ APIµµ ¸¶Âù°¡Áö´Ù. ÇÊÀÚ°¡ ÀÌÁ¦²¯ ÀÚ¹Ù¿¡ °üÇØ ¹Þ¾Æº» Áú¹® Áß ´ëºÎºÐÀº API ¹®¼­¸¸ Àß µé¿©´Ùº¸¸é ÇØ°áµÇ´Â °ÍÀ̾ú´Ù. API ¹®¼­¸¦ ÀÚÁÖ Ã£¾Æº¸´Â ½À°üÀ» µéÀÌÀÚ. ¸®´ª¼­µéÀº ¸Å´º¾óÀ» ÀÐÁö ¾Ê°í Áú¹®ÇÏ´Â »ç¶÷¿¡°Ô RTFM(Read The Fucking Manual)À̶ó´Â ´ë´äÀ» ÇØÁØ´Ù. ÀÚ¹Ù ¿ª½Ã RTFMÀÌ ÇÊ¿äÇÏ´Ù. ?J2EE ±âº»¼­¸¦ Çϳª »ç¼­ º¸´Â °Íµµ ÁÁÀ» °ÍÀÌ´Ù. ?J2EE ±âº»¼­¿¡´Â À¥ °ü·Ã ½ºÆå Áß Áß¿äÇÑ ºÎºÐµé, Servlet/JSP ½ºÆå ¹× APIµéÀÌ Àß Á¤¸®µÇ¾î ÀÖ´Ù. Java Server Programming, ?J2EE Edition Á¤µµ¸é ÈǸ¢ÇÑ Âü°í¼­°¡ µÉ °ÍÀÌ´Ù.

ÀÌÁ¦ºÎÅÍ ÀÌ·± ±âº»ÀûÀÎ Áö½Ä Áß¿¡ Áß¿äÇÏÁö¸¸ °£°úÇϱ⠽¬¿î °Íµé, °£´ÜÇÏÁö¸¸ ¾Ë¸é µµ¿òÀÌ µÇ´Â Á¤º¸µé, ÀÚÁÖ ºÎµúÈ÷°Ô µÇ´Â °í¹Îµé µî ¸î °¡Áö ÀÛÀº ¹®Á¦µéÀ» ¤¾îº¼ °ÍÀÌ´Ù. ¸ðµÎ ±âº» ÇнÀ °úÁ¤À» Àß °ÅÃÆ´Ù¸é ÀÚ¿¬½º·´°Ô ¾Ë ¼ö ÀÖ´Â ³»¿ëµéÀÌ´Ù. ÀÌ·± ÇϳªÇϳªÀÇ Áö½ÄµéÀ» ÅëÇØ Àڽſ¡°Ô ºÎÁ·ÇÑ Á¡À» µÇ¤¾îº¼ ¼ö ÀÖ´Â °è±â¸¦ ¸¶·ÃÇÒ ¼ö Àֱ⸦ ¹Ù¶õ´Ù.

4.2 º»·Ð #

4.2.1 web.xml #
¹èÄ¡ ¼­¼úÀÚ(deployment descriptor)¶ó°í ºÎ¸£´Â web.xmlÀº À¥ ÇÁ·ÎÁ§Æ®¸¦ ±¸¼ºÇϴµ¥ ÀÖ¾î ÇʼöÀûÀ̸鼭 À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¿ÀÛÀ» ¿©·¯ °¡Áö·Î Á¶Á¤ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ½ºÆ®·¯Ã÷¸¦ »ç¿ëÇÏ´Â °æ¿ìµµ ½ºÆ®·¯Ã÷¸¦ »ç¿ëÇϱâ À§ÇÑ ¼³Á¤Àº web.xml¿¡ ÇÏ°Ô µÇ´Âµ¥ ±× ¼³Á¤µéÀÌ ¹«½¼ Àǹ̸¦ °¡Áö°í ÀÖ´ÂÁö Á¤µµ´Â »ó½ÄÀ¸·Î ¾Ë¾ÆµÎ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ´ÙÀ½ÀÇ ½ÇÁ¦ ½ºÆ®·¯Ã÷ ¼³Á¤ ¿¹Á¦¸¦ º¸ÀÚ. {{{#!vim x
{{#!vim xml
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>
        org.apache.struts.action.ActionServlet
    </servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>
         /WEB-INF/struts-config.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
}
}} PHP, ASP µîÀÇ ´Ù¸¥ ¼­¹ö »çÀÌµå ½ºÅ©¸³Æ®³ª JSP ÆäÀÌÁö´Â ÆäÀÌÁö¸¦ È£ÃâÇÏ´Â °æ·Î¿¡ ½ÇÁ¦ ½ºÅ©¸³Æ® ÆÄÀÏÀÌ Á¸ÀçÇØ¾ßÇÏÁö¸¸ ¼­ºí¸´Àº ÀÌ¿Í ´Þ¸® web.xmlÀÇ ¼³Á¤À» ÀÌ¿ëÇØ¼­ URLÀ» ƯÁ¤ ¼­ºí¸´À¸·Î ¸ÅÇνÃų ¼ö ÀÖ´Ù. À§ÀÇ ¼³Á¤Àº È£ÃâµÈ URLÀ» ½ºÆ®·¯Ã÷ÀÇ ActionÀ¸·Î ¸ÅÇνÃ۱â À§ÇÑ ¼³Á¤ÀÌ´Ù. servlet ¼³Á¤¿¡¼­ actionÀ̶ó´Â À̸§ÀÇ ¼­ºí¸´À» org.apache.struts.action.?ActionServlet Ŭ·¡½º·Î µî·ÏÇÏ°í ¾Æ·¡ÀÇ servlet-mapping ¼³Á¤¿¡¼­ *.do¶ó´Â URL·Î È£ÃâµÈ ÆäÀÌÁöµéÀ» actionÀ̶ó´Â À̸§ÀÇ ¼­ºí¸´À¸·Î ¸ÅÇνÃŲ´Ù. url-pattern °ªÀ» *.nhnÀ¸·Î ¹Ù²Û´Ù¸é *.nhnÀ¸·Î È£ÃâµÈ ¿äûµéÀÌ ?ActionServletÀ¸·Î ¸ÅÇ뵃 °ÍÀÌ´Ù. ½ºÆ®·¯Ã÷´Â ÀÌ ?ActionServlet¿¡¼­ ¿äûÀ» °¢ ActionÀ¸·Î ºÐ±â½ÃÄÑÁØ´Ù. init-paramÀº ¼­ºí¸´À» ÃʱâÈ­ÇÒ ¶§ »ç¿ëÇÒ ÆÄ¶ó¹ÌÅͰªÀ̸ç getInitParameter ¸Þ½îµå¸¦ ÅëÇØ¼­ Àоî¿Ã ¼ö ÀÖ´Ù. load-on-startupÀº ¼­ºí¸´ ¿£ÁøÀÌ ½ºÅ¸Æ®µÉ ¶§ ·ÎµåµÉ ¿ì¼± ¼øÀ§¸¦ ÁöÁ¤ÇÏ´Â °ªÀÌ´Ù.

À妽º ÆäÀÌÁö¸¦ ÁöÁ¤ÇÏ´Â °Íµµ web.xml¿¡¼­ ÇÒ ¼ö ÀÖ´Ù. ¸¹Àº À¥»çÀÌÆ®µéÀÌ ±¸Ã¼ÀûÀÎ °æ·Î ÁöÁ¤ ¾øÀÌ µµ¸ÞÀθí±îÁö¸¸ ½áÁ൵ ÆäÀÌÁö¸¦ Ç¥½ÃÇÑ´Ù. À̸¦Å׸é http://www.hangame.comÀ¸·Î È£ÃâÇÒ °æ¿ì ´ÙÀ½°ú °°ÀÌ ¼³Á¤Çصθé www.hangame.comÀÇ /index.jsp¸¦ È£ÃâÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. {{{#!vim x
{{#!vim xml
<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
}
}} ÅÂ±×¸í¿¡¼­ ÁüÀÛÇÒ ¼ö ÀÖµíÀÌ À妽º ÆäÀÌÁö´Â ¿©·¯ °³¸¦ µÖ¼­ ¼ø¼­´ë·Î °Ë»öÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î index.html°ú index.jsp°¡ ¼ø¼­´ë·Î ÁöÁ¤µÈ´Ù¸é ¼­ºí¸´ ¿£ÁøÀº index.htmlÀÌ ÀÖÀ¸¸é index.htmlÀ» º¸¿©ÁÖ°í ¾øÀ¸¸é index.jsp¸¦ È£ÃâÇÑ´Ù. À̰͵µ ¾øÀ¸¸é 404 ¿¡·¯°¡ ³ª°Å³ª µð·ºÅ丮 ¸ñ·ÏÀÌ º¸ÀÌ°Ô µÈ´Ù. ÀÌ À妽º ÆäÀÌÁö´Â ¸ðµç °æ·Î¿¡ ´ëÇØ¼­ µ¿ÀÛÇÑ´Ù. À§¿Í °°Àº ¼³Á¤ÀÇ °æ¿ì http://www.hangame.com/login/À» È£ÃâÇÑ´Ù¸é http://www.hangame.com/login/index.jsp¸¦ ã°Ô µÇ´Â °ÍÀÌ´Ù. ÀÌ ¼³Á¤Àº »ç½Ç ¾ÆÆÄÄ¡ µîÀÇ À¥¼­¹ö¿¡¼­µµ ÇØÁÙ ¼ö ÀÖÀ¸³ª º¸Åë À¥ ¼­¹ö¿¡¼­´Â À妽º ÆäÀÌÁö°¡ ½ÇÁ¦ ÆÄÀÏ·Î Á¸ÀçÇØ¾ß º¸¿©ÁÙ ¼ö Àִµ¥ ¼­ºí¸´ ¿£Áø¿¡¼­´Â ½ÇÁ¦ ÆÄÀÏ·Î Á¸ÀçÇÏÁö ¾Ê°í ¼­ºí¸´ ¸ÅÇÎÀ¸·Î ÁöÁ¤¸¸ µÇ¾î À־ º¸¿©ÁÙ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

Á¢±Ù ±ÇÇѵµ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±ÇÇÑ Ã¼°è°¡ °£´ÜÇÑ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ̶ó¸é web.xml¸¸À¸·Îµµ ÃæºÐÇÑ ±ÇÇÑ ¼³Á¤À» ÇØÁÙ ¼ö ÀÖ´Ù. {{{#!vim x
{{#!vim xml
<security-constraint>
  <web-resource-collection>
    <web-resource-name>retail</web-resource-name>
    <url-pattern>/acme/retail/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>CONTRACTOR</role-name>
    <role-name>HOMEOWNER</role-name>
  </auth-constraint>
</security-constraint>
}
}} À§ÀÇ ¿¹´Â ¼­ºí¸´ ½ºÆå ¹®¼­¿¡ ÀÖ´Â ¿¹´Ù. À̰ÍÀÇ Àǹ̴ GETÀ̳ª POST·Î /retail/*¿Í °°Àº ¿äûÀº CONTRACTOR¿Í HOMEOWNER¶ó´Â roleÀ» °¡Áø »ç¿ëÀÚ¿¡°Ô¸¸ Çã¶ôÇϰڴٴ ¶æÀÌ´Ù. ÀÌ¿ÜÀÇ »ç¿ëÀÚ´Â ±ÇÇÑÀÌ ¾ø´Ù´Â 401 ¿¡·¯ ÆäÀÌÁö¸¦ º¸°Ô µÈ´Ù. ÀÌ·± Á¢±Ù Á¦ÇÑ »Ó ¾Æ´Ï¶ó ·Î±×ÀΠ󸮵µ login-config ¼³Á¤À» ÀÌ¿ëÇÏ¸é °¡´ÉÇÏ´Ù. ½ÇÁ¦ ÅèĹÀÇ admin°ú manager ¾ÖÇø®ÄÉÀ̼ÇÀº ÀÌ ¼³Á¤À» ÀÌ¿ëÇØ¼­ ÀÎÁõ°ú ±ÇÇÑ Ã³¸®¸¦ ÇÑ´Ù. ÀÚ¼¼ÇÑ ½ºÆåÀº ¼­ºí¸´ ½ºÆå ¹®¼­¿¡ Á¤ÀǵǾî ÀÖÀ¸³ª ½ÇÁ¦ Ȱ¿ëÇϱ⿣ ´Ù¼Ò ºÎÁ·ÇÑ °¨ÀÌ ÀÖ°í ÅèĹÀÇ ½ÇÁ¦ Ȱ¿ë ¿¹¸¦ º¸´Â °ÍÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. À̿ܿ¡µµ ¼­ºí¸´ ÇÊÅÍ ¼³Á¤, ¼¼¼Ç ¼³Á¤, ¸®¼Ò½º ¼³Á¤ µî ¿©·¯ °¡Áö À¯¿ëÇÑ ¼³Á¤À» ÇØÁÙ ¼ö ÀÖ°í °øÅëÀûÀÎ ¿¡¿Ü 󸮸¦ À§ÇÑ ¿¡·¯ ÆäÀÌÁö ¼³Á¤µµ °¡´ÉÇÏ´Ù. ¿¡·¯ ÆäÀÌÁö ¼³Á¤ ºÎºÐÀº ÀÌÈÄ ¿¹¿Ü 󸮿¡¼­ ÀÚ¼¼È÷ ´Ù·ê °ÍÀÌ´Ù.

4.2.2 ¿¹¿Ü ó¸® #
ÀÚ¹ÙÀÇ °­Á¡ Áß Çϳª°¡ Æí¸®ÇÑ ¿¹¿Ü ó¸® ¹æ½ÄÀÌ´Ù. C ¾ð¾î µî ¿¹¿Ü ó¸® ¹®¹ýÀÌ ¾ø´Â ¾ð¾î¸¦ ¸ÕÀú Á¢ÇÑ ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â »ý¼ÒÇÑ °³³äÀÏ ¼ö ÀÖ°ÚÁö¸¸ ¾Ë¸é ¾Ë¼ö·Ï Æí¸®ÇÑ °ÍÀÌ ÀÚ¹ÙÀÇ ¿¹¿Ü ó¸®ÀÌ´Ù. ÇÏÁö¸¸ ÀǿܷΠ¸¹Àº ÀÚ¹Ù ÇÁ·Î±×·¡¸ÓµéÀÌ ¿¹¿Ü 󸮸¦ ¾î·Á¿öÇÏ°í ¿¹¿Ü 󸮸¦ Á¦´ë·Î ÇÏÁö ¾Ê¾Æ ¿©·¯ °¡Áö ¹®Á¦¸¦ ¹ß»ý½ÃŲ´Ù. ±âº»À̶ó°í ÇÒ ¼öµµ ÀÖ´Â ºÎºÐÀ̱ä Çϳª »ç½Ç À̰ÍÀº ÀÚ¹ÙÀÇ ¿¹¿Ü ó¸® ¹®¹ý¸¸ ¹è¿î´Ù°í µÇ´Â ¹®Á¦´Â ¾Æ´Ï¸ç ¿¹¿Ü 󸮿¡ ´ëÇÑ ¸¹Àº °í¹ÎÀÌ ÇÊ¿äÇÏ´Ù. ƯÈ÷ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¿¹¿Ü 󸮴 ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ ºÎºÐ°ú À¥»çÀÌÆ® ¹æ¹®°´À» À§ÇÑ ºÎºÐ µÎ °¡Áö¸¦ ¸ðµÎ °í·ÁÇØ¾ßÇÑ´Ù.

¸ÕÀú ÇÁ·Î±×·¡¸ÓÀÇ ÀÔÀåÀ» »ìÆìº¸ÀÚ. ¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ¾îµð±îÁö´Â ±×³É ´øÁö°í ¾îµð¼­ ijġÇÏ´Â °ÍÀÌ ÁÁÀ»±î? ÀÚ¹ÙÀÇ ¿¹¿Ü´Â ÀÚ¹Ù ÄÚµåÀÇ ¸ðµç ¿µ¿ª¿¡¼­ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸ðµç ¿µ¿ª¿¡ ´Ù try-catch¸¦ °É°í ¿¹¿Ü¸¦ ÀâÀ» ¼ö´Â ¾ø´Â ÀÏÀÌ´Ù. ´ëºÎºÐÀÇ ¿¹¿Ü´Â ÀÏ´Ü ±×³É ´øÁö´Â °ÍÀÌ ÁÁ´Ù. ÀÚ¹ÙÀÇ ¿¹¿Ü°¡ ÁÁÀº °ÍÀº ²À ¿¹¿Ü°¡ ¹ß»ýÇÑ ±× ÁöÁ¡¿¡¼­ 󸮸¦ ÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â °Í ¶§¹®ÀÌ´Ù. ¿¹¿Ü¸¦ ´øÁüÀ¸·Î¼­ ¿¹¿Ü¸¦ ó¸®Çϱ⿡ ÀûÀýÇÑ À§Ä¡¿¡¼­ ó¸®ÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. ¾î¶»°Ô ó¸®ÇؾßÇÒÁö Àß ¸ð¸£°Ú´Ù¸é ±×³É ±×´ë·Î ´øÁöµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿¹¿Ü¸¦ Àâ¾Æ¼­ ó¸®ÇؾßÇÏ´Â °÷Àº ÀϹÝÀûÀ¸·Î »ç¿ëÀÚ¿¡°Ô È­¸éÀ» º¸¿©ÁÖ±â Á÷ÀüÀ̸ç À̰ÍÀº À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ MVC(Model-View-Controller) ÆÐÅÏÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù¸é ÄÁÆ®·Ñ·¯¿¡¼­ ÀÌ ¿ªÇÒÀ» ÇÏ°Ô µÈ´Ù. ÄÁÆ®·Ñ·¯¿¡¼­ ¿¹¿Ü¸¦ º¸°í ÆÇ´ÜÀ» ÇØ¼­ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÙ È­¸éÀ» °áÁ¤ÇÏ´Â °ÍÀÌ´Ù. ¼îÇθô¿¡¼­ ¸¶Àϸ®Áö Àû¸³¾×À¸·Î »óǰÀ» ±¸¸ÅÇÏ´Â °úÁ¤À» ¿¹·Î µé¾îº¸ÀÚ. ¸¸¾à °í°´ÀÌ ÀÚ½ÅÀÇ ¸¶Àϸ®Áöº¸´Ù ´õ ¸¹Àº ±Ý¾×ÀÇ »óǰÀ» ±¸¸ÅÇÏ·ÁÇÑ´Ù¸é ±¸¸Å¸¦ ¼öÇàÇÏ´Â ¸ðµ¨ °´Ã¼¿¡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. ±×·¯¸é ÀÌ ¸ðµ¨ Ŭ·¡½º¿¡¼­ ¿¹¿Ü¸¦ ¹Ù·Î ÀâÁö ¸»°í ´øÁ®¼­ ±¸¸Å ÇÁ·Î¼¼½ºÀÇ ÄÁÆ®·Ñ·¯ °´Ã¼¿¡¼­ À̸¦ Àâ¾Æ¼­ ¿¹¿Ü ÆäÀÌÁö·Î Æ÷¿öµå¸¦ ½ÃÄѼ­ ¿¹¿Ü ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ´Â ½ÄÀ¸·Î ÄÚµùÇÏ¸é µÈ´Ù.

À¥»çÀÌÆ® ¹æ¹®°´À» À§ÇØ Áß¿äÇÑ °ÍÀº ÀÚ¹Ù ¿¹¿Ü°¡ ¹ß»ýÇßÀ» ¶§ ÀÌÇØÇÒ ¼ö ¾ø´Â ½Ã½ºÅÛ ¿¡·¯ ¸Þ½ÃÁö³ª ½ºÅÃÆ®·¹À̽º µîÀÇ È²´çÇÑ È­¸éÀÌ ¾Æ´Ñ Ä£ÀýÇÑ ¿¡·¯ ¸Þ½ÃÁö¸¦ Ç¥½ÃÇØÁÖ´Â °ÍÀÌ´Ù. À̸¦ À§Çؼ­´Â ÄÁÆ®·Ñ·¯¿¡¼­µµ ó¸®ÇÏÁö ¸øÇÏ°í ´øÁ®Áø, Á¤¸» ¿¹»ó ¹ÛÀÇ ¿¹¿Ü¸¦ ¸ðµÎ ²ø¾î¸ð¾Æ¼­ ó¸®ÇÏ´Â ºÎºÐÀÌ ÇÊ¿äÇÏ´Ù. Servlet/JSP¿¡¼­´Â ÀÌ·± ºÎºÐÀÇ Ã³¸®¸¦ À§ÇÑ ±â´ÉÀ» ¿©·¯ °¡Áö·Î Á¦°øÇϰí ÀÖ°í ½ºÆ®·¯Ã÷ µîÀÇ ÇÁ·¹ÀÓ¿÷¿¡¼­µµ ´Ù¾çÇÑ ¹æ¹ýÀ» Á¦°øÇϰí ÀÖ´Ù. JSPÀÇ ¿¡·¯ ÆäÀÌÁö ¼³Á¤ÀÌ ±× ÇÑ ¿¹´Ù. ±×·¯³ª, JSPÀÇ ¿¡·¯ ÆäÀÌÁö ¼³Á¤ ¹æ½ÄÀº ¸ðµç JSP ÆäÀÌÁö¿¡ ¼³Á¤ÇØ¾ß ÀÛµ¿ÇÑ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ¸¸¾à ¿¡·¯ ÆäÀÌÁö ÁöÁ¤À» ºü¶ß¸° ÆäÀÌÁö¿¡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù¸é ¼­ºí¸´ ¿£ÁøÀÇ ¿¡·¯ ¸Þ½ÃÁö°¡ ±×´ë·Î À¥»çÀÌÆ® ¹æ¹®°´¿¡°Ô Àü´ÞµÇ°í ¸¸´Ù. ÀÌ·± ºÎºÐÀ» ½±°Ô ó¸®Çϱâ À§ÇÑ ¹æ¹ýÀÌ ÀÖ´Ù. À̰ÍÀº À§¿¡¼­ ¼³¸íÇß´ø web.xmlÀÇ ¿¡·¯ ÆäÀÌÁö ¼³Á¤À» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ¿ì¼± ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ. {{{#!vim x
{{#!vim xml
<error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/common/error.jsp</location>
</error-page>

<error-page>
  <error-code>404</error-code>
  <location>/common/error.jsp</location>
</error-page>
}
}} ÀÌ·¸°Ô ¼³Á¤Çصθé À¥ ¾ÖÇø®ÄÉÀÌ¼Ç Àü¹Ý¿¡¼­ ¹ß»ýÇÏ´Â ¿¹¿Ü Áß java.lang.ExceptionÀ» »ó¼ÓÇÑ ¿¹¿Ü´Â ¸ðµÎ ÀâÇô¼­ /common/error.jsp ÆäÀÌÁö¿¡¼­ ó¸®ÇÏ°Ô µÈ´Ù. ¿¹¿Ü°¡ ¹ß»ýÇϸé request °´Ã¼¿¡ ¿¹¿Ü »óȲ¿¡ ´ëÇÑ Á¤º¸°¡ attribute·Î ÀúÀåµÈ ÈÄ /common/error.jsp·Î Æ÷¿öµùµÇ¾î À̰÷¿¡¼­ request¿¡ ´ã±ä Á¤º¸µéÀ» ¹ÙÅÁÀ¸·Î ¿¡¿Ü 󸮸¦ ÇØÁÙ ¼ö ÀÖ´Ù. ÀÌ °÷¿¡¼­´Â ÀϹÝÀûÀÎ ¿¡·¯ ¸Þ½ÃÁö¸¦ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÖ¸é µÈ´Ù. ÀÚ¹Ù ¿¹¿Ü »Ó ¾Æ´Ï¶ó HTTP ¿¡·¯ Äڵ嵵 Àâ¾Æ³¾ ¼ö ÀÖ´Ù. À̸¦Å×¸é ¾ø´Â ÆäÀÌÁö¸¦ È£ÃâÇØ¼­ 404 ¿¡·¯°¡ ³ª´Â °æ¿ì À̸¦ Àâ¾Æ¼­ ÆäÀÌÁö°¡ ¾ø´Ù´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ Á»´õ Ä£ÀýÇÑ ¸Þ½ÃÁö·Î º¸¿©ÁÙ ¼ö ÀÖ´Ù. µ¡ºÙ¿©, ÀÌ ¿¡·¯ ó¸® ÆäÀÌÁö´Â °¡±ÞÀû ¼ø¼öÇÑ ¼­ºí¸´À¸·Î ¸¸µå´Â °ÍÀÌ ÁÁ´Ù. ½ºÆ®·¯Ã÷ÀÇ ActionÀ¸·Î ¿¡·¯ ÆäÀÌÁö¸¦ ±¸¼ºÇغ» ÀûÀÌ ÀÖ¾ú´Âµ¥ ¼³Á¤ »óÀÇ ¹®Á¦·Î ½ºÆ®·¯Ã÷ÀÇ ?ActionServlet ·ÎµùÀÌ ½ÇÆÐÇÒ °æ¿ì ¿¹¿Ü¸¦ Á¦´ë·Î Ç¥½ÃÇÏÁö ¸øÇÑ´Ù. JSP·Î ¸¸µå´Â °Íµµ ³ª»ÚÁø ¾ÊÀ¸³ª º¹ÀâÇÑ ·ÎÁ÷ÀÌ µé¾î°¥¼ö·Ï ¼­ºí¸´ÀÌ ´õ ÄÚµùÇϱ⠴õ ÆíÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ÀÌ ¿¡·¯ÆäÀÌÁö ÀÚü¿¡¼­ ¶Ç´Ù½Ã ¿¹¿Ü°¡ ¹ß»ýÇϸé ã±â Èûµç °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ ÁÖÀǸ¦ ¸¹ÀÌ ±â¿ï¿©¾ßÇÑ´Ù.

4.2.3 ·Î±ë #
¿¡·¯ ÆäÀÌÁö¿¡¼­ ÇØ¾ßÇÒ ¶Ç Çϳª Áß¿äÇÑ ÀÏÀº ¿¹¿Ü »óȲ¿¡ ´ëÇÑ ·Î±×¸¦ ³²±â´Â °ÍÀÌ´Ù. ¿¡·¯ ÆäÀÌÁö±îÁö ¿Ô´Ù´Â °ÍÀº ÀÌ¹Ì °³¹ßÀÚÀÇ ¿¹»óÀ» ¹þ¾î³­ µ¿ÀÛÀ» Çϰí ÀÖ´Ù´Â °ÍÀ̹ǷΠÀÌ »ç½ÇÀº °³¹ßÀÚ¿¡°Ô »¡¸® Àü´ÞµÇ¾î¾ßÇÑ´Ù. ¶§¹®¿¡ ·Î±×¸¦ Á¦´ë·Î ³²°Ü¼­ Á¶È¸ÇÏ±â ÆíÇÑ ½Ã½ºÅÛÀ» ±¸ÃàÇØ¾ßÇÑ´Ù. ·Î±ë API´Â ¿©·¯ °¡Áö°¡ ÀÖ°í JDK ÀÚü¿¡µµ Æ÷ÇԵǾî ÀÖÁö¸¸ log4j°¡ °¡Àå ³Î¸® »ç¿ëµÇ°í ¼º´É, ±â´É, ¾ÈÁ¤¼º µî ¿©·¯ °¡Áö ¸é¿¡¼­ ´Ù¸¥ °Íµéº¸´Ù ³´´Ù. ¿©·¯ °¡Áö ·Î±ë API¸¦ ¹Ù²ã°¡¸é¼­ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ÀÚÄ«¸£Å¸ÀÇ commons-logging ÇÁ·ÎÁ§Æ®µµ ¾µ¸¸ÇÏ´Ù. ·Î°Å °´Ã¼´Â ÀϹÝÀûÀ¸·Î Ŭ·¡½º ´ç Çϳª¸¦ Ŭ·¡½ºÀÇ Àüü À̸§À¸·Î »ý¼ºÇؼ­ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº commons-loggingÀ» »ç¿ëÇÏ´Â ¿¹´Ù. {{{#!vim ja
{{#!vim java
package com.hangame.avatar;

import ...

public class Avatar {
    private static Log log = LogFactory.getLog(Avatar.class);

    public void changeBackgroud() {
        log.debug("avatar changing..");
    }
}
}
}} ÀÌ·¯¸é ·Î±× °´Ã¼´Â Avatar Ŭ·¡½ºÀÇ Àüü À̸§, com.hangame.avatar.Avatar·Î »ý±ä´Ù. ¸¸¾à ¿©±â¿¡ log4j¸¦ ºÙ¿©¼­ »ç¿ëÇÑ´Ù¸é ´ÙÀ½°ú °°Àº log4j ¼³Á¤À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{#!vim x
{{#!vim xml
<?xml version="1.0" encoding="UTF-8" ?>

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
  <appender name="normal" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="DEBUG"/>
    <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] %m%n"/>
    </layout>
  </appender>
  <appender name="memory" class="com.nhn.logging.MemoryAppender" >
    <param name="Threshold" value="ERROR"/>
     <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%F:%L) %m%n"/>
     </layout>
  </appender>

  <logger name="com.hangame" additivity="false">
    <level value="DEBUG"/>
    <appender-ref ref="normal"/>
    <appender-ref ref="memory"/>
  </logger>
  <logger name="org.apache" additivity="false">
    <level value="INFO"/>
    <appender-ref ref="normal"/>
  </logger>

  <root>
    <level value="WARN"/>
    <appender-ref ref="STDOUT"/>
  </root>
</log4j:configuration>
}
}} À§ÀÇ ¼³Á¤Àº com.hangame¿Í org.apache¶ó´Â À̸§ÀÇ ·Î°Å¸¦ µÎ °³ »ý¼ºÇϰí ÀÖ´Ù. ·Î°ÅÀÇ Æ¯¼ºÀº À̸§À¸·Î »ó¼ÓµÈ´Ù. com.hangame.avatar.Avatar¶ó´Â À̸§ÀÇ ·Î°Å´Â com.hangameÀÇ ¼Ó¼ºÀ» ¸ðµÎ »ó¼Ó ¹Þ°Ô µÈ´Ù. ±×·¯¸é com.hangameÀÌ normal°ú memory¶ó´Â µÎ °³ÀÇ appender¸¦ °®°í Àֱ⠶§¹®¿¡ com.hangame.avatar.Avatar ·Î°Å°¡ ÂïÀº ·Î±×´Â Ç¥ÁØ Ãâ·ÂÀ¸·Îµµ ³ª°¡°í ¸Þ¸ð¸®¿¡µµ ³²°Ô µÈ´Ù. log4jÀÇ ÀÌ·± Ư¼ºÀ» ÀÌ¿ëÇÏ¸é ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ·Î±×¸¦ ³²±æ ¼ö ÀÖ°í ·Î±×¸¦ ¼±ÅÃÀûÀ¸·Î ÄÑ°í ²ô´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ·± ±â´ÉµéÀ» Àß È°¿ëÇÏ¸é ·Î±×¸¦ Á¶È¸Çϱ⠽±°Ô ±¸¼ºÇÒ ¼ö ÀÖ´Ù. À§¿¡¼­ ¿¹¸¦ µç °Íó·³ ¸Þ¸ð¸®¿¡ ÃÖ±Ù ·Î±×¸¦ ³²°ÜµÎ°í À̸¦ Á¶È¸ÇÒ ¼ö ÀÖ´Â ÆäÀÌÁö¸¦ ¸¸µç´Ù°Å³ª µ¥ÀÌÅͺ£À̽º¿¡ ·Î±×¸¦ ½×À» ¼öµµ ÀÖ´Ù. ±×¸®°í ÁÖ±âÀûÀ¸·Î ÀÌ·± ·Î±× Á¶È¸ ÆäÀÌÁö¸¦ ¸ð´ÏÅ͸µÇϸ鼭 ·Î±× ¸®Æ÷Æ®¸¦ °³¹ßÀÚ¿¡°Ô ¸ÞÀÏ µîÀ¸·Î ÀÚµ¿ ¹ß¼ÛÇØÁÖ´Â ½Ã½ºÅÛµµ ±¸»óÇØ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

4.2.4 ¿¹¿Ü ÃßÀû #
¿¹¿Ü ó¸® ½Ã½ºÅÛÀ» ±¸ÃàÇÏ°í ¿¹¿Ü ·Î±×¸¦ ³²°åÀ¸¸é ´ÙÀ½Àº ÀÌ Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î ¹®Á¦Á¡À» ã¾Æµé¾î°¡´Â °ÍÀÌ´Ù. ¿¹¿Ü ÃßÀûÀÇ Ãâ¹ßÁ¡Àº ´ç¿¬È÷ ¿¹¿Ü ½ºÅà Á¤º¸ÀÌ´Ù. ´ëºÎºÐÀÇ ¹®Á¦´Â ¿¹¿Ü ½ºÅà Á¤º¸¸¸ °¡Áö°íµµ ã¾Æ³¾ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÀǿܷΠ¸¹Àº ÇÁ·Î±×·¡¸ÓµéÀÌ ¿¹¿Ü°¡ ¹ß»ýÇßÀ» ¶§ ½ºÅà Á¤º¸¸¦ º¸Áö ¾Ê°í ÀÚ½ÅÀÇ °æÇè¿¡ ÀÇÁöÇØ¼­ ¹®Á¦Á¡À» ¿¹ÃøÇÏ·Á Çϰï ÇÑ´Ù. ÀÌ·± ½ÇÁ¦ »óȲ¿¡ ±â¹ÝÇÏÁö ¾ÊÀº ¿¹ÃøÀº ¿î ÁÁ°Ô ¹®Á¦¸¦ ¹Ù·Î ¤¾î³»´Â °æ¿ìµµ ÀÖ°ÚÁö¸¸ ´ë°³ÀÇ °æ¿ì ½Ã°£¸¸ ³¶ºñÇÏ°Ô µÈ´Ù. ¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ¹Ýµå½Ã ½ºÅà Á¤º¸¿¡ ÂïÈù ¼Ò½ºÀÇ ¶óÀκÎÅÍ »ìÆìº¸´Â ½À°üÀ» ±â¸£´Â °ÍÀÌ ÁÁ´Ù. ½ºÅà Á¤º¸´Â °¡²û ¼ö¹é ¶óÀο¡ À̸¦ Á¤µµ·Î ±æ¾îÁö´Â °æ¿ìµµ °£È¤ ÀÖ´Ù. ÀÌ ¸ðµç Á¤º¸¸¦ ´Ù ã¾Æº¼ ÇÊ¿ä´Â ¾ø´Ù. ½ºÅà Á¤º¸´Â ¸Þ½îµå°¡ È£ÃâµÈ ¿ª¼øÀ¸·Î ÂïÈ÷¹Ç·Î À§¿¡ ÀÖ´Â Á¤º¸°¡ ¿¹¿Ü°¡ ¹ß»ýÇÑ À§Ä¡¿Í °¡±î¿î Á¤º¸´Ù. ±×·¸´Ù°í ´Ã Á¦ÀÏ À§ÀÇ Á¤º¸¸¦ ºÁ¾ßÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì ½ºÅà Á¤º¸´Â ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ Å¬·¡½º »Ó ¾Æ´Ï¶ó ¼­ºí¸´ ¿£ÁøÀ» Æ÷ÇÔÇÑ ¿©·¯ °¡Áö Ŭ·¡½ºÀÇ Á¤º¸µéÀÌ °°ÀÌ ´ã°Ü ÀÖ´Ù. ÀÌ·± Á¤º¸µéÀº º¸Åë º¼ Çʿ䰡 ¾ø°í ½ºÅà Á¤º¸¿¡¼­ ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ Å¬·¡½º Áß Á¦ÀÏ À§¿¡ ÀÖ´Â °Í, À̰ÍÀÌ ¿¹¿Ü°¡ ¹ß»ýÇÑ ÁöÁ¡À̸ç À̰÷À» ã¾Æº¸¸é ´ëºÎºÐÀÇ ¹®Á¦Á¡Àº Á¤È®ÇÏ°Ô ÃßÀû °¡´ÉÇÏ´Ù.

¶Ç ÇÑ °¡Áö ÀÚ¹Ù Ãʺ¸ÀÚ¸¦ ±«·ÓÈ÷´Â ¹®Á¦´Â ?NullPointerExceptionÀÌ´Ù. »ç½Ç À̰ÍÀº Ãʺ¸ÀÚ¿¡°Ô´Â ¾ÆÁÖ ±î´Ù·Î¿î ¹®Á¦Áö¸¸ Á¶±Ý¸¸ ¾Ë¸é °¡Àå ã±â ½¬¿î ¹®Á¦ Áß Çϳª°¡ ?NullPointerExceptionÀÌ´Ù. ?NullPointerExceptionÀº °´Ã¼ÀÇ ¸â¹ö º¯¼ö³ª ¸Þ½îµå¸¦ ÀÌ¿ëÇÏ·Á°í ÇÒ ¶§ ±× °´Ã¼°¡ nullÀÎ °æ¿ì¿¡ ¹ß»ýÇÑ´Ù. µû¶ó¼­ ?NullPointerExceptionÀÌ ¹ß»ýÇϸé À§ÀÇ ¹æ¹ý´ë·Î ¿¹¿Ü°¡ ¹ß»ýÇÑ ¶óÀÎÀ» ã¾Æµé¾î°£ ´ÙÀ½ ±× ¶óÀο¡¼­ ¸â¹ö ÁöÁ¤ ¿¬»êÀÚ(.) ¾Õ¿¡ ÀÖ´Â °´Ã¼¸¦ º¸¸é µÈ´Ù. ÀÌ »ç½Ç¸¸ ¾Ë°í À־ ?NullPointerExceptionÀÌ ¹ß»ýÇßÀ» ¶§ ¾î¶² °´Ã¼°¡ nullÀÎÁö¸¦ ½±°Ô ã¾Æ³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

°£È¤ ?NullPointerExceptionÀÌ ½È¾î¼­ ´ÙÀ½°ú °°Àº Äڵ带 ÀÛ¼ºÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. {{{#!vim ja
{{#!vim java
    if ("Y".equals(param)) doSomthing();
    else doOther();
}
}} ÀÌ·± ÄÚµå´Â Á¶½ÉÇØ¼­ ½á¾ßÇÑ´Ù. paramÀÇ null üũ°¡ ±ÍÂú¾Æ¼­ ÀÌ·± ½ÄÀÇ Äڵ带 ¾²°ï Çϴµ¥ ¸¸¾à paramÀÇ °ªÀÌ YÀÎ °æ¿ì´Â doSomething()À» ½ÇÇàÇϰí NÀ̳ª nullÀ̸é doOther()¸¦ ½ÇÇàÇØ¾ßÇÏ´Â °æ¿ì¶ó¸é ÀÌ ÄÚµå´Â ¹®Á¦°¡ ¾ø´Ù. ±×·¯³ª, ¸¸¾à paramÀº nullÀÌ¸é ¾ÈµÇ´Â »óȲÀ̶ó¸é ¾î¶»°Ô µÉ±î? ´Ù¸¥ ºÎºÐÀÇ ¹ö±×·Î param¿¡ nullÀÌ µé¾î¿Íµµ ÇÁ·Î±×·¡¸Ó´Â À̰ÍÀ» ¾Ë¾ÆÂ÷¸®Áö ¸øÇÏ°í ³Ñ¾î°¡°Ô µÈ´Ù. Áï, ¹ö±×¸¦ ÀºÆóÇÏ´Â Äڵ尡 µÈ´Ù. ´çÀåÀÇ ¹®Á¦¸¦ ¹ß»ýÇÏÁö ¾Ê´õ¶óµµ ÀÌ·± ÄÚµå´Â ³ªÁß¿¡ ã±â Èûµç ¹®Á¦¸¦ À¯¹ßÇÒ ¼ö ÀÖ´Ù. ÀÌ·± °æ¿ì´Â ±×³É ?NullPointerExceptionÀÌ ¹ß»ýÇϵµ·Ï ³»¹ö·Á µÎ¸é param¿¡ null °ªÀÌ µé¾î¿ÔÀ» ¶§ ´Ù¸¥ ºÎºÐ¿¡ ¹ö±×°¡ Àֱ⠶§¹®À̶ó´Â »ç½ÇÀ» °¨ÁöÇÒ ¼ö ÀÖ´Ù. »óȲ¿¡ µû¶ó À§¿Í °°Àº Äڵ带 ½áµµ µÇ´ÂÁö¸¦ ½ÅÁßÈ÷ °ËÅäÇÑ ÈÄ »ç¿ëÇØ¾ßÇÑ´Ù. ¿¹¿Ü ¹ß»ýÀÌ µÎ·Á¿ö¼­ ¹ö±×¸¦ ÀºÆóÇÒ ¼ö ÀÖ´Â Äڵ带 ¸¸µéÁö ¸»ÀÚ.

4.2.5 ÇÑ±Û ¹®Á¦ #
À¥ ÇÁ·Î±×·¡¸ÓµéÀ» ±«·Ó°Ô ÇÏ´Â ¹®Á¦¸¦ ²ÅÀ» ¶§ ºüÁöÁö ¾Ê´Â °ÍÀÌ ÇÑ±Û ¹®Á¦´Ù. ÇÑ±Û ¹®Á¦°¡ Áö±Ýó·³ °ñÄ¡¾ÆÇÁ°Ô µÈ µ¥´Â ¿ª»çÀûÀ¸·Î º¹ÀâÇÑ ¿øÀεéÀÌ ¾ôÇô Àִµ¥ ÀÌ·± ¹®Á¦´Â Á¢¾îµÎ°í ÀÚ¹Ù À¥ ÇÁ·Î±×·¡¸Ó·Î¼­ ÇÑ±Û ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ¾Ë¾Æ¾ßÇÏ´Â °ÍµéÀ» »ìÆìº¸ÀÚ.

ÀÚ¹Ù´Â ¹®ÀÚ¿­°ú ¹ÙÀÌÆ® ½ºÆ®¸²À» ´Ù¸£°Ô Ãë±ÞÇÑ´Ù. ÀÚ¹ÙÀÇ ½ºÆ®¸µÀº À¯´ÏÄÚµåÀÇ ¹®ÀÚ¼ÂÀ» »ç¿ëÇÏ¸ç ¹®ÀÚ¿­À» ÆÄÀÏ¿¡ ¾²°Å³ª ³×Æ®¿öÅ©·Î Àü¼ÛÇÏ´Â µî ½ÇÁ¦ ÀÔÃâ·ÂÀÌ ÀϾ ¶§´Â ¹®ÀÚ¿­À» ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î º¯È¯ÇÏ°Ô µÈ´Ù. ÀÌ ¶§ ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î º¯È¯ÇÏ´Â ±ÔÄ¢ÀÌ ÀÎÄÚµùÀÌ´Ù. µû¶ó¼­ ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î Àü´ÞµÈ °ÍÀ» ¹®ÀÚ¿­·Î ¹Ù²Ù°Å³ª ¹®ÀÚ¿­À» ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î Àü´ÞÇÒ ¶§´Â ¹Ýµå½Ã ÀÎÄÚµùÀ» ÁöÁ¤ÇؾßÇÑ´Ù. ÀÌ·± ÀÎÄÚµù Áß ÇѱÛÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Â ÀÎÄÚµùÀº ÀÚ¹Ù¿¡¼­ »ç¿ëÇÏ´Â À̸§À» ±âÁØÀ¸·Î Çϸé EUC-KR, ?MS949, UTF-8, UTF-16 Á¤µµ°¡ ÀÖ´Ù. EUC-KRÀº ?KSC5601-1987¿¡ ±â¹ÝÇÑ ÀÎÄÚµùÀ¸·Î ÇѱÛÀÇ ¸ðµç ¹®ÀÚ¸¦ ´Ù Ç¥ÇöÇÒ ¼ö ¾ø´Ù. ?MS949´Â EUC-KRÀ» È®ÀåÇØ¼­ ¸ðµç ÇѱÛÀ» Ç¥ÇöÇÒ ¼ö ÀÖÁö¸¸ ºñÇ¥ÁØÀ̰í ÄÚµå ÀÚü¿¡ ±â¼úÀûÀÎ °áÇÔÀÌ ¸¹´Ù. UTF-8°ú UTF-16Àº À¯´ÏÄÚµåÀÇ ÀÎÄÚµùµéÀÌ¸ç ¸ðµç ÇѱÛÀ» Ç¥ÇöÇÒ ¼ö ÀÖ°í Ç¥ÁØÀ̸ç ÇÑ±Û ÀÌ¿ÜÀÇ ´Ù¸¥ ij¸¯Åͼ°ú ÇÔ²² Ç¥ÇöÀÌ °¡´ÉÇÏ´Ù. º¸Åë ¸¹ÀÌ ¾²ÀÌ´Â EUC-KRÀº RFC Ç¥ÁØ ÀÎÄÚµùÀ̱ä Çϳª ÇѱÛÀÇ È®Àå ¹®ÀÚµéÀ» Á¦´ë·Î Ç¥½ÃÇÏÁö ¸øÇÑ´Ù. ±×·¡¼­ ÀÚ¹Ù À¥ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ?MS949¸¦ ¸¹ÀÌ ¾²°Ô µÈ´Ù. ÀÚ¹Ù¿¡¼­ ½ºÆ®¸µ °´Ã¼¸¦ »ý¼ºÇÒ ¶§´Â ÀÌ Áß¿¡ Çϳª·Î ÀÎÄÚµùÀ» Á༭ »ý¼ºÇØ¾ß ÇѱÛÀ» Ç¥ÇöÇÒ ¼ö ÀÖ°Ô ÀÎÄÚµùµÈ´Ù.

À¥ ¼­¹ö·Î Àü´ÞµÇ´Â ¿äûÀº Ŭ¶óÀ̾ðÆ®ÀÇ À¥ºê¶ó¿ìÀú°¡ ¹®ÀÚ¿­À» ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î ÀÎÄÚµùÇϴµ¥ ÀÌ ¶§ »ç¿ëÇÏ´Â ÀÎÄÚµùÀº ÀϹÝÀûÀ¸·Î ÇÑ±Û À©µµ¿ìÀÇ ±âº» ÀÎÄÚµùÀÎ ?MS949´Ù. ±×·±µ¥, ¼­ºí¸´ ¿£Áø¿¡¼­ ¿äûÀ» ó¸®Çϴµ¥ »ç¿ëÇÏ´Â ±âº» ÀÎÄÚµùÀÌ ISO-8859-1À̱⠶§¹®¿¡ ¾Æ¹« °Íµµ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ?MS949·Î ÀÎÄÚµùµÈ ¹ÙÀÌÆ®µéÀ» ISO-8859-1 ÀÎÄÚµùÀÇ ½ºÆ®¸µ °´Ã¼·Î ¸¸µé±â ¶§¹®¿¡ ÇѱÛÀÌ ±úÁ®º¸ÀÌ°Ô µÈ´Ù. µû¶ó¼­ ±âº» ÀÎÄÚµùÀ» ?MS949·Î ÁöÁ¤ÇØÁÖ¸é ÀÎÄÚµùÀÌ º¸Á¸µÈ »óÅ·ΠÇѱÛÀÌ ±úÁöÁö ¾Ê°Ô µÈ´Ù. ?HttpServletRequest.setCharacterEncoding() ¸Þ½îµå¿¡¼­ À̰ÍÀ» ÁöÁ¤ÇØÁÙ ¼ö ÀÖ´Ù. ±×·¯³ª, À̰Ϳ¡µµ ¾à°£ ¹®Á¦°¡ ÀÖ´Ù. ¼­ºí¸´ ½ºÆå»ó ÀÌ ¸Þ½îµå´Â POST ¿äû¿¡¸¸ Àû¿ëµÈ´Ù. Áï, POST ¿äûÀÇ ÆÄ¶ó¹ÌÅÍ´Â setCharacterEncdoing¿¡¼­ ÁöÁ¤ÇÑ ÀÎÄÚµùÀ¸·Î ½ºÆ®¸µ °´Ã¼°¡ »ý¼ºµÇ±â ¶§¹®¿¡ ÇѱÛÀ» º¸Á¸ÇÒ ¼ö ÀÖÀ¸³ª GET ¿äûÀº setCharacterEncodingÀÇ Àû¿ëÀ» ¹ÞÁö ¾Ê±â ¶§¹®¿¡ GETÀ¸·Î ¹ÞÀº ÆÄ¶ó¹ÌÅÍ´Â ÀÎÄÚµù º¯È¯À» ´Ù½Ã ÇØÁÖ¾î¾ßÇÑ´Ù. ´Ù¸¸, À̰ÍÀº ¼­ºí¸´ ¿£Áø¿¡ µû¶ó ´Ù¸£´Ù. ÅèĹÀÇ °æ¿ìµµ 4.1 ¹öÀü°ú 5.0 ¹öÀüÀÌ ´Ù¸£°Ô µ¿ÀÛÇÏ´Ï ÁÖÀǰ¡ ÇÊ¿äÇÏ´Ù.

À¥ ¼­¹ö¿¡¼­ ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î ÀÀ´äÀ» ÇÒ ¶§´Â ¹Ý´ëÀÇ °úÁ¤ÀÌ´Ù. ÀÚ¹ÙÀÇ ½ºÆ®¸µ °´Ã¼°¡ ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î º¯È¯µÇ¸ç ÀÌ ¶§ ¿ª½Ã ÀÎÄÚµùÀ» ÁöÁ¤ÇؾßÇÑ´Ù. ÀÌ ÀÎÄÚµùÀº JSP ÆäÀÌÁö¿¡¼­ ÆäÀÌÁö Áö½ÃÀÚÀÇ pageEncoding ¼Ó¼ºÀ» ÅëÇØ ÁöÁ¤À» ÇØÁÙ ¼ö ÀÖ°í ¼­ºí¸´ 2.4 ½ºÆå¿¡¼­´Â ?HttpServletResponse.setCharacterEncodingÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. HTTP ¿äûÀ» Àд °úÁ¤°ú ¿ª¼øÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ±×¸®°í, À¥ ¼­¹ö¿¡¼­ ¿äûÀ» ÀÐÀ» ¶§ ?MS949¸¦ ÁöÁ¤ÇØ ÁÖµíÀÌ Å¬¶óÀ̾ðÆ®ÀÇ À¥ºê¶ó¿ìÀúµµ À¥ ¼­¹ö¿¡¼­ »ý¼ºÇÑ ÀÀ´äÀ» Á¤È®ÇÏ°Ô ÀÐÀ¸·Á¸é ¾î¶² ÀÎÄÚµùÀ» »ç¿ëÇØ¾ßÇÏ´ÂÁö ¾Ë¾Æ¾ßÇÑ´Ù. À̰ÍÀ» ÁöÁ¤ÇØÁÖ´Â °ÍÀÌ HTMLÀÇ Content-TypeÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. {{{#!vim ht
{{#!vim html
  <meta http-equiv="Content-Type" content="text/html;charset=euc-kr" /> 
}
}} ¿©±â¼­ ÁöÁ¤ÇÏ´Â charsetÀº ¿øÄ¢ÀûÀ¸·Î´Â ´ç¿¬È÷ À¥ ¼­¹ö¿¡¼­ ÀÀ´ä °´Ã¼¸¦ »ý¼ºÇÒ ¶§ ÁöÁ¤ÇÑ ÀÎÄÚµù°ª°ú °°¾Æ¾ß Á¦´ë·Î Çѱ۷ΠÀÐÀ» ¼ö ÀÖ´Ù. ±×·¯³ª, ¿©±â ÁöÁ¤ÇÏ´Â charsetÀÌ RFC Ç¥ÁØ ¹®ÀÚ¼ÂÀÌ ¾Æ´Ò °æ¿ì ºê¶ó¿ìÀú¿¡ µû¶ó ÀνÄÀ» ¸øÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼­ ?MS949·Î ÀÎÄÚµùÇß´Ù¸é ?MS949¸¦ ÁöÁ¤ÇØ¾ß Á¤»óÀÌÁö¸¸ ?MS949°¡ RFC Ç¥ÁØÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù. ±×·¸´Ù°í ÀÀ´äÀÇ ÀÎÄÚµùÀ» EUC-KR·Î ÁöÁ¤ÇÏ°Ô µÇ¸é È®Àå ÇѱÛÀ» Ç¥½ÃÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¹®Á¦°¡ µÈ´Ù. ±×·¡¼­ ÆäÀÌÁö ÀÎÄÚµùÀº ?MS949·Î ÇÏÁö¸¸ Content-Type¿¡´Â euc-krÀ» ÁöÁ¤ÇØÁÖ°Ô µÇ´Â °ÍÀÌ´Ù. ¹°·Ð ÀÌ·¸°Ô µÇ¸é °æ¿ì¿¡ µû¶ó È®Àå ÇѱÛÀÌ ±úÁú ¼ö ÀÖÁö¸¸ ´ÙÇེ·´°Ôµµ ´ëºÎºÐÀÇ ºê¶ó¿ìÀú¿¡¼­ ÀÌ·¸°Ô ÁöÁ¤Çϸé Àß µ¿ÀÛÇÑ´Ù.

»ç½Ç ÀÌ ºÎºÐÀº ÀÀ´ä ½ºÆ®¸²¿¡ Àû¿ëµÇ´Â ÀÎÄÚµù°ú HTML Content-Type¿¡ ÁöÁ¤ÇÏ´Â ÀÎÄÚµùÀÌ °°±â¸¸ ÇÏ¸é µÇ±â ¶§¹®¿¡ ±»ÀÌ ?MS949¸¦ »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø°í UTF-8 µîÀÇ ÀÎÄÚµùÀ» »ç¿ëÇØµµ ¹«¹æÇÏ´Ù. µû¶ó¼­ ÀÀ´ä ½ºÆ®¸²ÀÇ ÀÎÄÚµùµµ UTF-8·Î Çϰí Content-Typeµµ UTF-8·Î ÁöÁ¤ÇÏ´Â °ÍÀÌ °¡Àå È®½ÇÇÑ ¹æ¹ýÀÏ ¼ö ÀÖ´Ù. ¶ÇÇÑ, HTMLÀÇ Content-Type¿¡ UTF-8ÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÌ ÆäÀÌÁö¿¡¼­ ÆûÀ» Àü¼ÛÇÒ °æ¿ì¿¡µµ UTF-8·Î ÀÎÄÚµùµÇ¾î ¿äûÀ» ÆÄ½ÌÇÏ´Â ÂÊ¿¡¼­µµ UTF-8À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. À¯´ÏÄÚµåÀÇ ÀÎÄÚµùµéÀÎ UTF-8, UTF-16Àº ÇÑ ÀÎÄÚµùÀ¸·Î ´Ù±¹¾î¸¦ ó¸®ÇÒ ¼ö Àֱ⠶§¹®¿¡ ´Ù±¹¾î Áö¿øÀÌ ÇÊ¿äÇÑ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ½ÇÁ¦·Î UTF-8·Î ÀÛ¼ºµÈ °ÍÀÌ ¸¹´Ù. ´Ù±¹¾î Áö¿øÀÌ ÇÊ¿ä ¾ø´Ù°íÇØµµ UTF-8À» »ç¿ëÇÏ´Â °ÍÀÌ ¿ÀÈ÷·Á ÇÑ±Û ¹®Á¦¸¦ ´õ ½±°Ô ÇØ°áÇÏ´Â ¹æ¹ýÀÌ µÉ ¼ö ÀÖ´Ù.

À¥ »Ó ¾Æ´Ï¶ó µ¥ÀÌÅͺ£À̽º³ª ÆÄÀÏ¿¡ ÀÔÃâ·ÂÀ» ÇÒ ¶§µµ ¸¶Âù°¡ÁöÀÇ ¿ø¸®°¡ Àû¿ëµÈ´Ù. »ç¿ëÇÏ´Â ÀÎÄÚµùÀÌ ´Ù¸£¸é º¯È¯ °úÁ¤À» °ÅÃľßÇÑ´Ù. À̰ÍÀº ¸®´ª½º³ª À¯´Ð½º¿¡¼­ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. ¸®´ª½º´Â ?MS949¸¦ Áö¿øÇÏÁö ¾Ê°í EUC-KR¸¸ Áö¿øÇϱ⠶§¹®ÀÌ´Ù. µû¶ó¼­ À©µµ¿ì¿¡¼­ °³¹ßÇÏ°í ¸®´ª½º¿¡¼­ µ¹¸®´Â °æ¿ì ¹®Á¦°¡ µÇ´Â °æ¿ì°¡ °£È¤ ÀÖ´Ù. ?MS949°¡ ¶Ç Çϳª ¹®Á¦°¡ µÇ´Â ¿µ¿ªÀº XML ÆÄ¼­´Ù. ÇöÀç °¡Àå ³Î¸® »ç¿ëµÇ´Â XML ÆÄ¼­´Â XercesÀε¥ ÀÌ ÆÄ¼­´Â RFC Ç¥ÁØ ¹®Àڼ ¿Ü¿¡´Â Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ?MS949 ÀÎÄÚµùÀº ÆÄ½Ì ¿¡·¯°¡ ³­´Ù. ±×·± ¹Ý¸é JDK 1.4¿¡ Æ÷ÇÔµÈ ÆÄ¼­ÀÎ CrimsonÀº ³×ÀÓ½ºÆäÀ̽º ÆÄ½Ì¿¡ ¹ö±×°¡ ÀÖ´Ù. ?MS949¸¦ XML ÀÎÄÚµùÀ¸·Î ¾µ °æ¿ì XML ÆÄ¼­ ¼±ÅÃÀÌ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ´ÙÇེ·´°Ôµµ JDK 5.0¿¡ Æ÷ÇÔµÈ ÆÄ¼­´Â Xerces¸¦ ½ã¿¡¼­ ÆÐÄ¡ÇÑ °ÍÀε¥ À̰ÍÀº ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù. ÇÏÁö¸¸ ¿©ÀüÈ÷ ¸¹Àº ¿ÀǼҽº ¶óÀ̺귯¸®µéÀÌ Xerces¸¦ »ç¿ëÇϰí Àֱ⠶§¹®¿¡ ¹®Á¦°¡ µÇ´Â °æ¿ì´Â °è¼Ó ³ªÅ¸³¯ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ°Í ¶§¹®¿¡¶óµµ UTF-8À» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Ù.

ÀÚ¹Ù¿¡¼­ÀÇ ÇÑ±Û ¹®Á¦´Â ¹®ÀÚ¿­°ú ¹ÙÀÌÆ®½ºÆ®¸²ÀÇ º¯È¯¿¡ ÀÎÄÚµùÀÌ ÁÖ¾îÁ®¾ßÇÑ´Ù´Â »ç½Ç¸¸ »ý°¢ÇÏ¸é ´Ù ½±°Ô ÇØ°á°¡´ÉÇÏ´Ù. ¿ª½Ã ±âº»ÀÌ Àß °®ÃçÁ® ÀÖÀ¸¸é ÇÑ±Û ¹®Á¦µµ ½±°Ô ÇØ°áÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.

4.2.6 URL ÀÎÄÚµå #
URL ÀÎÄÚµùÀÌ ÇÊ¿äÇÑ °ÍÀº URL¿¡ »ç¿ë°¡´ÉÇÑ ¹®ÀÚ°¡ Á¦ÇѵǾî Àֱ⠶§¹®ÀÌ´Ù. URL ½ºÆå(RFC 1738)¿¡ Á¤ÀÇµÈ ¹Ù·Î´Â URL¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹®ÀÚ´Â ¾ËÆÄºª, ¼ýÀÚ¿Í ¸î °¡ÁöÀÇ Æ¯¼ö¹®ÀÚ »ÓÀÌ´Ù. µû¶ó¼­ ´Ù¾çÇÑ ¹®ÀÚµéÀ» URL·Î Àü´ÞÇÏ·Á¸é URL¿¡¼­ Çã¿ëÇÏ´Â ¹®ÀÚ·Î º¯È¯½ÃÄѼ­ Àü´ÞÇØ¾ßÇÑ´Ù. À̰ÍÀº GET ¿äûÀÇ ÆÄ¶ó¹ÌÅÍ·Î °ªÀ» Àü´ÞÇÏ·ÁÇÒ ¶§ ¹®Á¦°¡ µÈ´Ù. ¿¹¸¦ µé¾î http://website.com/process.jsp¿¡ ·Î±×ÀÎ ¾ÈµÈ »óÅ¿¡¼­ Á¢±ÙÇϸé ÀÚµ¿À¸·Î ·Î±×ÀÎ ÆäÀÌÁöÀÎ http://website.com/login.jsp·Î ¸®´ÙÀÌ·ºÆ®µÈ ÈÄ ·Î±×ÀÎÀ» ÇÏ¸é ¿ø·¡ ¿äûÇß´ø ÆäÀÌÁö·Î ´Ù½Ã ¸®´ÙÀÌ·ºÆ®µÇµµ·Ï ÇØ¾ßÇÑ´Ù°í ÇÏÀÚ. ±×·¯¸é /process.jsp¿¡¼­´Â ·Î±×ÀÎ ÆäÀÌÁö·Î ¸®´ÙÀÌ·ºÆ®½ÃŰ¸é¼­ ÆÄ¶ó¹ÌÅÍ·Î ÇöÀç ¿äûÇÑ URL, Áï /process.jsp¸¦ ³Ñ°ÜÁÖ°í login.jsp¿¡¼­´Â ·Î±×ÀΠ󸮰¡ ³¡³­ ÈÄ ÀÌ URL·Î ´Ù½Ã ¸®´ÙÀÌ·ºÆ®¸¦ ½ÃŰ¸é µÈ´Ù. ¿©±â¼­ /process.jsp¿¡¼­´Â http://website.com/login.jsp?redirect=http://website.com/process.jsp¿Í °°Àº Çü½ÄÀ¸·Î ¸®´ÙÀÌ·ºÆ®¸¦ ÇØÁÖ¸é µÉ °ÍÀÌ´Ù. ¿©±â¼­ ¹®Á¦´Â redirect ÆÄ¶ó¹ÌÅÍÀÇ °ªÀÌ URLÀ̱⠶§¹®¿¡ URL ¾È¿¡ URLÀÌ µé¾î°£ ÇüŰ¡ µÇ¾î Á¦´ë·Î ÆÄ½ÌÀÌ µÇÁö ¾Ê´Â´Ù. ±×·¡¼­ ÆÄ¶ó¹ÌÅÍ·Î ³Ñ°Ü¾ßÇÏ´Â URL ºÎºÐÀ» ?URLEncoder·Î ÀÎÄÚµùÀ» ÇØ¼­ http://website.com/login.jsp?redirect=http%3A%2F%2Fwebsite.com%2Fprocess.jsp¿Í °°Àº ÇüÅ·Π³Ñ°Ü¾ßÇÑ´Ù. ÀÌ °ªÀ» ¹Þ´Â ºÎºÐ¿¡¼­´Â ´Ù½Ã µðÄÚµùÀ» ÇØÁÙ Çʿ䰡 ¾ø´Ù. URLÀº ÀÚµ¿À¸·Î À¥ ¼­¹ö¿¡¼­ ÆÄ½ÌÇÒ ¶§ µðÄÚµùÀ» ÇØÁֱ⠶§¹®ÀÌ´Ù. URLÀ» ÅëÇØ¼­ GET ¿äûÀÇ ÆÄ¶ó¹ÌÅÍ·Î º¸³»¾ßÇÏ´Â °ªÀº ¹Ýµå½Ã URL ÀÎÄÚµùÀ» °ÅÃľßÇÑ´Ù´Â »ç½Ç¸¸ ±â¾ïÇϵµ·Ï ÇÏÀÚ. Âü°í·Î ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­µµ escape, unescape ÇÔ¼ö¸¦ ÅëÇØ¼­ URL ÀÎÄÚµù, µðÄÚµù°ú À¯»çÇÑ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Ù.

4.2.7 Ŭ·¡½ºÆÐ½ºÀÇ ¸®¼Ò½º »ç¿ë¹ý #
À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº º¸Åë ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼³Á¤À» ´ã°í ÀÖ´Â ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù. web.xml, struts-config.xml µîÀÇ ¼³Á¤ ÆÄÀϵéÀº º¸Åë À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ /WEB-INF/¿¡ À§Ä¡ÇÏ°Ô µÇ´Âµ¥ ±× ¿Ü¿¡ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ëÇÏ´Â ÆÄÀϵéÀº ¾îµð¿¡ ³õ°í »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÒ±î? °¡Àå °ü¸®Çϱ⠽±°í ºÎ°¡ÀûÀÎ ÀÛ¾÷ÀÌ ÀûÀº ¹æ¹ýÀº Ŭ·¡½ºÆÐ½º¿¡ µÎ´Â °ÍÀÌ´Ù. /WEB-INF/classes¿¡ µÎ¸é ÀÚ¹ÙÀÇ Å¬·¡½º·Î´õ¸¦ ÀÌ¿ëÇØ¼­ ÀÌ·± ÆÄÀϵ鿡 Á¢±ÙÇÒ ¼ö ÀÖ´Ù. log4j µî ¸¹Àº ¶óÀ̺귯¸®µéÀÌ ÀÚ½ÅÀÇ ¼³Á¤ ÆÄÀÏÀ» Ŭ·¡½ºÆÐ½º¿¡¼­ °¡Àå ¸ÕÀú ã°Ô µÈ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦¸¦ º¸ÀÚ {{{#!vim ja
{{#!vim java
    public File getFile(String name) {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        return new File(loader.getResource(name).getFile());
    }

    public void doSomeProcess() {
        File file = getFile("config.xml");
    }
}
}} À§ÀÇ ÄÚµå´Â Ŭ·¡½ºÆÐ½º¿¡¼­ config.xmlÀ» Àд´Ù. À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±âº» Ŭ·¡½ºÆÐ½º´Â /WEB-INF/classesÀ̹ǷΠ±âº»ÀûÀ¸·Î ¿©±â¼­ ã°Ô µÈ´Ù. À̰ÍÀ¸·Î jar ÆÄÀÏ ¾ÈÀÇ ³»¿ëµµ ÀÐÀ» ¼ö ÀÖ´Ù. ÀÌ °æ¿ì´Â ?ClassLoader.getResourceAsStreamÀ» ÅëÇØ¼­ ½ºÆ®¸²À¸·Î ÆÄÀÏ ³»¿ëÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ IDE³ª maven µîÀÇ ºôµå Åø¿¡¼­´Â ¼Ò½º °æ·Î¿¡ ÀÖ´Â ÆÄÀϵé Áß ÀÚ¹Ù ¼Ò½º°¡ ¾Æ´Ñ ÆÄÀϵéÀ» ÀÚµ¿À¸·Î Ŭ·¡½ºÆÐ½º·Î º¹»çÇØÁֹǷΠÀÌ¿ëÇϱ⵵ Æí¸®ÇÏ´Ù. ÀÚÄ«¸£Å¸ÀÇ commons-discovery ÇÁ·ÎÁ§Æ®´Â ÀÌ·± ±â´ÉµéÀ» ¸ð¾Æ¼­ Æí¸®ÇÏ°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô Á¦°øÇϰí ÀÖ´Ù.

4.2.8 ¼­ºí¸´/¾×¼Ç ¸â¹ö º¯¼ö °øÀ¯ ¹®Á¦ #
JSP°¡ º¸±ÞµÇ±â ½ÃÀÛÇÏ´ø Ãʱ⿡ ¸¹ÀÌ ¹ß»ýÇÏ´ø ¹®Á¦·Î À¥»çÀÌÆ®ÀÇ ÀÌ¿ëÀÚ°¡ Á¢¼ÓÇßÀ» ¶§ ÀÚ½ÅÀÇ Á¤º¸°¡ ¾Æ´Ñ ´Ù¸¥ »ç¶÷ÀÇ Á¤º¸°¡ ³ªÅ¸³ª¸é¼­ ¾ûŰ´Â °æ¿ì°¡ ÀÖ¾ú´Ù. À̰ÍÀÇ ¿øÀÎÀº ¼­ºí¸´¿¡ ´ëÇÑ ÀÌÇØ°¡ ºÎÁ·Çؼ­ ¹ß»ýÇÑ °ÍÀ̾ú´Ù. ´ÙÀ½ÀÇ ¿¹Á¦¸¦ º¸ÀÚ. {{{#!vim ja
{{#!vim java
public class BadServlet extends HttpServlet {

    Map userInfo;
    
    protected void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        
        String username = req.getParameter("name");
        Map userInfo = UserManager.getUserInfo(username);
        req.setAttribute("userInfo", username);
    }
}
}
}} ¾óÇÍ º° ¹®Á¦°¡ ¾ø¾îº¸ÀÌÁö¸¸ ÀÌ ÄÚµå´Â ½É°¢ÇÑ ¹®Á¦°¡ ÀÖ´Ù. ¼­ºí¸´Àº º¸Åë ¼­ºí¸´ ¿£Áø¿¡¼­ Çϳª¸¸ »ý¼ºµÇ°í ÇÑ ¹ø »ý¼ºµÈ ¼­ºí¸´ °´Ã¼°¡ °è¼Ó ÀçȰ¿ëµÈ´Ù. ¶§¹®¿¡ A¿Í B¶ó´Â µÎ »ç¿ëÀÚ°¡ µ¿½Ã¿¡ ÀÌ ¼­ºí¸´À» È£ÃâÇÏ°Ô µÇ¸é AÀÇ È£ÃâÀ» ¼öÇàÇÏ´Â Áß¿¡ BÀÇ È£ÃâÀÌ userInfoÀÇ °ªÀ» ¹Ù²ã¹ö¸± ¼ö ÀÖ´Ù. ±×·¯¸é A´Â BÀÇ Á¤º¸¸¦ º¸°Å³ª ±× ¹Ý´ëÀÇ °æ¿ì°¡ »ý±æ ¼ö ÀÖ´Â °ÍÀÌ´Ù. È¥ÀÚ¼­ Å×½ºÆ®ÇÒ ¶§´Â ÇÑ ¹ø¿¡ ÇÑ ¾²·¹µå¸¸ service ¸Þ½îµå¸¦ È£ÃâÇϱ⠶§¹®¿¡ ÀÌ·± ¹®Á¦°¡ Àß µå·¯³ªÁö ¾Ê±â ¶§¹®¿¡ º° ¹®Á¦ ¾ø´Â ÁÙ ¾Ë°í ÀÖ´Ù°¡ ¼­ºñ½º¸¦ ¿ÀÇÂÇÏ°í ³ª¸é ¹®Á¦°¡ µÇ´Â °æ¿ì°¡ ÀÖÀ¸¹Ç·Î Á¶½ÉÇØ¾ßÇÑ´Ù. JSP¿¡¼­ <%! %>¸¦ ÅëÇØ¼­ ¼±¾ðÇÏ´Â ³»¿ëµµ ¸¶Âù°¡Áö ¹®Á¦°¡ ¹ß»ýÇϹǷΠÁÖÀÇÇÏÀÚ. ÀÌ·± ³»¿ë ¿ª½Ã Àڹ٠Ŭ·¡½º¿Í ¸â¹ö º¯¼öÀÇ ±âº» °³³äÀ» ÀÌÇØÇÏ°í ¼­ºí¸´ ½ºÆå¸¸ ÇÑ ¹ø Àо´Ù¸é ±Ý¹æ ¾Ë ¼ö ÀÖ´Â ³»¿ëÀÌ´Ù.

4.3 °á·Ð, »ý°¢Çϱâ #

ÀÌ ³»¿ëµéÀ» ÀÐÀ¸¸é¼­ ¸ð¸£´Â ³»¿ëÀÌ Çϳªµµ ¾ø¾ú´Ù¸é ÀÚ¹Ù À¥ ÇÁ·Î±×·¡¸Ó·Î¼­ ¾î´À Á¤µµ ±âº»Àº µÇ¾î ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ³»¿ëµéÀº ±× ÇϳªÇϳª¿¡ ´ëÇÑ Áö½ÄÀ» ½×´Â °Íµµ Áß¿äÇÏÁö¸¸ ´õ Áß¿äÇÑ °ÍÀº ÀÌ·± ³»¿ëÀ» ¾Ë¾Æ¾ßÇÑ´Ù´Â »ç½ÇÀ» ¾Æ´Â °ÍÀÌ´Ù. ¹«¾ùÀ» ¾Ë¾Æ¾ßÇϴ°¡¸¦ °¡¸£ÃÄÁÖ´Â °ÍÀº ½ºÆåÀÌ´Ù. ½ºÆå ¹®¼­µéÀº ´ëºÎºÐ ¿µ¾îÀÌ°í ±×´ÙÁö Ä£ÀýÇÏ°Ô µÇ¾î ÀÖÁø ¾ÊÁö¸¸ ÇØ´ç ºÐ¾ß¿¡ ´ëÇØ °¡Àå Á¤È®ÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀ» ´Ù ¾ËÁø ¸øÇÏ´õ¶óµµ ½ºÆå¿¡ ¾î¶² ³»¿ëÀÌ Àִ°¡ Á¤µµ´Â ¾Ë¾Æ¾ß ±× ³»¿ë Áß Àڽſ¡°Ô ÇÊ¿äÇÑ ³»¿ëÀ» ã¾Æ¼­ °øºÎÇÒ ¼ö°¡ ÀÖ´Â °ÍÀÌ´Ù. ÀÌ·± Á¤º¸¸¦ ¾îµð¼­ ãÀ» ¼ö Àִ°¡¸¦ ¾Ë°í ÀÖ´Â °Íµµ Áß¿äÇÏ´Ù. ±âº»ÀûÀ¸·Î www.ietf.org, jcp.org, java.sun.com, www.w3.org Á¤µµÀÇ »çÀÌÆ®¿¡´Â Àͼ÷ÇØÁö´Â °Ô ÁÁÀ» °ÍÀÌ´Ù.

¸¹Àº ÇÁ·Î±×·¡¸ÓµéÀÌ ½ÇÁ¦·Î Àڱ⠼ÕÀ¸·Î ÇÁ·Î±×·¡¹ÖÇØº¸´Â °Ô ½Ç·ÂÀÌ ´À´Â Á¦ÀÏ ÁÁÀº ¹æ¹ýÀ̶ó°í ¸»ÇÏÁö¸¸ ÇÊÀÚ´Â ¿©±â¿¡ µ¿ÀÇÇÏÁö ¾Ê´Â´Ù. ¹°·Ð, ½ÇÁ¦ °æÇèÀ» ½×´Â °ÍÀÌ ÇʼöÀûÀÎ °úÁ¤À̱ä ÇÏ´Ù. ±×·¯³ª, ±âº» Áö½ÄÀ» µîÇѽÃÇÑ »óÅ¿¡¼­ ÄÚµù¸¸ ÇØº¸´Â °ÍÀ¸·Î´Â ½Ç·ÂÀÌ Àß ´ÃÁö ¾Ê´Â´Ù. ÄÚµù ±â¼úÀº ´Ã ¼ö ÀÖ°ÚÁö¸¸ Á¤¸» ½ÇÁ¦ ¼­ºñ½º¸¦ ÇØ¾ßÇÏ´Â ÇÁ·Î±×·¡¹Ö¿¡¼­ Áß´ëÇÑ ½Ç¼ö¸¦ ÀúÁö¸£°Ô µÇ°Å³ª ³²µéÀÌ ½±°Ô ½±°Ô Çϰí ÀÖ´Â ÀϵéÀ» ¾î·Æ°Ô ºù µÑ·¯°¡¸é¼­ ÇÏ°ÔµÉ ¼ö ÀÖ´Ù. ±×·¡¼­ ±âº»±â¸¦ °®Ãß´Â °ÍÀÌ Áß¿äÇÑ °ÍÀÌ´Ù.

°ÅµìÇØ¼­ ±âº»ÀÇ Á߿伺À» °­Á¶Çߴµ¥ ÇÑ °¡Áö µ¡ºÙÀÌ°í ½ÍÀº ¸»Àº ÀÌ·± ±âº» Áö½Ä »Ó ¾Æ´Ï¶ó ±âº»À» Ȱ¿ëÇÏ´Â ´É·ÂÀ» Ű¿ì´Â °Íµµ ÀØÁö ¸»¾Æ¾ßÇÑ´Ù´Â °ÍÀÌ´Ù. ¾Õ¼­ ¾ð±ÞÇÑ ¿¹¿Ü ó¸® °°Àº ³»¿ëÀº ±âº»À̱ä Çϳª ÀÚ¹Ù ¹®¹ý¸¸ Àß ¾È´Ù°í ¾Ë ¼ö ÀÖ´Â ³»¿ëµéÀº ¾Æ´Ï¸ç ±âº»À» ¹ÙÅÁÀ¸·Î ÁÁÀº ÆÇ´ÜÀ» ³»¸± ¼ö ÀÖ´Â ´É·ÂÀÌ ÀÖ¾î¾ßÇÑ´Ù. °á±¹ ÁÁÀº ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á¸é ¸ÕÀú ÁÁÀº »ç°í ´É·ÂÀ» °¡Áö°í ÀÖ¾î¾ßÇÏ´Â °ÍÀÌ´Ù. ±ÛÁþ±â¸¦ ÀßÇÏ´Â ¹æ¹ýÀ¸·Î ÈçÈ÷ ´Ùµ¶(ÒýÔÁ), ´ÙÀÛ(ÒýíÂ), ´Ù»ó·®(ÒýßÂÕá)À» À̾߱âÇÑ´Ù. ¸¹ÀÌ ÀÐ°í ¸¹ÀÌ ¾²°í ¸¹ÀÌ »ý°¢Ç϶ó´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¡¹Öµµ ÀÌ¿Í ºñ½ÁÇÏ´Ù. °¢Á¾ ½ºÆåµé°ú ÁÁÀº ÄÚµåµéÀ» ¸¹ÀÌ Àо°í Á÷Á¢ ÄÚµùµµ ¸¹ÀÌ ÇØº¸¸é ºÐ¸í ½Ç·ÂÀÌ ´ÃÁö¸¸ À̰ÍÀ¸·Î´Â ÃæºÐÄ¡ ¾Ê´Ù. ÇÁ·Î±×·¡¹ÖÀ» Çϸ鼭 ²÷ÀÓ¾øÀÌ »ý°¢ÇؾßÇÑ´Ù. Áö±Ý ÀÛ¼ºÇÑ ÄÚµå´Â ÁÁÀº ÄÚµåÀΰ¡, ÀÌ·¸°Ô ÄÚµùÇÏ¸é ºÒÆíÇѵ¥ °³¼±ÇÒ ¹æ¹ýÀº ¾øÀ»±î, ÀÌ APIµé·Î ¹«¾ùÀ» ÇÒ ¼ö ÀÖÀ»±î, Á»´õ °³¹ß ¼Óµµ¸¦ Çâ»ó½ÃŰ·Á¸é ¾î¶»°Ô ÇØ¾ßÇÒ±î µîµî »ý°¢À» ¸¹ÀÌ ÇØ¾ß ÁøÂ¥ ¹ßÀüÀ» ÀÌ·ê ¼ö ÀÖ´Ù. ¸¸ÀÏ ¼Õ°¡¶ôÀÌ ¾ÆÇà Á¤µµ·Î ÇÏ·ç Á¾ÀÏ Å°º¸µå¸¦ µÎµå¸®°í ÀÖ´Ù¸é ÁÁÀº ÇÁ·Î±×·¡¸Ó¶ó°í ÇÒ ¼ö ¾ø´Ù. »ý°¢Çϴµ¥ Á»´õ ¸¹Àº ½Ã°£À» ½á¾ßÇÑ´Ù. ¸ð´ÏÅ͸¦ ±¸ºÎÁ¤ÇÏ°Ô µé¿©´Ùº¸¸é¼­ Űº¸µå¸¦ µÎµå¸®´Â °ÍÀº °Íº¸´Ù´Â ÀÇÀÚ¿¡ Æí¾ÈÈ÷ ±â´ë¼­ »ý°¢ÇÏ´Â ½Ã°£À» ´Ã¸®ÀÚ. º¹ÀâÇÑ ¹®Á¦°¡ ÀÖÀ¸¸é ¹Ù±ù °ø±â¸¦ ½ý¸é¼­ »êÃ¥À» Çϸ鼭 »ý°¢À» ÇÏ´Â °Íµµ ÁÁ´Ù. ±»ÀÌ °Ç°­À» »ý°¢ÇÏÁö ¾Ê´õ¶óµµ °È´Â °ÍÀº µÎ³ú¸¦ Ȱ¼ºÈ­½Ã۱⠶§¹®¿¡ ÇØ°áÃ¥À» ´õ »¡¸® ãÀ» ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ³²µéÀÌ º¸±â¿¡´Â °ÔÀ»·¯º¸ÀÏ ¼ö ÀÖÁö¸¸ ³î°í ÀÖ´Â °Ô ¾Æ´Ï¶ó´Â °ÍÀº °á°ú·Î ÃæºÐÈ÷ º¸¿©ÁÙ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ·± »ý°¢À» Àß À̾°¡±â À§Çؼ­´Â »ý°¢ÀÇ Àç·á°¡ µÇ´Â ±âº»¿¡ Ãæ½ÇÇØ¾ßÇÔÀº ¹°·ÐÀÌ´Ù. ¾îµÒħħÇÑ ±¸¼®¿¡ ¾É¾Æ Űº¸µå¸¸ µÎµå¸®´Â geek°¡ ¾Æ´Ñ º¸´Ù Àΰ£´Ù¿î ÇÁ·Î±×·¡¸Ó°¡ µÇÀÚ.

4.4 ÂüÁ¶ #


Àڹٺзù

NotEditable|FindPage|DeletePage|LikePages| Valid XHTML 1.0! Valid CSS! powerd by MoniWiki