[Áöµð³ÝÄÚ¸®¾Æ]Áö³ ±Û¿¡¼´Â ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©¸¦ ÅëÇÕÇϱâ À§ÇÑ Ã¹ ¹øÂ° ½Ãµµ·Î º§·Î½ÃƼ¿Í ½ºÆ®·µÃ÷°¡ ¾î¶»°Ô ¿¬µ¿µÉ ¼ö ÀÖ´ÂÁö¸¦ »ìÆìº¸¾Ò´Ù. À̹ø ±Û¿¡¼´Â VSSH ±¸¼ºÀ» À§ÇÑ ÇÙ½É ±â¼úÀÎ ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¿¡ ´ëÇØ »ìÆìº¼ °ÍÀÌ´Ù.
½ºÇÁ¸µÀ» ÅëÇØ ÃÖ±Ù ÀÚ¹Ù Ä¿¹Â´ÏƼÀÇ °ü½ÉÀÌ ÁýÁߵǰí ÀÖ´Â IoC ÄÁÅ×ÀÌ³Ê¿Í AOP¿¡ ´ëÇÑ °³³äÀ» Á¢Çغ¸µµ·Ï ÇÏÀÚ. ±×¸®°í ½ºÇÁ¸µÀ» ½ºÆ®·µÃ÷¿Í ¿¬µ¿Çϱâ À§ÇØ ÇÊ¿äÇÑ ÀýÂ÷¿¡ ´ëÇØ¼µµ ¾Ë¾Æº¸ÀÚ.
ÀÚ¹Ù¸¦ ÀÌ¿ëÇØ ±â¾÷¿ë ºñÁî´Ï½º ½Ã½ºÅÛÀ» ±¸ÃàÇÏ´Â °ÍÀº º¸Åë ÀÏÀÌ ¾Æ´Ï´Ù. °³¹ßÀÚµéÀº º¹Àâµµ¸¦ ³·Ãß±â À§ÇØ MVC ÆÐÅÏÀÌ ³ì¾ÆÀÖ´Â n-°èÃþ C/S ȯ°æÀ» ±¸¼ºÇϱ⠽ÃÀÛÇßÀ¸¸ç, Á¡Â÷ ½Ã°£ÀÌ Èê·¯°¡¸é¼ ´ë±Ô¸ð À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ´ÙÀ½ÀÇ ´Ù¼¸ °¡Áö °èÃþÀ¸·Î ÀϹÝȵǾî Àû¿ëµÇ°í ÀÖ´Ù.
¡ß ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ(Presentation Layer)
¡ß Á¦¾î °èÃþ(Control Layer)
¡ß ºñÁî´Ï½º ·ÎÁ÷ °èÃþ(Business Logic Layer)
¡ß ÆÛ½Ã½ºÅϽº °èÃþ(Persistence Layer)
¡ß µµ¸ÞÀÎ ¸ðµ¨ °èÃþ(Domain Model Layer)
´Ù¾çÇÑ ÇÁ·ÎÁ§Æ®¸¦ °æÇèÇÏ¸é¼ ÀÚ¹Ù Ä¿¹Â´ÏƼ´Â ÃÖ»óÀÇ ½Çõ »ç·ÊµéÀ» µðÀÚÀÎ ÆÐÅÏÀÇ ÈûÀ» ºô¾î J2EE/EJB ÆÐÅÏÀ¸·Î ±¸Ã¼È½ÃÄÑ ³ª°¬´Ù. ±× Áß °¡Àå ³Î¸® ¾Ë·ÁÁø °ÍÀº ÄÚ¾î J2EE ÆÐÅϰú EJB ÆÐÅÏÀÌ´Ù. °³¹ßÀÚµéÀº J2EE ±â¼úÀÇ ÀåÁ¡À» ÃÖ´ëÇÑ »ì¸®±â À§Çؼ´Â ÆÐÅÏ¿¡ ±â¹ÝÇÑ ¾ÆÅ°ÅØÃ³ÀÇ ±¸¼ºÀÌ ¹«¾ùº¸´Ù Áß¿äÇÏ´Ù´Â »ç½ÇÀ» ±ú´Ý±â ½ÃÀÛÇßÀ¸¸ç, ±× ¾ÆÅ°ÅØÃ³ÀÇ ±¸ÇöÀÎ WAF(Web Application Framework)µéÀÌ ¼ö¾øÀÌ ¸¹ÀÌ ½ñ¾ÆÁ® ³ª¿À±â ½ÃÀÛÇß´Ù.
WAFµéÀÇ ÃáÃßÀü±¹ ½Ã´ë´Â ½ºÆ®·µÃ÷¿Í À¥¿öÅ©(WebWork)¿¡ ÀÇÇØ Àϴܶô µÈ µíÇÏ´Ù. ¿ì¸®³ª¶óÀÇ °æ¿ì ½ºÆ®·µÃ÷´Â ½ÇÁúÀûÀÎ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©ÀÇ Ç¥ÁØÀ¸·Î ÀÚ¸®Àâ¾Ò´Ù°í º¼ ¼ö ÀÖ´Ù.
¸¹Àº °³¹ßÀÚµéÀº ½ºÆ®·µÃ÷¸¦ »ç¿ëÇÔÀ¸·Î½á ÁÁÀº ÇÁ·¹ÀÓ¿öÅ©°¡ ¾î¶² Äڵ尡 ¾îµð¿¡ À§Ä¡µÇ¾î¾ß ÇÏ´ÂÁö¸¦ ¾Ë·ÁÁÖ´Â °¡À̵å¶óÀÎÀ» Çü¼ºÇØ ÁÖ¸ç, ÀÚ¿¬½º·´°Ô ÁÁÀº ¼³°è¸¦ À̲ø¾î³»´Â ÀåÁ¡ÀÌ ÀÖÀ½À» ¾Ë°Ô µÇ¾ú´Ù. ¶ÇÇÑ ÁÁÀº ¼³°è¸¦ À§ÇØ ÇʼöÀûÀÎ ±âº» ÆÐÅϵéÀÌ ¹Ì¸® ±¸ÇöµÇ¾î ÀÖ¾î ÈξÀ ´õ Áß¿äÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç ·ÎÁ÷ ÀÚü¿¡ ÁýÁßÇÒ ¼ö ÀÖ´Â ¿©À¯¸¦ Áشٴ Á¡µµ ±ú´Þ¾Ò´Ù.
ÃÖ±Ù µé¾î ÀÚ¹Ù Ä¿¹Â´ÏƼ´Â ¿£ÅÍÇÁ¶óÀÌÁî ¿µ¿ª¿¡¼ ÁÖ·ù¸¦ ÀÌ·ç´ø J2EE ±â¼ú¿¡ ´ëÇÑ ´ë¾ÈÀû ±â¼úµéÀÇ µîÀå¿¡ ¸¹Àº °ü½ÉÀ» ½ñ°í ÀÖ´Ù. ±× ´ëºÎºÐÀº ƯÁ¤ ¾÷üÀÇ ÁÖµµ°¡ ¾Æ´Ñ °³¹ßÀÚµéÀÇ °æÇèÀ» ¹ÙÅÁÀ¸·Î Çϴ âÁ¶ÀûÀÎ ¾ÆÀ̵ð¾î¿¡ ±â¹ÝÇÑ °ÍÀÌ¸ç ¿ÀǼҽº ÇüÅ·ΠÁøÇà ÁßÀÌ´Ù.
»Ó¸¸ ¾Æ´Ï¶ó J2EE ±â¼ú ÀÚüµµ JSP 2.0°ú JSF(Java Server Faces), ±×¸®°í EJB 3.0, ŸÀ̰Å(J2SE 5.0)¶ó´Â Å« º¯È¸¦ ¾ÕµÎ°í ÀÖ´Â ÇüÆíÀÌ´Ù. ÀÌó·³ ´Ù¾çÇÑ ´ë¾ÈÀû ±â¼úµéÀÌ Á¸ÀçÇÏ´Â »óȲ¿¡¼ ¿ì¸®´Â °¢ °èÃþÀ» ±¸ÇöÇϱâ À§ÇØ ¾î¶² ±â¼úÀ» ¼±ÅÃÇϰí, ¶Ç °¢°¢À» ¾î¶»°Ô ÇϳªÀÇ ¾ÆÅ°ÅØÃ³·Î ÅëÇÕÇØ¾ß ÇÏ´Â °ÍÀϱî?
ÀÌ·¯ÇÑ ±Ã±ÝÁõÀ» °¡Á®º» µ¶ÀÚµéÀ̶ó¸é ¸¶Å© À̱ÛÀÇ ±Û(
¿ÀǼҽº ÀÚ¹Ù ÇÁ·ÎÁ§Æ®¸¦ ÀÀ¿ëÇÑ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß)À» ÇѹøÂë Àо Çʿ䰡 ÀÖ´Ù. ±×´Â ¾ÆÅ°ÅØÃ³¸¦ ±¸¼ºÇÏ´Â °¢°¢ÀÇ °èÃþµéÀÌ ¾ÖÇø®ÄÉÀÌ¼Ç ³»¿¡¼ ¸íÈ®È÷ ±¸º°µÇ´Â ±â´ÉÀ» °¡Áö°í ÀÖÀ¸¸ç, ¼·Î ´Ù¸¥ °èÃþÀ» ħ¹üÇϰųª ±× ±â´É¿¡ ÀÖ¾î Áߺ¹µÇ´Â Á¡ÀÌ ¾ø¾î¾ß ÇÑ´Ù°í ÁÖÀåÇÑ´Ù. ±×ÀÇ ±ÛÀ» Åä´ë·Î °¢ °èÃþ¿¡¼ Á¦°øÇØ¾ß ÇÏ´Â ±â´ÉÀº ¹«¾ùÀÎÁö, ¶ÇÇÑ Á¦°øÇÏÁö ¸»¾Æ¾ß ÇÒ ±â´ÉÀº ¹«¾ùÀÎÁö¸¦ °£´ÜÈ÷ »ìÆìº¸µµ·Ï ÇÏÀÚ.
ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ
¡ß ¿ªÇÒ : ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþÀº ¸» ±×´ë·Î »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡ ºÒ°úÇÏ´Ù. ½Ä´çÀ» ¿¹·Î µé¸é ¼Õ´ÔÀÌ Á¢ÇÏ°Ô µÇ´Â ¸Þ´ºÆÇ°ú Àü´ÞµÉ À½½ÄÀ» Â÷·Á³õ´Â ½ÄŹ¿¡ ÇØ´çÇÑ´Ù.
¡ß ±â´É : »ç¿ëÀÚ°¡ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ Ç¥½ÃµÇ¾î ÀÖ¾î¾ß Çϰí, ¿äû¿¡ ÇÊ¿äÇÑ ºÎ°¡ÀûÀÎ Á¤º¸ Àü´ÞÀ» À§ÇÑ ÀÔ·Â ¾ç½ÄÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¶ÇÇÑ Àü´ÞµÈ ÀڷḦ È¿°úÀûÀ¸·Î º¸¿©ÁÖ±â À§ÇÑ ÇÁ¸®Á¨Å×ÀÌ¼Ç ·ÎÁ÷ÀÌ Æ÷ÇԵȴÙ. ÇÏÁö¸¸ ºñÁî´Ï½º ·ÎÁ÷À̳ª ÆÛ½Ã½ºÅϽº °èÃþ¿¡¼ ó¸®ÇÏ´Â ÀÏÀ» Á÷Á¢ ¼öÇàÇϰųª(½ºÅ©¸³Æ® ¸´ »ç¿ë), °¢ °èÃþÀÇ ÄÄÆ÷³ÍÆ®¿Í Á÷Á¢ÀûÀÎ Åë½ÅÀÌ À־ ¾ÈµÈ´Ù.
¸ðµç ¿äûÀº Á¦¾î °èÃþÀ» ÅëÇØ 󸮵Ǿî¾ß ÇÑ´Ù´Â ¶æÀÌ´Ù. °í±Þ ·¹½ºÅä¶û(¿£ÅÍÇÁ¶óÀÌÁî ½Ã½ºÅÛ)¿¡¼´Â ¿þÀÌÅÍ(Áö¹èÀÎ)¸¦ ÅëÇØ¼¸¸ ¿ä±¸¸¦ Àü´ÞÇϰí, ±× °á°ú¸¦ ÀüÇØµé¾î¾ß ÇÑ´Ù. Á÷Á¢ ÁÖ¹æÀå¿¡°Ô ÁÖ¹®À» Çϰųª ÀڱⰡ Á÷Á¢ ¿ä¸®¸¦ ÇÏ´Â °ÍÀº ÀÚ±â Áý(ÇÁ·ÎÅäŸÀÔ)À̳ª µ¿³× ÀÚÀå¸é °¡°Ô(¼Ò±Ô¸ð À¥ ¾ÖÇø®ÄÉÀ̼Ç)¿¡¼³ª °¡´ÉÇÑ ÀÏÀÌ´Ù.
¡ß ´ë¾È ±â¼ú : ÇöÀç °¡Àå ÁÖ·ù¸¦ ÀÌ·ç´Â ±â¼úÀº JSP 1.2¿Í JSTL°ú °°Àº ÅÂ±× ¶óÀ̺귯¸®¸¦ °áÇÕÇÏ´Â ¹æ½ÄÀÌ´Ù. °úµµ±âÀûÀÎ ÇüÅ·Πº§·Î½ÃƼ¿Í ŸÀÏÁî ÅÂ±× ¶óÀ̺귯¸®°¡ °áÇÕµÈ Çüŵµ ÇöÀç ÁÖ¸ñÀ» ¹Þ°í ÀÖ´Ù. ÇÏÁö¸¸ Á¡Â÷ÀûÀ¸·Î JSF¿¡ ±â¹ÝÇÑ JSP 2.0¿¡ ÁÖ·ù ±â¼ú·Î ¿Å°Ü°¥ °¡´É¼ºÀÌ Å©°í, ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ °³¹ß¿¡ À־µ JSF¸¦ Áö¿øÇÏ´Â IDE¸¦ äÅÃÇÏ´Â °æ¿ì°¡ ´Ã¾î³¯ °ÍÀÌ´Ù.
¡ß ÁÖ¿ä ÆÐÅÏ : Composite View ÆÐÅÏ
Á¦¾î °èÃþ
¡ß ¿ªÇÒ : Á¦¾î °èÃþÀº ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ°ú ºñÁî´Ï½º ·ÎÁ÷ °èÃþÀ» ºÐ¸®Çϱâ À§ÇÑ ÄÁÆ®·Ñ·¯¸¦ Á¦°øÇÑ´Ù. ½Ä´çÀ¸·Î Ä¡ÀÚ¸é Áö¹èÀÎÀÇ ¿ªÇÒ°ú Á¾¾÷¿øÀÇ ¿ªÇÒÀ» º´ÇàÇÏ´Â °ÍÀ̶ó°í º¼ ¼ö ÀÖ´Ù.
¡ß ±â´É : Àüü ½Ã½ºÅÛÀÇ ¼³Á¤ »óŸ¦ À¯ÁöÇØ¾ß Çϸç, ±×¸¦ ÅëÇØ ¾î¶² ¿äûÀÌ µé¾î¿ÔÀ» ¶§ ¾î¶² ·ÎÁ÷ÀÌ Ã³¸®ÇØ¾ß ÇÏ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù. »ç¿ëÀÚ ¿äûÀ» °ËÁõÇÏ°í ·ÎÁ÷¿¡ ¿äûÀ» Àü´ÞÇÏ´Â Àϰú ·ÎÁ÷¿¡¼ Àü´ÞµÈ ÀÀ´äÀ» ÀûÀýÇÑ ºä¿¡ ¿¬°áÁþ´Â °Í ¿ª½Ã Á¦¾î °èÃþÀÇ ¸òÀÌ´Ù.
¼Õ´ÔÀÌ ¹Ù´Ù°¡Àç ¿ä¸®¸¦ ¿äûÇßÀ» ¶§ Á¾¾÷¿øÀº ±× ¿ä¸®°¡ ¼ºñ½º °¡´ÉÇÑ °ÍÀÎÁö ¶ÇÇÑ ´©±¸¿¡°Ô ½ÃŰ¸é µÇ´ÂÁö¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù´Â ¶æÀÌ´Ù. ¿äûÀ» Àü´Þ¹ÞÀº ¿ä¸®»ç°¡ ¹Ù´Ù°¡Àç ¿ä¸®¸¦ ÁÖ¸é ±×°ÍÀ» ½ÄʱîÁö ¿î¹ÝÇØ ÁÖ´Â °Í ¿ª½Ã Á¾¾÷¿øÀÇ ¸òÀÌ´Ù. UI °ËÁõ, ¿äû ¹× ÀÀ´ä Àü´Þ, ·ÎÁ÷¿¡¼ ´øÁ®Áø ¿¹¿Ü ó¸®, µµ¸ÞÀÎ ¸ðµ¨À» ºä¿Í ¿¬°áÇϱ⠵îÀÇ °íÀ¯ ±â´É ¿Ü¿¡´Â ¾î¶² ±â´Éµµ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.
¡ß ´ë¾È ±â¼ú : ÇöÀç WAFµéÀº ´ëºÎºÐ Á¦¾î °èÃþÀÇ ÇÙ½É ±â´ÉÀ» Æ÷ÇÔÇÑ´Ù. ÅͺóÀ̳ª ¿¡½ºÇÁ·¹¼Ò µîÀÌ ¼±ÀüÇϰí ÀÖÁö¸¸, ½ºÆ®·µÃ÷¿Í À¥¿öÅ©°¡ ´ë¼¼¶ó°í »ý°¢µÈ´Ù. ´çºÐ°£ º°´Ù¸¥ ´ë¾È ±â¼úÀÌ µîÀåÇÒ °¡´É¼ºÀº Àû´Ù. ¿ÀÈ÷·Á ½ºÆ®·µÃ÷¸¦ È®Àå½ÃÄÑ ÀÚ»ç °íÀ¯ÀÇ ÇÁ·¹ÀÓ¿öÅ©·Î ÃÖÀûÈ ½ÃŰ´Â ÀÛ¾÷ÀÌ È°¹ßÈ÷ ÁøÇàµÉ °ÍÀÌ´Ù.
¡ß ÁÖ¿ä ÆÐÅÏ : Front Controller ÆÐÅÏ, Service to Worker ÆÐÅÏ(¶Ç´Â Command ÆÐÅÏ), Intercepting Filter ÆÐÅÏ, Application Controller & Context Object ÆÐÅÏ
ºñÁî´Ï½º ·ÎÁ÷ °èÃþ
¡ß ¿ªÇÒ : ºñÁî´Ï½º ·ÎÁ÷Àº ¸» ±×´ë·Î ÇÙ½É ¾÷¹«¸¦ ¾î¶»°Ô ó¸®ÇÏ´ÂÁö¿¡ ´ëÇÑ ¹æ¹ýÀ» ±â¼úÇÏ´Â °÷ÀÌ´Ù. ½Ä´ç¿¡¼ Á¾¾÷¿øÀÌ °í°´ÀÇ ¿ä±¸¸¦ Àü´ÞÇØ ÁÖ¸é, Àç·á¸¦ ÀÌ¿ëÇØ ¿ä¸®¸¦ ¸¸µå´Â ¿ä¸®»ç¶ó°í³ª ÇÒ±î? ºñÁî´Ï½º ·ÎÁ÷ °èÃþÀº ¾ÖÇø®ÄÉÀ̼ǿ¡¼ °¡Àå Àç»ç¿ëµÉ È®·üÀÌ ³ôÀº ¿ä¼ÒÀ̱⠶§¹®¿¡ ½Å°æ ½á¼ ¼³°èÇØ¾ß ÇÑ´Ù.
¡ß ±â´É : ºñÁî´Ï½º ·ÎÁ÷¿¡´Â ÇÙ½É ¾÷¹« ·ÎÁ÷ÀÇ ±¸Çö°ú ±×¿¡ °ü·ÃµÈ µ¥ÀÌÅÍÀÇ ÀûÇÕ¼º °ËÁõ ¿Ü¿¡µµ ´Ù¾çÇÑ ºÎ°¡ÀûÀÎ ±¸ÇöÀÌ Ãß°¡µÈ´Ù. Æ®·£Àè¼Ç 󸮶óµç°¡, ´Ù¸¥ °èÃþµé°ú Åë½ÅÇϱâ À§ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇѴٰųª, ÇØ´ç °èÃþÀÇ °´Ã¼µé°£ÀÇ °ü°è¸¦ °ü¸®ÇÏ´Â °Í µîÀÌ ±×°ÍÀÌ´Ù.
ºñÁî´Ï½º ·ÎÁ÷ °èÃþ¿¡ ÀÖ¾î¾ß ÇÒ ÄÚµåµéÀÌ ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþÀ̳ª ÆÛ½Ã½ºÅϽº °èÃþ¿¡ ¿©±âÀú±â Èð¾îÁ® ÀÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ã¾Æº¸±â¶õ ±×¸® ¾î·Á¿î ÀÏÀÌ ¾Æ´Ï´Ù. ÀÌ·± ±¸Á¶´Â °¢°¢ÀÇ °èÃþÀ» ¸ðÈ£ÇÏ°Ô ¸¸µé¾î À¯Áöº¸¼ö½Ã ¸¹Àº ½Ã°£À» ÇÊ¿ä·Î ÇÏ°Ô ¸¸µç´Ù.
°¡Àå ½Å°æ ½á¼ °³¹ßÇØ¾ß ÇÒ ºñÁî´Ï½º ·ÎÁ÷¿¡ ±×µ¿¾È ½Å°æÀ» ¾²Áö ¸øÇß´Ù´Â °Í. ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ°ú ÆÛ½Ã½ºÅϽº °èÃþ »çÀÌÀÇ ´Ù¸® ¿ªÇÒÀ» Ãæ½ÇÈ÷ Çϵµ·Ï ÇÔÀ¸·Î½á ¾ÖÇø®ÄÉÀ̼ǿ¡ À¯¿¬¼ºÀ» ´õÇÏ´Â °Í. ±×°ÍÀÌ ½ºÇÁ¸µÀÌ Åº»ýÇÏ°Ô µÈ ¹è°æÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.
¡ß ´ë¾È ±â¼ú : Áö±Ý±îÁö ºñÁî´Ï½º ·ÎÁ÷ÀÇ ±¸ÇöÀº Å©°Ô EJB¸¦ »ç¿ëÇÏ´Â °Í°ú ÀÏ¹Ý ÀÚ¹Ù °´Ã¼(POJO)¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î ³ª´ ¼ö ÀÖ¾ú´Ù. EJB¸¦ »ç¿ëÇÏ´Â °æ¿ì °³¹ßÀÚµéÀÇ ¸¹Àº ºÒ¸¸ÀÌ EJB 3.0À» »ç¿ëÇÔÀ¸·Î½á ÇØ°áµÇ¸®¶ó ¿¹»óµÈ´Ù. ÇÏÁö¸¸ ÇØ¿Ü¸¦ Áß½ÉÀ¸·Î ÇØ¼ EJB¸¦ »ç¿ëÇϰÇ, »ç¿ëÇÏÁö ¾Ê°Ç ºñÁî´Ï½º ·ÎÁ÷µéÀ» ü°èÀûÀ¸·Î °ü¸®ÇÏ´Â IoC ÄÁÅ×À̳ʿ¡ ´ëÇÑ °ü½ÉÀÌ Áõ°¡Çϰí ÀÖ´Â Ãß¼¼ÀÌ´Ù. IoC ÄÁÅ×À̳ʿ¡ ´ëÇØ¼´Â µÚ¿¡¼ ´Ù½Ã ÀÚ¼¼È÷ »ìÆìº¸µµ·Ï ÇϰڴÙ.
¡ß ÁÖ¿ä ÆÐÅÏ : Business Delegate ÆÐÅÏ, Session Facade ÆÐÅÏ, Service Locator ÆÐÅÏ, Application Service ÆÐÅÏ, EJB Home Factory ÆÐÅÏ
ÆÛ½Ã½ºÅϽº °èÃþ
¡ß ¿ªÇÒ : ÆÛ½Ã½ºÅϽº °èÃþÀº µ¥ÀÌÅÍ Ã³¸®¸¦ ´ã´çÇÏ´Â °èÃþÀÌ´Ù. ÁÖ·Î µ¥ÀÌÅÍÀÇ »ý¼º/¼öÁ¤/»èÁ¦/¼±ÅÃ(°Ë»ö)°ú °°Àº CRUD ¿¬»êÀ» ¼öÇàÇÏ°Ô µÈ´Ù. ½Ä´çÀ¸·Î º¸ÀÚ¸é ÁÖ¹æÀåÀÌ »ç¿ëÇÒ Àç·á¸¦ ´ã´çÇÏ´Â Àç·á ´ã´çÀÚ¶ó°í³ª ÇÒ±î? ÀÌ µ¥ÀÌÅÍ´Â ÁÖ·Î µ¥ÀÌÅͺ£À̽º¿¡¼ 󸮵Ǵ °æ¿ì°¡ ¸¹¾Æ, ¿µ¼Ó¼ºÀ» ÀǹÌÇÏ´Â ÆÛ½Ã½ºÅϽº °èÃþÀ̶õ ¿ë¾î¸¦ »ç¿ëÇß´Ù. ÇÏÁö¸¸ µ¥ÀÌÅͰ¡ 󸮵Ǵ ´Ù¸¥ ¾÷¹« ½Ã½ºÅÛÀ̳ª, À¥ ¼ºñ½º, XML, ÆÄÀÏ ½Ã½ºÅÛ µîÀ» ¸ðµÎ °í·ÁÇÑ´Ù¸é ·¹°Å½Ã °³³äÀ» °®´Â EIS °èÃþÀ̶õ Ç¥ÇöÀÌ ´õ ÀûÇÕÇÒ °ÍÀÌ´Ù.
¡ß ±â´É : ÀÌ °èÃþ¿¡¼ ¼öÇàÇÏ´Â ÀÏÀº °ü°èÇü Á¤º¸¸¦ ÀúÀåÇϰí, ¼öÁ¤/»èÁ¦ÇÏ´Â °Í°ú, ±×·¯ÇÑ ÀÏÀ» ¼öÇàÇÏ´Â µ¥ ÇÊ¿äÇÑ ÁúÀǹ®À» °ü¸®ÇÏ´Â °Í, ±×¸®°í °¡Á®¿Â °ü°èÇü Á¤º¸¸¦ °´Ã¼È½ÃŰ´Â ÀÏÀÌ´Ù.
¡ß ´ë¾È ±â¼ú : EJB »ç¿ë¿¡ ÀÖ¾î¼ °³¹ßÀÚµéÀÌ °¡Àå ºÒ¸¸½º·¯¿ö ÇÏ´Â °ÍÀº CMP ¹æ½ÄÀÇ ¿£Æ¼Æ¼ ºóÀÏ °ÍÀÌ´Ù. ±×·¯ÇÑ ºÒ¸¸Àº °´Ã¼ °ü°è ¸ÊÇÎ(ORM)À» ÀÌ¿ëÇÑ JDO¶ó´Â ´ë¾È±â¼úÀ» ź»ý½ÃÄ×°í, ¶ÇÇÑ ÇÏÀ̹ö³×ÀÌÆ®¶ó´Â ¶Ç ÇϳªÀÇ ¿ÀǼҽº ±â¼úÀ» ½Ç¹«·Î ²ø¿©µé¿´´Ù. JDBC¸¦ ÀÌ¿ëÇÑ DAO °´Ã¼¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýµµ ¼Ò±Ô¸ð ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â ¿©ÀüÈ÷ Àα⸦ ²ø°í ÀÖ´Ù. EJB 3.0°ú JDO/ÇÏÀ̹ö³×ÀÌÆ®, ±×¸®°í JDBC¸¦ ÀÌ¿ëÇÑ POJO ¹æ½Ä Áß ¾î¶² °ÍÀÌ °³¹ßÀڵ鿡°Ô ³«Á¡µÉ Áö´Â ¾ÆÁ÷ ¹ÌÁö¼ö´Ù.
¡ß ÁÖ¿ä ÆÐÅÏ : Data Access Object ÆÐÅÏ, Domain Store ÆÐÅÏ, Sequence Blocks
µµ¸ÞÀÎ ¸ðµ¨ °èÃþ
¡ß ¿ªÇÒ : µµ¸ÞÀÎ ¸ðµ¨Àº °¢ °èÃþ »çÀÌ¿¡ Àü´ÞµÇ´Â ½ÇÁúÀûÀÎ ºñÁî´Ï½º °´Ã¼¶ó°í ÇÒ ¼ö ÀÖ´Ù. ½Ä´çÀ» ¿¹·Î µç´Ù¸é, À½½ÄÀÌ ´ã±ä ±×¸©À̶ó°í ºñÀ¯ÇÒ ¼ö ÀÖ°Ú´Ù.
¡ß ±â´É : µµ¸ÞÀÎ ¸ðµ¨ °èÃþÀº ÈçÈ÷ µ¥ÀÌÅÍ Àü¼Û °´Ã¼(DTO) ÇüÅ·Π°³¹ßÀÚ°¡ Á÷Á¢ Á¦ÀÛÇØ¼, ¸®Äù½ºÆ®³ª ¼¼¼Ç°ú °°Àº ÄÁÅØ½ºÆ®¿¡ ´ã¾Æ ³Ñ±â°Ô µÈ´Ù. ÇÏÁö¸¸ µ¥ÀÌÅͺ£À̽ºÀÇ ¸ðµç Á¤º¸¸¦ ÀÏÀÏÀÌ °´Ã¼·Î ¸¸µå´Â °ÍÀº ±ÍÂúÀ» »Ó ¾Æ´Ï¶ó, °èÃþ°£ÀÇ Åë½Å °úÁ¤¿¡¼ µ¥ÀÌÅͰ¡ À¯½ÇµÉ À§Çèµµ Àֱ⠶§¹®¿¡ ÃÖ±Ù¿¡´Â µµ¸ÞÀÎ ¸ðµ¨À» ¼ºñ½º·Î Á¦°øÇÏ¿© ÀÚµ¿ÈÇÏ´Â °æ¿ì°¡ ¸¹´Ù.
¡ß ÁÖ¿ä ÆÐÅÏ : Data Transfer Object ÆÐÅÏ, Value List Handler ÆÐÅÏ
Áö±Ý±îÁö ¿£ÅÍÇÁ¶óÀÌÁî ½Ã½ºÅÛÀ» ±¸ÃàÇϱâ À§ÇØ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ´Ù¼¸ °èÃþ¿¡ ´ëÇØ °£´ÜÈ÷ Á¤¸®ÇØ º¸¾Ò´Ù. »·ÇÑ À̾߱âµéÀ» ±æ°Ô ´Ã¿© ¾´ ÀÌÀ¯´Â 2°¡Áö »ç½ÇÀ» °Á¶Çϱâ À§ÇؼÀÌ´Ù. ù°, °¢°¢ÀÇ °èÃþÀº Àú¸¶´ÙÀÇ ºÐ¸íÇÑ ¿ªÇÒÀÌ Á¸ÀçÇϸç, ±× ¿ªÇÒÀ» Ãæ½ÇÈ÷ ¼öÇàÇÒ ¼ö¸¹Àº ´ë¾È±â¼ú(Alternative)µé »çÀÌ¿¡¼ °³¹ßÀÚ´Â ¹«¾ùÀ» ¼±ÅÃÇÒ Áö °áÁ¤À» ³»·Á¾ß ÇÑ´Ù. µÑ°, °¢°¢ÀÇ ±â¼úµéÀº µ¶¸³ÀûÀ¸·Îµµ ÃæºÐÇÑ °¡Ä¡¸¦ Áö´Ï°í ÀÖÁö¸¸, °¡Àå ÀåÁ¡À» ¹ßÈÖÇÏ´Â Á¦ À§Ä¡¿¡¼ ¼·Î ¿¬°èµÇ¾î »ç¿ëµÉ ¶§ ±× ½Ã³ÊÁö È¿°ú°¡ ´õ¿í Å©´Ù.
¾àÇÑ °áÇÕµµ¸¦ °¡Áø ¾ÆÅ°ÅØÃ³ ±¸¼º
ÀÌ ±ÛÀ» Àд »ó´ç¼öÀÇ µ¶ÀÚµéÀº ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÒ ¶§ ½ºÆ®·µÃ÷¸¦ »ç¿ëÇØ º» °æÇèÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ¿¡´Â ÅÂ±× ¶óÀ̺귯¸®°¡ Á¢¸ñµÈ JSP¸¦ ÀÌ¿ëÇßÀ» °ÍÀ̸ç, ¾÷¹« ·ÎÁ÷°ú ¿µ¼Ó¼º 󸮴 ±× ±Ô¸ð¿¡ µû¶ó POJO³ª EJB¸¦ ÀûÀýÈ÷ ¼¯¾î »ç¿ëÇßÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ Á¤¸» ½ºÆ®·µÃ÷¸¸À¸·Î ÃæºÐÇß¾ú´ÂÁö ¹¯°í ½Í´Ù.
 |
| <±×¸² 1> ¾ÆÅ°ÅØÃ³¸¦ ±¸¼ºÇÏ´Â ´Ù¼¸ °èÃþ°ú ´ë¾È ±â¼ú |
<±×¸² 1>Àº ¾Õ¿¡¼ Á¤¸®ÇÑ °¢ °èÃþÀ» µµ½ÄÈÇϰí, °¢ °èÃþº° ´ë¾È ±â¼úÀ» ¿ä¾àÇØ¼ Ç¥±âÇÑ °ÍÀÌ´Ù. ¾ð¶æ º¸±â¿¡ Àüü ±¸Á¶´Â ÈìÀâÀ» °÷ÀÌ ¾ø¾î º¸À̱⵵ ÇÑ´Ù. ±×·¸´Ù¸é ´ÙÀ½ÀÇ 3°¡Áö Áú¹®¿¡ ´ë´äÇØ º¸ÀÚ.
[1] Á¦¾î °èÃþ¿¡¼ ºñÁî´Ï½º ·ÎÁ÷ °èÃþ¿¡ ±¸ÇöµÈ ±â´ÉÀ» ÀÌ¿ëÇϱâ À§Çؼ´Â ±¸Ã¼ÀûÀÎ ¼³Á¤ Á¤º¸¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. ±×·±µ¥ ¸¸ÀÏ ÀÌ¿ëÇϰíÀÚ ÇÏ´Â ±â´É¿¡ ´ëÇÑ ¼³Á¤ÀÌ º¯°æµÈ´Ù¸é ¾î¶»°Ô ÇÒ °ÍÀΰ¡? ÄÄÆ÷³ÍÆ®ÀÇ ¼³Á¤°ú ±× »ç¿ëÀ» ºÐ¸®ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº °ú¿¬ ¹«¾ùÀϱî(ÈùÆ® : ¸®ÆÑÅ丵ÀÇ ÀúÀÚÀ̱⵵ ÇÑ ¸¶Æ¾ ÆÄ¿ï·¯´Â ±×ÀÇ È¨ÆäÀÌÁö¿¡¼ ÀÌ¿¡ ´ëÇÑ ÇØ°áÃ¥À¸·Î Á¦¾î ¿ªÇàÈ(Inversion of Control) ÆÐÅÏÀ̶õ °ÍÀ» ¼Ò°³Çϰí ÀÖ´Ù)?
[2] ºñÁî´Ï½º ·ÎÁ÷ °èÃþ¿¡´Â ¼ø¼öÇÑ ¾÷¹« ·ÎÁ÷ÀÇ ±¸Çö ¿Ü¿¡µµ º¸¾È, ÀÎÁõ, ·Î±×¿Í °°Àº ½Ã½ºÅÛ Àü¹Ý¿¡ °ÉÄ£ ±â´ÉµéÀÌ °øÁ¸ÇÑ´Ù. ÀÌ·¯ÇÑ ±â´ÉÀº ¾÷¹« ·ÎÁ÷°ú µÚ¼¯¿© Äڵ带 °ü¸®ÇÏ±â ¾î·Æ°Ô ÇÏ´Â ÁÖ¹üÀÌ µÇ±âµµ ÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ ÇØ°áÃ¥Àº ¾ø´Â°¡(ÈùÆ® : AOP´Â ¹Ù·Î ±×·¯ÇÑ ¹®Á¦¸¦ ´Ù·ç±â À§ÇÑ »õ·Î¿î ÆÐ·¯´ÙÀÓÀÌ´Ù)?
[3] Áö±Ý ¿£ÅÍÇÁ¶óÀÌÁî ÀÚ¹Ù ¿µ¿ªÀº Ç¥ÁØÈµÈ ÁÖ·ù ±â¼ú°ú âÀÇÀûÀÎ ´Ù¾çÇÑ ¾ÆÀ̵ð¾î·Î ¹«ÀåÇÑ ¿ÀǼҽº ±â¼úµé·Î ÀÎÇØ ¼ö¾øÀÌ ¸¹Àº ¼±ÅÃÀ» °³¹ßÀڵ鿡°Ô °¿äÇϰí ÀÖ´Ù. Áö±Ý ÇöÀç´Â ´ë¾Èµé Áß Çϳª¸¦ ¼±ÅÃÇß´õ¶óµµ ½Ã°£ÀÌ Áö³²¿¡ µû¶ó ±× ¼±ÅÃÀ» ¹Ù²Ù°Ô µÉ °¡´É¼ºµµ ¾ó¸¶µçÁö Á¸ÀçÇÏ´Â °ÍÀÌ´Ù.
½ºÆ®·µÃ÷¸¦ À¥¿öÅ©·Î ±³Ã¼ÇÏ´õ¶óµµ ¶Ç´Â EJB ±¸ÇöÀ» ÇÏÀ̹ö³×ÀÌÆ®·Î ±³Ã¼ÇÏ´õ¶óµµ ±×·¯ÇÑ º¯°æÀÇ ¿µÇâÀÌ Àüü¿¡ ÆÄ±ÞµÇÁö ¾Ê°í, ÇØ´ç °èÃþ¿¡ ±¹Çѵǵµ·Ï ÇÒ ¼ö ÀÖ´Â º¸´Ù Æ÷°ýÀûÀÎ ÇÁ·¹ÀÓ¿öÅ©´Â ¾øÀ»±î(ÈùÆ® : ÀÌ·¯ÇÑ ±â´ÉÀ» ¼öÇàÇÏ´Â ÇÁ·¹ÀÓ¿öÅ©¸¦ °æ·®±Þ ÄÁÅ×À̳Ê(Lightweight Container)¶ó°í ºÎ¸¥´Ù. °æ·®±Þ ÄÁÅ×À̳ÊÀÇ ÇÙ½É ¿ø¸®°¡ ¹Ù·Î Á¦¾î ¿ªÇàÈ ÆÐÅÏÀÌ´Ù. ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©´Â °æ·®±Þ ÄÁÅ×À̳ÊÀÓ°ú µ¿½Ã¿¡ AOP¸¦ Áö¿øÇÑ´Ù. À̰ÍÀÌ ¿ì¸®°¡ ½ºÇÁ¸µ(Spring)¿¡ °ü½ÉÀ» °¡Áö´Â ÀÌÀ¯ÀÌ´Ù)?
°¢ °èÃþº° °áÇÕµµ¸¦ ¶³¾î¶ß¸®´Â °Í(loosely-coupled)Àº ÁÁÀº ¾ÆÅ°ÅØÃ³¸¦ ±¸¼ºÇϱâ À§ÇØ ÇʼöÀûÀÎ ¿ä°ÇÀ̶ó°í ÇÒ ¼ö ÀÖÀ¸¸ç, ¿äÁòó·³ ´ë¾È ±â¼úÀÌ ¸¹À» °æ¿ì¿¡´Â ƯÈ÷ Áß¿äÇÏ´Ù°í ÇϰڴÙ. ¾àÇÑ °áÇÕµµ¸¦ °¡Áø ¾ÆÅ°ÅØÃ³¸¦ ±¸¼ºÇϱâ À§ÇÑ ÇÙ½É ±â¼úÀÌ ¹Ù·Î ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù.
½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ© °³¿ä
½ºÇÁ¸µÀº ±× À̸§ ÀÚü·Îµµ ¸¹Àº Àǹ̸¦ ³»Æ÷Çϰí ÀÖ´Ù. º½! ÀÌ ¾ó¸¶³ª ¼³·¹´Â ´Ü¾îÀΰ¡? º½À̶ó´Â À̸§¸¸À¸·Îµµ ¹«°Å¿î J2EEÀÇ »ç¿ëÀ¸·Î ÁöÄ£ °³¹ßÀڵ鿡°Ô ÀÌÁ¦ °Ü¿ïÀÌ ³¡³ª°í »õ·Î¿î °èÀýÀÌ µ¹¾Æ¿À°í ÀÖÀ½À» ÇÔÃàÀûÀ¸·Î Ç¥ÇöÇØ³»°í ÀÖ´Ù. ½ºÇÁ¸µÀº ·Îµå Á¸½¼ÀÌ ¾´ ¡¸Expert one-on-one J2EE Design and Development¡¹¶õ Ã¥¿¡¼ ¼Ò°³µÈ ¼Ò½ºÄڵ带 ±â¹ÝÀ¸·Î 2003³â 2¿ù ¿ÀǼҽº·Î ½ÃÀÛµÈ ÇÁ·ÎÁ§Æ®ÀÌ´Ù. ½ºÇÁ¸µÀÌ Ãß±¸ÇÏ´Â ¹Ù´Â Å©°Ô µÎ °¡ÁöÀÌ´Ù.
[1] º¹ÀâÇÏ°í ¹«°Å¿î J2EE ±â¼úÀÇ »ç¿ëÀ» ½±°í °¡º±°Ô ¸¸µé¾îÁÖ°í, ÀÚ¿¬½º·´°Ô °ËÁõµÈ ÃÖ»óÀÇ ½Çõ »ç·ÊµéÀ» ±¸ÇöÇϵµ·Ï ÇÔÀ¸·Î½á ÁÁÀº ÇÁ·Î±×·¥ÀÌ ÀÛ¼ºµÉ ¼ö ÀÖµµ·Ï À¯µµÇÑ´Ù.
[2] ±âÁ¸ÀÇ Àß ¾Ë·ÁÁø ±â¼úµéÀ» ÇÁ·¹ÀÓ¿öÅ© ³»¿¡¼ ÀϰüµÈ ¹æ¹ýÀ¸·Î ½±°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µ½´Â´Ù.
À̸¦ À§ÇØ ½ºÇÁ¸µÀº ´Ù¸¥ ÇÁ·¹ÀÓ¿öÅ©¿Í´Â Â÷º°ÈµÈ ´ÙÀ½°ú °°Àº Ư¡À» °¡Áø´Ù.
¡ß ½ºÇÁ¸µÀº EJB¸¦ »ç¿ëÇ졂 ÇÏÁö ¾Ê°Ç °ü°è¾øÀÌ ºñÁî´Ï½º °´Ã¼µéÀ» È¿°úÀûÀ¸·Î ±¸¼ºÇϰí, °ü¸®ÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â µ¥ ÃÊÁ¡À» ¸ÂÃá´Ù.
¡ß ½ºÇÁ¸µÀº °èÃþÈµÈ ¾ÆÅ°ÅØÃ³¸¦ °®°í ÀÖÀ¸¸ç, ±× Áß ¾î¶² ºÎºÐµµ µ¶¸³ÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖµµ·Ï ¸ðµâȵǾî ÀÖ´Ù. »Ó¸¸ ¾Æ´Ï¶ó °¢°¢ÀÇ ¸ðµâÀº ÀϰüµÈ ¹æ¹ýÀ¸·Î »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ Çѹø Àͼ÷ÇØÁö°í ³ª¸é »ç¿ëÀÌ ¹«Ã´ ½±´Ù.
¡ß ½ºÇÁ¸µÀº Àüü ÇÁ·ÎÁ§Æ®ÀÇ ¼³Á¤À» °ü¸®ÇÒ ¼ö ÀÖ´Â ÀϰüµÈ ¹æ¹ýÀ» Á¦°øÇÔÀ¸·Î½á, °³¹ßÀÚµéÀÌ °¢Á¾ ÇÁ·ÎÆÛƼ ÆÄÀÏÀ» ÀÛ¼ºÇÏÁö ¾Êµµ·Ï À¯µµÇÑ´Ù. À̰ÍÀº IoC¶ó´Â ½ºÇÁ¸µÀÇ Æ¯Â¡ ¶§¹®Àε¥, °´Ã¼µé°£ÀÇ ÀÇÁ¸¼ºÀÌ µû·Î °ü¸®µÊÀ¸·Î½á ºñÁî´Ï½º ·ÎÁ÷ÀÌ EJB·Î °³¹ßµÇ¾ú°Ç ÀÏ¹Ý ÀÚ¹Ù °´Ã¼·Î °³¹ßµÇ¾ú°Ç µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î ÇØ´ç ·ÎÁ÷À» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ÀÌÁ¡µµ Ãß°¡µÈ´Ù.
¡ß ½ºÇÁ¸µ ±â¹ÝÀ¸·Î ÀÛ¼ºµÈ ¾ÖÇø®ÄÉÀ̼ÇÀº ½ºÇÁ¸µÀÇ API¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â´Ù. À̰ÍÀº ¾î¶² ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿Íµµ ½±°Ô ¿¬µ¿µÇµµ·Ï Çϸç, ½ÉÁö¾î ½ºÇÁ¸µÀ» »ç¿ëÇÏÁö ¾Ê¾ÒÀ» ¶§Á¶Â÷µµ ºñÁî´Ï½º ·ÎÁ÷ÀÇ Àç»ç¿ëÀÌ °¡´ÉÇØÁö´Â ¿äÀÎÀÌ µÈ´Ù.
¡ß ½ºÇÁ¸µÀº AOP Áö¿øÀ» ÅëÇØ ÁÖ¿ä ºñÁî´Ï½º ·ÎÁ÷°ú ½Ã½ºÅÛ Àü¹Ý¿¡ °ÉÄ£ ±â´É ¸ðµâÀ» ¿Ïº®È÷ ºÐ¸®Çس»µµ·Ï µµ¿ÍÁØ´Ù.
¡ß ½ºÇÁ¸µÀº ÀÛ¼ºµÈ Äڵ忡 ´ëÇÑ À¯´Ö Å×½ºÆ®¸¦ ½±°Ô ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù.
½ºÇÁ¸µÀÇ ±â´É°ú »ç¿ë ½Ã³ª¸®¿À
ÇöÀç ½ºÇÁ¸µÀº 1.0 ¹öÀüÀÌ Ãâ½ÃµÈ »óÅÂÀÌ´Ù. ½ºÇÁ¸µ ȨÆäÀÌÁö(
www.springframework.org)¿¡¼ spring-framework-1.0.2-with-dependencies.zip ÆÄÀÏÀ» ´Ù¿î¹Þ±â ¹Ù¶õ´Ù. ÀÌ ÆÄÀÏÀº ÀÇÁ¸¼º ÀÖ´Â °ü·Ã ¶óÀ̺귯¸®°¡ ¸ðµÎ Æ÷ÇÔµÈ ¹öÀüÀÌ´Ù. ½ºÇÁ¸µÀÇ Àüü ±â´ÉÀº Å©°Ô 7°³ÀÇ ¸ðµâ·Î ±¸¼ºµÈ´Ù(<Ç¥ 1>).
 |
| <±×¸² 2> ½ºÇÁ¸µÀÇ ±â´É ¿ä¼Ò |
 |
| <Ç¥ 1> ½ºÇÁ¸µÀÇ ±â´É ¿ä¼Ò |
½ºÇÁ¸µ ¹èÆ÷ ÆÄÀÏÀÇ ¾ÐÃàÀ» Ç®¸é dist¶õ µð·ºÅ丮°¡ ³ªÅ¸³´Ù. ±× ¾È¿¡ ÀÖ´Â spring.jar°¡ ¾Õ¿¡¼ ¾ð±ÞÇÑ ½ºÇÁ¸µÀÇ ¸ðµç ±â´ÉÀ» Æ÷ÇÔÇÏ´Â ÆÄÀÏÀÌ´Ù. °¢°¢ÀÇ ±â´É Áß ÇÊ¿äÇÑ ºÎºÐÀ» µû·Î »ç¿ëÇÒ °æ¿ì¸¦ À§ÇØ ÆÐŰÁöº°·Î ¹Àº º°µµÀÇ JAR ÆÄÀÏÀÌ ÇÔ²² Á¦°øµÈ´Ù.
½ºÇÁ¸µÀ» ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ ÇüÅÂÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº <±×¸² 3>°ú °°Àº ±¸Á¶¸¦ °¡Áø´Ù. ÅèĹ, À¥·ÎÁ÷, À¥½ºÇǾî, JBoss¸¦ Æ÷ÇÔÇÑ ¾î¶² À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿¡¼µµ µ¿À۵ȴÙ. IoC ÄÁÅ×À̳ÊÀÇ ÇÙ½ÉÀÎ Core ÆÐŰÁö¿Í AOP Áö¿øÀ» À§ÇÑ AOP ÆÐŰÁö, ±â´ÉÀ» ±¸ÇöÇÑ ºó °´Ã¼¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦°øÇÏ´Â Context ÆÐŰÁö´Â ¹Ýµå½Ã Æ÷ÇԵǾî¾ß ÇÑ´Ù. ´ëºÎºÐ µ¥ÀÌÅͺ£À̽º 󸮸¦ ¼öÇàÇϱ⠶§¹®¿¡ DAO ÆÐŰÁöµµ ÀϹÝÀûÀ¸·Î Æ÷ÇԵȴÙ.
½ºÇÁ¸µ ¾ÖÇø®ÄÉÀ̼ÇÀº ÀϹÝÀûÀ¸·Î ORM ¼Ö·ç¼ÇÀ» äÅÃÇϰí, ƯÈ÷ ÇÏÀ̹ö³×ÀÌÆ®¿Í ±ÃÇÕÀÌ Àß ¸Â±â ¶§¹®¿¡ ÇÏÀ̹ö³×ÀÌÆ®¸¦ ¼³Ä¡Çϰí ORM ÆÐŰÁö¸¦ ÀÌ¿ëÇÏ´Â °æ¿ì°¡ ÀϹÝÀûÀÌ´Ù. ±× À§¿¡¼ Web ÆÐŰÁö¸¦ ±â¹ÝÀ¸·Î Web MVC ÆÐŰÁö¸¦ ÀÌ¿ëÇØ¼ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÑ´Ù.
 |
| <±×¸² 3> ½Ã³ª¸®¿À 1. ¿ÏÀüÇÑ ÇüÅÂÀÇ ½ºÇÁ¸µ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç |
¸¸ÀÏ ½ºÇÁ¸µÀÇ Web MVC ÆÐŰÁö¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í, ½ºÆ®·µÃ÷³ª À¥¿öÅ©¸¦ Á¦¾î °èÃþ¿¡ »ç¿ëÇÏ°í ½Í´Ù¸é Web MVC¸¦ ½ºÆ®·µÃ÷°¡ ´ëüÇÏ´Â <±×¸² 4> ¿Ü¿¡ °°Àº ±¸Á¶·Î À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ °³¹ßµÉ °ÍÀÌ´Ù.
 |
| <±×¸² 4> ½Ã³ª¸®¿À 2. ¼µåÆÄƼ WAF¿Í ORMÀ» ¿¬°èÇÑ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç |
ÀÌ ¹Û¿¡µµ EJB¸¦ »ç¿ëÇÏ´Â °æ¿ì AbstractEnterpriseBeanÀ̶ó´Â POJO¸¦ ÀÌ¿ëÇØ¼ EJB¸¦ ½ºÇÁ¸µ¿¡¼ °ü¸®Çϵµ·Ï Çϰí, SlsbInvoker¸¦ ÀÌ¿ëÇØ¼ EJB¿¡ ´ëÇÑ Á¢±Ù °æ·Î¸¦ Á¦°øÇÏ´Â EJB »ç¿ë À¯ÇüÀÌ ÀÖ´Ù. ¶ÇÇÑ À¥ ¼ºñ½º¸¦ Æ÷ÇÔÇÑ ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǰú ¿¬µ¿ÇÏ´Â °æ¿ì¸¦ À§ÇØ Remote ÆÐŰÁö°¡ Á¦°øµÇ±âµµ ÇÑ´Ù.
½ºÇÁ¸µÀº ±× ÀÚü·Îµµ ÇÑ ±ÇÀÇ Ã¥À» ¾µ ¼ö ÀÖÀ» ¸¸Å ¹æ´ëÇÑ ±â¼úÀÌ´Ù. ±× ¸ðµÎ¸¦ ªÀº ¿¬À縦 ÅëÇØ ¼Ò°³ÇÑ´Ù´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ±×·¯ÇÑ ÀÌÀ¯·Î ½ºÇÁ¸µ¿¡ ´ëÇÑ ¼Ò°³´Â ÀÌÂë¿¡¼ ¸¶¹«¸®Çϰí, ½ºÇÁ¸µÀ» ÀÌÇØÇϱâ À§ÇØ ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÏ´Â IoC(Inversion of Control) ÄÁÅ×À̳ÊÀÇ °³³ä°ú AOP(Aspect Oriented Programming)¸¦ °£´ÜÈ÷ ¼³¸íÇϰí, 2°³ÀÇ ÀÛÀº ¿¹Á¦¸¦ ¼Ò°³ÇÏ´Â °ÍÀ¸·Î À̹ø ±ÛÀ» ¸¶¹«¸®ÇϰڴÙ. ºÎÁ·ÇÑ ¼³¸íÀº ÇÊÀÚµéÀÌ ¿î¿µÇÏ´Â
VSSH Æ÷·³À̳ª, ½ºÇÁ¸µ °ü·Ã ±â»ç ¹× ÀÚ·áµéÀ» Á¤¸®ÇÑ
¸®¼Ò½º ¸ÊÀ» ÅëÇØ ¿©·¯ºÐ ½º½º·Î ÀÍÇô³ª°¡±â¸¦ ¹Ù¶õ´Ù.
IoC ÄÁÅ×ÀÌ³Ê¿Í AOP
½ºÇÁ¸µÀº ´Ù¸¥ ÇÁ·ÎÁ§Æ®¿¡¼ °³¹ßµÈ ÄÄÆ÷³ÍÆ®¸¦ Á¶¸³Çؼ ÀÀÁý·Â ÀÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀÌ °¡´ÉÇϵµ·Ï µµ¿ÍÁÖ´Â IoC ÄÁÅ×À̳ÊÀ̸ç, ´Ù¸¥ ¸»·Î °æ·®±Þ ÄÁÅ×À̳Ê(Lightweight Container)¶ó°íµµ ÇÑ´Ù. IoC ÄÁÅ×À̳ÊÀÇ ¶Ç ´Ù¸¥ Á¾·ù·Î´Â PicoContainer¿Í ¾ÆÆÄÄ¡ÀÇ ¾Æ¹ß·Ð, ±×¸®°í HiveMind µîÀÌ ÀÖ´Ù.
±× Áß¿¡¼ ÇöÀç °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖ´Â °ÍÀº ½ºÇÁ¸µ°ú PicoContainerÀÌ´Ù. IoC ÄÁÅ×À̳ʴ ´Ù¸¥ ÄÁÅ×ÀÌ³Ê¿Í ´Þ¸® ¾ÖÇø®ÄÉÀÌ¼Ç ÄÚµå¿Í ÄÁÅ×À̳ʰ£ÀÇ ÀÇÁ¸¼ºÀ» ÃÖ¼ÒÈÇÏ´Â °ÍÀÌ Æ¯Â¡ÀÌ´Ù.
IoC ÄÁÅ×À̳ʰ¡ ÄÁÅ×À̳ʿ¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» ÃÖ¼ÒÈÇÏ¸é¼ ÄÄÆ÷³ÍÆ®¸¦ ¿«¾îÁÖ´Â ÀÏÀ» ¼öÇàÇÏ´Â ¹Ø¹ÙÅÁ¿¡´Â Á¦¾î ¿ªÇàÈ(Inversion of Control)¶ó´Â °³³äÀÌ ±ò·Á ÀÖ´Ù. Á¦¾î ¿ªÇàÈ´Â ¸®ÆÑÅ丵ÀÇ ÀúÀÚÀ̱⵵ ÇÑ
¸¶Æ¾ ÆÄ¿ï·¯ÀÇ È¨ÆäÀÌÁö¿¡ Àß Á¤ÀǵǾî ÀÖ´Ù.
Á¦¾î ¿ªÇàȶó´Â ¿ë¾î´Â Á÷°üÀûÀÌÁö ¸øÇϱ⠶§¹®¿¡, ¶Ç ´Ù¸¥ ¸»·Î ¿¬°ü¼º »ðÀÔ(Dependency Injection)À̶ó°íµµ ºÒ·ÁÁø´Ù. ¿¬°ü¼º »ðÀÔ ÆÐÅÏÀº ÄÄÆ÷³ÍÆ®ÀÇ ¼³Á¤À» ±×°ÍÀÇ »ç¿ë¿¡¼ ºÐ¸®ÇØ¾ß ÇÑ´Ù´Â ¿øÄ¢(The principle of separating configuration from use)¿¡¼ Ãâ¹ßÇÑ´Ù. ±×·¯ÇÑ ¿øÄ¢À» À§ÇÑ ¶Ç ´Ù¸¥ »ç·Ê´Â J2EE ÆÐÅÏ Áß ¼ºñ½º ·ÎÄÉÀÌÅÍ(Service Locator) ÆÐÅÏÀÌ´Ù.
ÀÇÁ¸¼º »ðÀÔ ÆÐÅÏÀ» ÀÌÇØÇϱâ À§ÇØ °£´ÜÇÑ ¿¹¸¦ Çϳª »ìÆìº¸µµ·Ï ÇÏÀÚ. ¾î´À ƯÁ¤ °¨µ¶ÀÌ ¸¸µç ¿µÈ¸¦ °Ë»öÇØ¼ ±× °á°ú¸¦ Àü´ÞÇØÁÖ´Â ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. Äڵ忡¼ º¸¿©Áö´Â findAll()À̶ó´Â ¸Þ½îµå¸¦ °¡Áö´Â finder °´Ã¼°¡ ÇÊ¿äÇÏ´Ü »ç½ÇÀ» ¾Ë ¼ö ÀÖ´Ù.
ÀϹÝÀûÀ¸·Î ÀÌ·² ¶§ ±â´É È®ÀåÀ» À§ÇØ MovieFinder¿Í °°Àº ÀÎÅÍÆäÀ̽º¸¦ ÀÛ¼ºÇÏ°Ô µÈ´Ù.
public interface MovieFinder {
List findAll();
}
¿µÈ Á¤º¸°¡ ÄÝ·ÐÀ¸·Î ±¸ºÐµÈ CSV ÆÄÀÏ¿¡ ±â·ÏµÇ¾î ÀÖ´Ù¸é, MovieFinder ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ColonDelimitedMovieFinder Ŭ·¡½º°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ ±× Á¤º¸´Â MovieLister¿¡ »ý¼ºÀÚ¸¦ ÀÌ¿ëÇØ¼ Ãʱâ鵃 °ÍÀÌ´Ù.
class MovieLister...
private MovieFinder finder;
public MovieLister() {
finder = new ColonDelimitedMovieFinder("movies1.txt");
}
ÀüüÀûÀÎ ½Ã½ºÅÛ ±¸Á¶´Â <±×¸² 5>¿Í °°Àº ÇüÅÂÀÌ´Ù. MovieLister Ŭ·¡½º´Â MovieFinder ÀÎÅÍÆäÀ̽º Á¤º¸¸¸À» ÀÌ¿ëÇØ¼ ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖÁö¸¸, ÇØ´ç ±â´ÉÀ» »ç¿ëÇϱâ À§ÇØ MovieFinderImpl Ŭ·¡½º Áß¿¡¼ ColonDelimitedMovieFinder¸¦ ÀÌ¿ëÇÑ´Ù´Â ±¸Ã¼ÀûÀÎ ¼³Á¤ Á¤º¸°¡ Ŭ·¡½ºÀÇ Äڵ忡 Æ÷ÇԵǾî ÀÖ´Ù. À̰ÍÀº µ¥ÀÌÅͰ¡ DB³ª XML·Î º¯°æµÇ¾î RDBMovieFinder³ª XMLMovieFinder·Î ±³Ã¼µÉ °æ¿ì Äڵ带 ¼öÁ¤Çؼ ´Ù½Ã ºôµåÇØ¾ß ÇÑ´Ù´Â »ç½ÇÀ» ÀǹÌÇÑ´Ù.
 |
| <±×¸² 5> ÀϹÝÀûÀÎ Á¦¾î È帧À» ÅëÇÑ ÀÇÁ¸¼º Ç¥Çö |
»ç½Ç MovieLister´Â Á¤º¸°¡ CSV ÆÄÀÏ¿¡ ±â·ÏµÇ¾î ÀÖ°Ç, DB¿¡ ±â·ÏµÇ°Ç, XML¿¡ ±â·ÏµÇ°Ç ¿µÇâÀ» ¹ÞÁö ¾Ê¾Æ¾ß Á¤»óÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ¾î¶»°Ô Çϸé ÀÌó·³ ºÒÇÊ¿äÇÑ ÀÇÁ¸ °ü°è¸¦ ¾ø¾Ù ¼ö ÀÖ´Â °ÍÀϱî?
 |
| <±×¸² 6> Á¦¾î¿ªÇàÈ ÆÐÅÏÀ» ÅëÇÑ ÀÇÁ¸¼º »ðÀÔ |
±× ÇØ´äÀº ¼³Á¤ Á¤º¸¿¡ µû¶ó ¾î¶² ±¸Çö °´Ã¼¸¦ »ç¿ëÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÏ´Â ¾î¼Àºí·¯¸¦ ÀÌ¿ëÇØ¼ <±×¸² 6>¿¡¼ º¸¿©Áö´Â ±¸Á¶·Î ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â °ÍÀÌ´Ù.
MovieLister Ŭ·¡½º¿¡¼ ¼±¾ðµÈ MovieFinder ŸÀÔÀÇ finder¸¦ ÃʱâÈÇÏ´Â ¹æ¹ýÀº Å©°Ô 2°¡Áö°¡ ÀÖ´Ù. ù ¹øÂ°´Â »ý¼ºÀÚ¸¦ ÅëÇØ ¼Ó¼ºÀ» ÃʱâÈÇÏ´Â °ÍÀ̰í, µÎ ¹øÂ°´Â setMovieFinder()¿Í °°Àº Setter ¸Þ½îµå¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¼³Á¤À» ÀÚµ¿ÈÇÏ´Â ¾î¼Àºí·¯¸¦ ±¸ÇöÇØ ³õÀº °ÍÀÌ ¹Ù·Î IoC ÄÁÅ×À̳ÊÀÌ´Ù.
¿¬°ü¼º »ðÀÔÀº Å©°Ô Constructor Injection, Setter Injection, Interface InjectionÀÇ 3°¡Áö À¯ÇüÀ» °¡Áø´Ù. Constructor InjectionÀÌ »ý¼ºÀÚ¸¦ ÀÌ¿ëÇØ¼ ÀÇÁ¸¼ºÀ» ¼³Á¤ÇØÁÖ´Â ¹æ¹ýÀ̰í, Setter InjectionÀÌ Setter ¸Þ½îµå¸¦ ÀÌ¿ëÇØ¼ ÀÇÁ¸¼ºÀ» ¼³Á¤ÇØÁÖ´Â ¹æ¹ýÀÌ´Ù. Pico Container´Â Constructor InjectionÀ» ÁÖ·Î »ç¿ëÇϰí, ½ºÇÁ¸µÀº ÀÚ¹Ù ºó ±ÔÄ¢À» ÀÌ¿ëÇÑ Setter InjectionÀ» ÁÖ·Î »ç¿ëÇÑ´Ù.
½ºÇÁ¸µÀÇ IoCÀûÀΠƯ¡Àº AOP¸¦ ±¸ÇöÇÏ´Â ÇÙ½ÉÀûÀÎ ¿ø¸®°¡ µÇ±âµµ ÇÑ´Ù. AOP´Â ¾ÆÁ÷ ±¹³»¿¡´Â »ý¼ÒÇÑ ºÐ¾ßÀÌ´Ù. ±è´ë°ï´ÔÀÌ ÀÛ¼ºÇÑ °£´ÜÇÑ
¼Ò°³±ÛÀ» ÅëÇØ AOPÀÇ °³³äÀ» Àâ¾Æº¸µµ·Ï ÇÏÀÚ.
ÀÚ±Ý ÀÌü¸¦ ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. Ãâ±Ý °èÁÂ¿Í ÀÔ±Ý °èÁ ±×¸®°í ÀÌü ±Ý¾×À» ÀÔ·Â¹Þ¾Æ SQL ¹®Àå ¶Ç´Â ÇÔ¼ö ÇÑ ¹ø µ¹¸®´Â °ÍÀ¸·Î ¸ðµç ÇÁ·Î±×·¡¹ÖÀÌ ³¡³ª´Â°¡? ±×·¸Áö ¾Ê´Ù. ÇØÅ·À» ¹æÁöÇϱâ À§ÇØ »ç¿ëÀÚ°¡ ÀûÀýÇÑ º¸¾È ÇÁ·Î±×·¥À» ¼³Ä¡Çß´ÂÁö Á¡°ËÇÏ´Â Äڵ嵵 ÀÖ¾î¾ß Çϰí, »ç¿ëÀÚ°¡ ÀÎÁõµÇ¾ú´ÂÁö Á¡°ËÇÏ´Â Äڵ嵵 ½á¾ß Çϰí, »ó´ë¹æ ÀºÇà¿¡¼ ÀûÀýÇÏ°Ô Ã³¸®µÇ¾ú´ÂÁöµµ Á¡Á¡ÇØ¾ß Çϰí, Ȥ½Ã »ç¿ëÀÚ°¡ ÀÌü ¹öưÀ» µÎ ¹ø ´©¸¥ °ÍÀº ¾Æ´Ñ°¡ Ã¼Å©ÇØ¾ß Çϰí, ½Ã½ºÅÛ ·Î±×µµ ³²°Ü¾ß ÇÑ´Ù.
Áï, ±¸ÇöÇÏ·Á°í ÇÏ´Â ±â´É »Ó ¾Æ´Ï¶ó º¸¾È, ÀÎÁõ, ·Î±×, ¼º´É°ú °°Àº ´Ù¸¥ ±â´Éµéµµ ³ì¾Æ ÀÖ¾î¾ß ÇÑ´Ù´Â ¶æÀÌ´Ù. ¾î¼¸é ÀÌü¸¦ À§ÇÑ Äڵ庸´Ù Àâ´ÙÇÑ ´Ù¸¥ Ãø¸éÀÇ ¹®Á¦µéÀ» ´Ù·ç´Â Äڵ尡 ´õ ±æ¾îÁú ¼ö ÀÖ´Ù. ÀÌ·± ÄÚµåµéÀº ÀÔ±ÝÀ̳ª Ãâ±Ý °°Àº ´Ù¸¥ °÷¿¡¼µµ °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â °ÍÀÌ´Ù.
 |
| <±×¸² 7> AOPÀÇ °³³ä |
±¸ÇöÇÏ·Á°í ÇÏ´Â ºñÁî´Ï½º ±â´ÉµéÀ» AOP¿¡¼´Â Primary(Core) ConcernÀ̶ó´Â ¿ë¾î·Î Ç¥ÇöÇÑ´Ù. º¸¾È, ·Î±×, ÀÎÁõ°ú °°ÀÌ ½Ã½ºÅÛ Àü¹ÝÀûÀ¸·Î »êÀçµÈ ±â´ÉµéÀº Cross-cutting concernÀ̶ó°í ºÎ¸¥´Ù. AOP´Â Cross-cutting concernÀ» ¾î¶»°Ô ´Ù·ê °ÍÀΰ¡¿¡ ´ëÇÑ »õ·Î¿î ÆÐ·¯´ÙÀÓÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.
±×·³ AOP°¡ µîÀåÇϱâ ÀÌÀü¿¡ ¿ì¸®´Â ¾î¶»°Ô Cross-cutting ConcernÀ» ó¸®ÇØ¿ÔÀ»±î? ¸Å¿ì °£´ÜÇÏ´Ù. Primary Concern¸¦ ±¸ÇöÇÑ ÇÁ·Î±×·¥¿¡ ÇÔ²² Æ÷ÇÔ½ÃÄ×´Ù. Primary concern, Cross-cutting concernÀÌ ÇϳªÀÇ ÇÁ·Î±×·¥ ¾È¿¡ µé¾î°¡°Ô µÇ¸é, ÇÁ·Î±×·¥À» ÀÌÇØÇϱⰡ Èûµé°í, Cross-cutting concern Äڵ尡 ¿©±âÀú±â¿¡ »êÀçµÇ¾î ¼öÁ¤Çϱâ Èûµé°Ô µÈ´Ù. ´ç¿¬È÷ »ý»ê¼º ¶³¾îÁö°í, ǰÁú ¶³¾îÁö°í, À¯Áöº¸¼ö ºñ¿ëÀº ¸¹ÀÌ µé°Ô µÈ´Ù.
±×·³ AOP´Â Cross-cutting concern¸¦ ¾î¶»°Ô ó¸®Çϴ°¡? AOP¿¡¼´Â Primary Concern ±¸ÇöÇÏ´Â ÄÚµå µû·Î, Cross-cutting concern ±¸ÇöÇÏ´Â Äڵ嵵 µû·Î ÀÛ¼ºÇÑ´Ù. ³ªÁß¿¡ 2°³¸¦ Á¶ÇÕÇÑ ¿Ïº®ÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¸¸µé¾îÁö´Â °ÍÀÌ´Ù.
AOP¿¡¼´Â Cross-cutting concern ±¸ÇöÇÑ Äڵ带 Advice¶ó°í Çϸç, Primary concern ±¸ÇöÇÑ Äڵ带 Code¶ó°í ºÎ¸¥´Ù. Code¿Í Advice¸¦ ¿¬°áÇØÁÖ´Â ¼³Á¤ Á¤º¸¸¦ Point-cutÀ̶ó°í Çϸç, µÑÀ» Á¶ÇÕÇØ¼ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î ¿Ï¼ºÇÏ´Â °úÁ¤À» Weaving(Á¶ÇÕ)À̶ó°í ºÎ¸¥´Ù.
±â¼úÀû ¿ë¾î·Î¼ÀÇ ¡®Aspect¡¯´Â Advice¿Í Point-cutÀ» ÇÔ²² ÁöĪÇÏ´Â ´Ü¾îÀÌ´Ù. Point-cutÀº ¾î¶² Advice¸¦ Code ¾î´À À§Ä¡¿¡ µÑ °ÍÀΰ¡ ÇÏ´Â °ÍÀÌ´Ù. ½ºÇÁ¸µÀÇ AOP ÆÐŰÁö´Â ÀÌ·¯ÇÑ AOP °³³äÀ» ±¸ÇöÇÑ °ÍÀ¸·Î, ±× ±â¹Ý¿¡´Â ¼³Á¤À» ÀÌ¿ëÀ¸·ÎºÎÅÍ ºÐ¸®ÇÏ´Â ÀÇÁ¸¼º »ðÀÔ ÆÐÅÏÀÌ ³ì¾Æ ÀÖ´Ù.
¿¹Á¦ 1. ½ºÇÁ¸µÀÇ WebMVC¸¦ ÀÌÇØÇÏÀÚ
ÀÌÁ¦ ½ºÇÁ¸µÀ» ÀÌÇØÇϱâ À§ÇØ 2°¡Áö ¿¹Á¦¸¦ »ìÆìº¼ °ÍÀÌ´Ù. ù ¹øÂ° ¿¹Á¦´Â ½ºÇÁ¸µ °ø½Ä ȨÆäÀÌÁö¿¡ ¼Ò°³µÈ °ÍÀ¸·Î ¼ø¼öÇÏ°Ô ½ºÇÁ¸µÀÌ Á¦°øÇÏ´Â ±â´É¸¸À» ÀÌ¿ëÇØ¼ °³¹ßµÈ
¿¹Á¦ÀÌ´Ù.
±¹³»¿¡´Â ½ºÇÁ¸µ°ú °ü·ÃÇÑ ÀÚ·á°¡ ÀüÇô ¾ø´Â °ü°è·Î Ãʺ¸ÀÚµéÀ» À§ÇØ ÀÌ ¿¹Á¦¸¦ Æí¿ªÇÏ°í ¸î °¡Áö ¼³¸íÀ» Ãß°¡ÇØ ÃÑ 4ºÎ 8°³ÀÇ °Á·ΠÀ籸¼ºÇؼ VSSH Æ÷·³¿¡
µî·ÏÇØ µÎ¾ú´Ù. ÀÚ¼¼ÇÑ ¼³¸íÀ» ¿øÇÏ´Â µ¶ÀÚ´Â °ü·Ã ÀڷḦ Âü°íÇϱ⠹ٶõ´Ù.
¿©±â¼ ¼Ò°³ÇÏ´Â ¿¹Á¦´Â ¾Õ¿¡¼ ¼Ò°³ÇÑ °Á Áß 2ºÎ±îÁö ±¸ÇöµÈ »ùÇÃÀÌ´Ù. ¿¹Á¦¸¦ ½ÇÇàÇØº¸±â À§Çؼ´Â ÅèŰú Ant, JDK µîÀÌ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ¿¹Á¦(springapp.zip)¸¦ ´Ù¿î·ÎµåÇÑ ´ÙÀ½, ÀÛ¾÷ µð·ºÅ丮¿¡¼ ¾ÐÃàÀ» Ç®¸é build.properties ÆÄÀÏÀÌ º¸ÀÏ °ÍÀÌ´Ù.
ÇØ´ç ÆÄÀÏÀ» ¿¾î ¹èÆ÷µÉ °æ·Î¿Í ÅèĹ Ȩ, ±×¸®°í ÅèĹ °ü¸®ÀÚÀÇ URL/¾ÆÀ̵ð/ÆÐ½º¿öµå Á¤º¸¸¦ ÀÚ½ÅÀÇ È¯°æ¿¡ ¸Â°Ô º¯°æÇÑ´Ù. ±×·± ´ÙÀ½ build¿Í deploy Ÿ°ÙÀ» ant¸¦ ÀÌ¿ëÇØ¼ ¼ø¼´ë·Î ½ÇÇàÇÑ´Ù. À¥ ºê¶ó¿ìÀú¸¦ ÀÌ¿ëÇØ¼ http://localhost:8080/springapp·Î Á¢¼ÓÇÏ¸é ¾Æ·¡¿Í °°Àº °á°ú ȸéÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
 |
| <±×¸² 8> ½ºÇÁ¸µ WebMVC ¿¹Á¦È¸é |
¿ì¼± ¿¹Á¦ÀÇ web.xml ¼³Á¤ºÎÅÍ »ìÆìº¸µµ·Ï ÇÏÀÚ. DispatcherServletÀÌ springapp¶õ À̸§À¸·Î µî·ÏµÇ¾î ÀÖ°í, htmÀ¸·Î ³¡³ª´Â ¸ðµç URL ÆÐÅÏÀÌ ÇØ´ç ¼ºí¸´À¸·Î ¸ÅÇεǾî ÀÖ´Ù. DispatcherServletÀº ½ºÆ®·µÃ÷ÀÇ ActionServletÀÇ ±â´É°ú À¯»çÇÑ ÀÏÁ¾ÀÇ FrontController ¼ºí¸´ÀÌ´Ù.
<web-app>
<servlet>
<servlet-name>springapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
±×·¸´Ù¸é DispatcherServletÀÌ Ã³¸®ÇÏ´Â Á¦¾î ÇàÀ§¸¦ À§ÇÑ struts-config.xml°ú °°Àº ¼³Á¤ ÆÄÀÏÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ½ºÇÁ¸µ MVC ÆÐŰÁö¿¡¼´Â ±× ÆÄÀÏÀ» ÇØ´ç ¼ºí¸´ À̸§¿¡ "-servlet.xml"À» ºÙ¿© ÀÛ¼ºÇϵµ·Ï ±ÇÀåÇϰí ÀÖ´Ù. ¾ÕÀÇ °æ¿ì ¼ºí¸´ÀÇ À̸§À» springapp·Î ÁÖ¾ú±â ¶§¹®¿¡ springapp-servlet.xmlÀÌ ¼³Á¤ ÆÄÀÏÀÌ µÇ´Â °ÍÀÌ´Ù.
¼³Á¤ ÆÄÀÏÀ» º¸¸é, <beans>¶ó´Â ·çÆ® ¿¤¸®¸ÕÆ® ¹Ø¿¡ <bean>À̶ó´Â ¼³Á¤ÀÌ ¹Ýº¹µÇ¾î Àû¿ëµÇ°í ÀÖ´Ù. À̰ÍÀÌ ½ºÇÁ¸µ¿¡¼ BeanFactory¸¦ ÀÌ¿ëÇØ¼ Á¦°øÇϰí ÀÖ´Â Setter InjectionÀ» ÅëÇØ ¼³Á¤°ú ±× »ç¿ëÀ» ºÐ¸®ÇÏ´Â ¹æ¹ýÀÌ´Ù.
<beans>
<bean id="springappController" class="web.SpringappController">
<property name="productManager">
<ref bean="prodMan"/>
</property>
</bean>
<bean id="prodMan" class="bus.ProductManager">
<property name="products">
<list>
<ref bean="product1"/>
<ref bean="product2"/>
<ref bean="product3"/>
</list>
</property>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.htm">springappController</prop>
</props>
</property>
</bean>
... (»ý·«) ...
</beans>
Àüü ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¿ÀÛ °úÁ¤À» Çѹø »ìÆìº¸ÀÚ.
 |
| <±×¸² 9> ½ºÇÁ¸µ WebMVC ¿¹Á¦µ¿ÀÛ ¿ø¸® |
À£ÄÄ ÆÄÀÏÀÎ index.jsp¿¡´Â hello.htm¿¡ ´ëÇÑ ¸µÅ©°¡ °É·ÁÀÖ´Ù. hello.htm¿¡ ´ëÇÑ ¿äûÀº web.xmlÀÇ ¼³Á¤¿¡ ÀÇÇØ springapp·Î À̸§Áö¾îÁø ½ºÇÁ¸µÀÇ web ÆÐŰÁöÀÇ DispatcherServletÀ¸·Î Àü´ÞµÈ´Ù. DispatcherServletÀº ½ºÇÁ¸µÀÇ core ÆÐŰÁö¿¡ ÀÖ´Â BeanFactory¸¦ ÀÌ¿ëÇØ IoC ÄÁÅ×À̳ÊÀÇ ±âº» ¿ø¸®¿¡ µû¶ó µ¿À۵ȴÙ. ¼³Á¤ ÆÄÀÏÀÎ springapp-servlet.xmlÀ» ÅëÇØ ¸ðµç ÀÇÁ¸¼ºÀÌ °áÁ¤µÇ¾î Á¦¾î°¡ ¹ÝÀüµÇ´Â Çö»óÀ» º¼ ¼ö ÀÖ´Ù.
 |
| <±×¸² 10> VSSH °í°´µî·Ï ¿¹Á¦È¸é |
¿ì¼± <prop key="/hello.htm">springappController</prop>¿¡ ÀÇÇØ hello.htm ¿äûÀ» SpringappController Ŭ·¡½º°¡ ó¸®ÇÏ°Ô µÇ´Âµ¥ ±× »ç½ÇÀ» DispatcherServletÀº ÀüÇô ¸ð¸¥´Ù. SpringappController´Â ¿äûÀ» ó¸®ÇÏ´Â °úÁ¤¿¡¼ ProductManagerÀÇ ±¸ÇöÀ» ÇÊ¿ä·Î Çϴµ¥, ±×°Ô ¾î¶² Ŭ·¡½ºÀÇ ÀνºÅϽºÀÎÁö¸¦ º»ÀÎÀº ¸ð¸¥´Ù. ¼³Á¤¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î bus.ProductManager°¡ °áÁ¤µÇ°í, ÇØ´ç ÀνºÅϽº°¡ °Å²Ù·Î SpringappController¿¡ ã¾Æ¿Í ¿¬°áµÈ´Ù. ÀÌ·¯ÇÑ Á¦¾îÀÇ ¹ÝÀüÀÌ ½ºÇÁ¸µÀ» IoC(Inversion of Control) ÄÁÅ×À̳ʶó°í ºÎ¸£°Ô ÇÏ´Â ÀÌÀ¯´Ù.
´ÙÀ½ ÄÚµå´Â ½ºÆ®·µÃ÷ÀÇ ¾×¼Ç°ú À¯»çÇÑ ¿ªÇÒÀ» ¼öÇàÇÏ´Â Controller ±¸Çö »ùÇÃÀÌ´Ù. ProductManager¸¦ »ç¿ëÇϰí Àִµ¥ ½Å±âÇϰԵµ setProductManager() ¸Þ½îµå¸¸ ÀÖÀ» »Ó, ÀνºÅϽº¸¦ ÃʱâÈÇϴ ȣÃâÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. ½ºÇÁ¸µÀÌ ºó ¼³Á¤À» Âü°íÇØ¼ ÀÚµ¿ÈÇϱ⠶§¹®ÀÌ´Ù. handleRequest()ÀÇ °á°ú·Î ModelAndView°¡ ¸®ÅÏµÇ¾î ³Ñ¾î°¡´Âµ¥, À̰ÍÀº ½ºÆ®·µÃ÷ÀÇ ActionForward¿Í ÄÁÅØ½ºÆ® Á¤º¸¸¦ ÇÕÄ£ °ÍÀ¸·Î ÀÌÇØÇÏ¸é µÇ°Ú´Ù.
public class SpringappController implements Controller {
protected final Log logger = LogFactory.getLog(getClass());
private ProductManager prodMan;
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String now = (new java.util.Date()).toString();
logger.info("returning hello view with " + now);
Map myModel = new HashMap();
myModel.put("now", now);
myModel.put("products", getProductManager().getProducts());
return new ModelAndView("hello", "model", myModel);
}
public void setProductManager(ProductManager pm) {
prodMan = pm;
}
public ProductManager getProductManager() {
return prodMan;
}
}
¿¹Á¦ 2. ½ºÇÁ¸µ°ú ½ºÆ®·µÃ÷, ÇÏÀ̹ö³×ÀÌÆ®¸¦ ÅëÇÕÇÑ ¿¹Á¦
±×·³ ½ºÇÁ¸µÀ» ±âÁ¸ÀÇ ½ºÆ®·µÃ÷ ȯ°æ°ú ¾î¶»°Ô ¿¬µ¿ÇÒ ¼ö ÀÖÀ»±î? ´ëÇ¥ÀûÀÎ ORMÀÎ ÇÏÀ̹ö³×ÀÌÆ®¿Í´Â ¾î¶»°Ô ¿¬µ¿ÇÒ ¼ö ÀÖÀ»±î? À̸¦ ¼Ò°³Çϱâ À§ÇØ °£´ÜÇÑ È¸¿ø °ü¸® »ùÇÃÀ» °³¹ßÇß´Ù. ÀÌ ¿¹Á¦´Â º§·Î½ÃƼ¿Í ½ºÆ®·µÃ÷, ½ºÇÁ¸µ, ÇÏÀ̹ö³×ÀÌÆ®¸¦ ÅëÇÕÇϰíÀÚ ÇÏ´Â VSSHÀÇ ÃÖÁ¾ÀûÀÎ ¸ð½ÀÀ» º¸¿©ÁÖ¸ç, DBMS´Â HSQLDB¸¦ »ç¿ëÇß´Ù.
¿¹Á¦ ÆÄÀÏ(vssh.zip)À» ´Ù¿î¹Þ¾Æ ÀÚ½ÅÀÇ ÀÛ¾÷ µð·ºÅ丮¿¡ ¾ÐÃàÀ» Ç®°í, was.properties ÆÄÀÏÀ» ¿¾î ÀÚ½ÅÀÇ ¿î¿µ ȯ°æ¿¡ ¸Â°Ô °æ·Î¸¦ ¼öÁ¤ÇÑ´Ù. ±×·± ´ÙÀ½, ant¸¦ ÀÌ¿ëÇØ¼ makeDist, war-deploy ŽºÅ©¸¦ ¼ø¼´ë·Î ½ÇÇàÇÏ¸é ºôµå ¹× ¹èÆ÷ °úÁ¤ÀÌ ³¡³´Ù. À¥ ºê¶ó¿ìÀú¸¦ ÀÌ¿ëÇØ¼ http://localhost:8080/vssh-b01¿¡ Á¢¼ÓÇÏ¸é ¾Æ·¡¿Í °°Àº °á°ú ȸéÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÌ ¿¹Á¦´Â ´ÙÀ½ °Á¿¡¼ ´Ù½Ã ÀÚ¼¼È÷ ¼³¸íÇÒ ¿¹Á¤Àε¥, ¹Ì¸® »ó¼¼ÇÑ ³»¿ëÀ» ¾Ë°í ½ÍÀº ºÐÀº LoveLazurÀÇ
ȨÆäÀÌÁö¸¦ Âü°íÇϱ⠹ٶõ´Ù. À̹ø ¿¹Á¦ºÎÅÍ´Â º¹ÀâÇϱ⠶§¹®¿¡ ÀÌŬ¸³½º¿Í °°Àº ¿ÀǼҽº IDE¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.
½ºÆ®·µÃ÷¿Í ½ºÇÁ¸µÀÇ ¿¬µ¿ ¹æ¹ýÀº °¢°¢À» ÀÌÇØÇϰí ÀÖ´Ù¸é ¾ÆÁÖ °£´ÜÈ÷ 󸮵ȴÙ. WEB-INF/lib µð·ºÅ丮¿¡ °¢°¢ÀÇ ¶óÀ̺귯¸® JAR ÆÄÀÏÀ» Ãß°¡ÇÑ ´ÙÀ½, ½ºÆ®·µÃ÷ ¼³Á¤ ÆÄÀÏÀÎ struts-config.xml¿¡ Ç÷¯±×ÀÎ ¼³Á¤¸¸ Çϳª Ãß°¡ÇÏ¸é µÇ´Â °ÍÀÌ´Ù. Ç÷¯±×ÀÎÀ¸·Î ¼³Á¤ÇÑ ContextLoader´Â Àü´ÞµÈ ¼³Á¤ ÆÄÀÏÀ» ÀÌ¿ëÇØ¼ Àüü ¾ÖÇø®ÄÉÀÌ¼Ç ±¸¼º¿¡ »ç¿ëµÉ ApplicationContext¸¦ ±¸¼ºÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÑ´Ù.
<struts-config>
<form-beans> ... </form-beans>
<action-mappings> ... </action-mappings>
<message-resources parameter="messages"/>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml"/>
</plug-in>
</struts-config>
applicationContext.xml¿¡´Â ¾ÖÇø®ÄÉÀÌ¼Ç ·ÎÁ÷°ú °ü·ÃµÈ °´Ã¼µéÀ» ¾Õ¼ ¼³¸íÇÑ ºó ¼³Á¤ ¹æ½ÄÀ¸·Î ¿¬µ¿Çؼ, Á¦¾î ¿ªÇàȰ¡ ÀÌ·ç¾îÁöµµ·Ï ÇÏ¸é µÈ´Ù.
<beans>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url"><value>jdbc:hsqldb:data/vsshdb</value></property>
<property name="username"><value>sa</value></property>
<property name="password"><value></value></property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<list><value>model/Customer.hbm.xml</value></list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
<!-- Transaction manager , can replace class Attribute ex.Transaction-->
<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="customerDAO" class="dao.CustomerDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</beans>
ÁÖÀÇÇÒ Á¡Àº ¸ðµç Ŭ·¡½º¿¡¼ »ç¿ëµÇ´Â °´Ã¼ ÂüÁ¶¿¡¼ Ç×»ó ÀÚ¹Ù ºó ±ÔÄ¢¿¡ µû¸£´Â setter()¸¦ ¸¸µé°í, Á÷Á¢ ÀνºÅϽº¸¦ ÃʱâÈÇÏÁö ¾Ê°í °´Ã¼µéÀÇ ÀÇÁ¸¼ºÀ» ¼³Á¤ ÆÄÀÏ¿¡ Àû¾îÁÜÀ¸·Î½á ½ºÇÁ¸µÀÌ ÀÚµ¿À¸·Î ÀÇÁ¸¼º °ü°è¸¦ »ðÀÔÇϵµ·Ï ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
´ÙÀ½ÀÇ CustomerActionÀ» »ìÆìº¸¸é ICustomerBizManager ŸÀÔÀÇ cmgrÀ̶ó´Â ÀνºÅϽº¸¦ °®°í Àִµ¥, setCustomermanager()¶õ ¸Þ½îµå¸¸ ÀÖÀ» »Ó ¾îµð¿¡µµ ÃʱâÈÇÏ´Â ·çƾÀÌ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. ±×·±µ¥µµ cmgr.createCustomer()¸¦ »ç¿ëÇϰí ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.
public class CustomerAction extends BaseAction {
private ICustomerBizManager cmgr = null;
public void setCustomerManager(ICustomerBizManager cmgr) { //def.
this.cmgr = cmgr;
}
public ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("custlist", cmgr.getCustomers());
return mapping.findForward("list");
}
public ActionForward create(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm custForm = (DynaActionForm) form;
cmgr.createCustomer((Customer) custForm.get("cust"));
ActionMessages messages = new ActionMessages();
messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"cust.saved"));
return list(mapping, form, request, response);
}
}
À̰ÍÀº action-servlet.xml°ú applicationContext.xml¿¡¼ ´ÙÀ½°ú °°Àº ¼³Á¤ÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î ±× Á¤º¸¿¡ µû¶ó ÀûÀýÇÑ customerManager°¡ °áÁ¤µÇ±â ¶§¹®¿¡ °¡´ÉÇØÁø´Ù.
<beans>
<bean name="/cust" class="control.CustomerAction" singleton="false">
<property name="customerManager">
<ref bean="customerBizManager"/>
</property>
</bean>
<bean id="customerBizManager"
class="org.springframework.transaction.interceptor.
TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="customerBizManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
´ë¾È ±â¼ú¿¡ ´ëÇØ °ü½ÉÀ» °®ÀÚ
Áö±Ý±îÁö ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©ÀÇ Çʿ伺À» ¼³¸íÇϰí, ±âº» °³³äÀ̶ó ÇÒ ¼ö ÀÖ´Â ¿¬°ü¼º »ðÀÔ ÆÐÅϰú AOP¿¡ ´ëÇØ °£´ÜÈ÷ »ìÆìº¸¾Ò´Ù. ¶ÇÇÑ ½ºÇÁ¸µÀÇ Æ¯Â¡°ú ½ºÇÁ¸µÀ» Ȱ¿ëÇÑ ¿¹Á¦¸¦ ¼Ò°³Çß´Ù. ½ºÇÁ¸µÀÌ ¾ÆÁ÷ ±¹³»¿¡ ¼Ò°³µÈ ÀûÀÌ ¾ø´Ùº¸´Ï ¿Ü±¹ÀÇ ¹®¼¿Í ¿¹Á¦, ¼ÀûµéÀ» µÚÀû°Å¸®¸é¼ °ü·Ã ÀڷḦ Á¤¸®Çϴµ¥ ÇÑ´ÞÀÌ ³Ñ´Â ½Ã°£ÀÌ ¼Ò¿äµÇ¾ú´Ù.
ÇÏÁö¸¸ ¾Æ½±°Ôµµ ±×µ¿¾È Á¤¸®ÇÑ ³»¿ëÀ» ¸ðµÎ ¼Ò°³Çϱ⿡´Â ÇÒ´çµÈ Áö¸éÀÌ ³Ê¹« ºÎÁ·ÇØ ²À ÇÊ¿äÇÑ ºÎºÐ¸¸À» ¾Ë·ÁÁִµ¥ ±×Ä£ µíÇÏ´Ù. ¼³¸íÀÌ ¹ÌÈíÇÑ ºÎºÐÀº ÇÊÀÚµéÀÇ VSSH Æ÷·³À» Ȱ¿ëÇϰí, ±Ã±ÝÇÑ Á¡ÀÌ ÀÖÀ¸¸é ¾ðÁ¦µç Áú¹®ÇØ Áֱ⠹ٶõ´Ù.
¼ÖÁ÷È÷ ¸»ÇØ ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â ÇÊÀÚµµ ¿©·¯ºÐº¸´Ù ¸î ´Þ ¸ÕÀú ½ºÇÁ¸µÀ» °øºÎÇÑ Á¤µµÀÇ ¼öÁعۿ¡ µÇÁö ¾Ê´Â´Ù. ¹Ì±¹, ÀϺ», Áß±¹, µ¶ÀÏ ¾îµð¼³ª ½ºÇÁ¸µ °ü·Ã ÀڷḦ ½±°Ô ±¸ÇÒ ¼ö ÀÖ¾úÁö¸¸, ¾ÈŸ±õ°Ôµµ ±¹³»¿¡´Â ÀüÇô ÀÚ·á°¡ ¾ø¾ú´Ù.
ÇØ¿Ü¿¡¼´Â Å©°Ô ÁÖ¸ñÀ» ¹Þ°í ÀÖ´Â ½ºÇÁ¸µ°ú IoC ÄÁÅ×À̳ʿ¡ ´ëÇÑ ³»¿ëµéÀÌ ¿Ö ±¹³»¿¡¼´Â ÀüÇô ´Ù·ç¾îÁöÁö ¾Ê°í ÀÖ´ÂÁö¸¦ °õ°õÀÌ »ý°¢Çغ»´Ù. ¿ì¸®³× °³¹ßÀÚµéÀº Ã˹ÚÇÑ °³¹ß ÀÏÁ¤¿¡ ÂÑ°Ü ½Å±â¼úÀ̳ª ´ë¾È ±â¼úµéÀ» °øºÎÇÒ ¸¸Å ´Ùµé ¿©À¯°¡ ¾ø´Â °ÍÀϱî? ¾Æ´Ï¸é ±×·¯ÇÑ ±â¼úÀ» ÀÌ¹Ì ÀÍÈ÷°í ÀÖ´Â °³¹ßÀÚµéÀÌ ÀÚ½ÅÀÇ ¸Ó¸® ¼Ó¿¡ ±× Áö½ÄÀ» ²À²À ¼û°ÜµÎ°í °ø°³ÇÏÁö ¾Ê´Â °ÍÀϱî?
Áö±Ý ÀÚ¹Ù Ä¿¹Â´ÏƼ´Â ÁÖ·ù ±â¼úÀÇ ¹öÀü Çâ»ó°ú ½Å±â¼úÀÇ ÃâÇö ±×¸®°í ¿ÀǼҽº ±â¹ÝÀÇ ´Ù¾çÇÑ ´ë¾È ±â¼úÀÇ µîÀåÀ¸·Î ¾î´À ¶§º¸´Ù ±Þ°ÝÇÑ ±â¼ú º¯È¸¦ ´«¾Õ¿¡ µÎ°í ÀÖ´Ù. ¾ÆÁ÷ ±×·¯ÇÑ º¯È¸¦ ´À³¢Áö ¸øÇϰí ÀÖ´Â °³¹ßÀÚ¶ó¸é Áö±ÝÀÌ ¹Ù·Î ±×·¯ÇÑ º¯È¿¡ ´ëÇÑ ´ëºñ¸¦ ½ÃÀÛÇØ¾ß ÇÒ ¶§ÀÓÀ» ±ú´Þ¾Æ¾ß ÇÑ´Ù. ¶ÇÇÑ, ±× °úÁ¤¿¡¼ ¾ò¾îÁø ³ëÇϿ츦 °øÀ¯ÇÔÀ¸·Î½á ´õ Å« ÀÌÀÍÀÌ Àڽſ¡°Ô µ¹¾Æ¿Â´Ù´Â »ç½Çµµ ÀØÁö ¸»±â ¹Ù¶õ´Ù. @
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù. ¢º
Àüü ¼Ò½º ´Ù¿î·Îµå