·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
[¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ] ¨é ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ© VSSH
¾àÇÑ °áÇÕµµ ¾ÆÅ°ÅØÃ³¸¦ À§ÇÑ ´ë¾È ±â¼ú, ½ºÇÁ¸µ
±è½Â±Ç, ÀÌÁ¾ÇÏ   2004/12/22
¿¬Àç¼ø¼­
1ȸ, ¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ, ±× Áñ°Å¿î µµÀüÀÇ ½ÃÀÛ
2ȸ, ù¹øÂ° µµÀü! ½ºÆ®·µÃ÷¿Í º§·Î½ÃƼÀÇ ÅëÇÕ
3ȸ, ¾àÇÑ °áÇÕµµ ¾ÆÅ°ÅØÃ³¸¦ À§ÇÑ ´ë¾È ±â¼ú, ½ºÇÁ¸µ
4ȸ, OR ¸ÊÇÎ µµ±¸ÀÇ ¼±µÎ ÁÖÀÚ, ÇÏÀ̹ö³×ÀÌÆ®
[Áöµð³ÝÄÚ¸®¾Æ]Áö³­ ±Û¿¡¼­´Â ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©¸¦ ÅëÇÕÇϱâ À§ÇÑ Ã¹ ¹øÂ° ½Ãµµ·Î º§·Î½ÃƼ¿Í ½ºÆ®·µÃ÷°¡ ¾î¶»°Ô ¿¬µ¿µÉ ¼ö ÀÖ´ÂÁö¸¦ »ìÆìº¸¾Ò´Ù. À̹ø ±Û¿¡¼­´Â 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ÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù. ¢º Àüü ¼Ò½º ´Ù¿î·Îµå
°ü·Ã±â»ç
ÀÚ¹ÙÀÇ »õ·Î¿î ³¯°³, ±×·çºñ
[ÇØÄ¿ ÃÖÈÄÀÇ ¾ð¾î, Ä¿¸Õ Lisp] ¨ç ¿Ö ÇØÄ¿ÀÇ ¾ð¾îÀϱî?
[¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ] ¨è º§·Î½ÃÆ¼Åø Ȱ¿ë
¿ÀǼҽº, Àü¹æÀ§ Àα⡸¸®´ª½º ³Ñ¾î¼±´Ù¡¹
BEA, À¥·ÎÁ÷ ¿öÅ©¼¥ÀÇ ¿ÀǼҽºÈ­¡¸Áß°£º¸°í¡¹
°¡º­¿î UML ¸ðµ¨¸µ Åø¡¸Umbrello¡¹
[¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ] ¨ç VSSH ÇÁ·¹ÀÓ¿öÅ©
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
[±â°í]±ÝÀ¶ ¼­ºñ½º ½ÃÀåÀ» À§ÇÑ ...
[ORM ¨è] JPA Ȱ¿ëÇϱâ
[ORM ¨ç] ÇÏÀ̹ö³×ÀÌÆ® Ȱ¿ëÀü...
[DDD ¨ë] BDD(Behavi...
À©µµ¿ìCE µð¹ÙÀ̽º µå¶óÀ̹ö¿¡ °ü...
[±â°í]°í°´ ´«³ôÀÌ¿¡ ¸ÂÃá °¡»óÈ­...
'±¤¼¶À¯ 3D ¿µ»ó', ³úÀÇÇп¡ »õ ÁöÆò ¿­´Ù [00:02:31]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
Ç÷¹À̽ºÅ×À̼Ç3(PS3) ´ë¿ë·® HDD ±³Ã¼ ½¬¿î ÆÁ [00:03:22]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
¡°À¥ Ç¥ÁØÀº ¹«½¼!¡±¡¦IE8¿¡ ´ë...
Á¶Áßµ¿, ´ÙÀ½¿¡ ´º½º°ø±Þ Áß´Ü¡¦"...
¡®³ªÈ¦·Î ¾×ƼºêX¡¯¡¦¼¼°è ÀÎÅͳݰú...
³×À̹ö´Â ¿Ö '10´ë ÇØÄ¿'¿¡ ´ç...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
°øÀÎÀÎÁõüÁ¦, ¿ì¸®¿¡°Ô ÀÓ¹ÚÇÑ ¹Ì...
Áö¾Öµå, ¿Á¿Ü±¤°í¿Í Ç×°ø»çÁø °áÇÕ...
[Àλç]Áö½Ä°æÁ¦ºÎ
ÆÄ¼ö´åÄÄ "DRMÀÌ º¸¾È»ê¾÷ À̲ö...
³×À̹ö ¼­ºñ½º ÀÚ¹®À§¿øÈ¸, º»°ÝÀû...
Çѱ¹¾ÆÀ̽ǷÐ, ¾¾µð³×Æ®¿÷½º¿¡ ´ë±Ô...
 
 
The Korean edition of 'ZDNet' is published under license from CNET Networks, Inc., San Francisco, CA, USA. Editorial items appearing in 'ZDNet Korea' that were originally published in the US Edition of 'ZDNet', 'CNET', and 'CNET News.com' are the copyright properties of CNET Networks, Inc. or its suppliers.
Copyright ¨Ï 2008 CNET Networks, Inc. All Rights Reserved. 'ZDNet', 'CNET' and 'CNET News.com' are trademarks of CNET Networks, Inc.