·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
°´Ã¼ÁöÇâÀ» ³Ñ¾î °üÁ¡ÁöÇâÀ¸·Î AOP

ÀÌÀϹΠ(DevelopGate ±â¼ú ÄÁ¼³ÅÏÆ®)   2006/05/01
[Áöµð³ÝÄÚ¸®¾Æ]Àü ¼¼°è ÀÚ¹Ù EE °³¹ß ÇÁ·ÎÁ§Æ®ÀÇ 80%°¡ ¿ø·¡ °èȹÇß´ø ¸ñÇ¥¸¦ ´Ù ÀÌ·çÁö ¸øÇÏ°í ½ÇÆÐ·Î ³¡³ª°í ¸¸´Ù´Â »ç½ÇÀº ÇÑÆíÀ¸·Î´Â Ãæ°ÝÀûÀÌÁö¸¸ ¾î¼¸é ´ç¿¬ÇÑ °á°ú¶ó°í ¹Þ¾Æµé¿©Áö°í ÀÖ´Ù. °³¹ßÀÚµéÀº Á» ´õ ´Ü¼øÇÑ ¹æ¹ýÀ» ã¾Æ¾ßÇÏ°í ±×¿¡ µû¶ó ´õ¿í È¿°úÀûÀ¸·Î ¸íÈ®ÇÑ °á°ú¸¦ ¾ò¾î³¾ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÇ ´Ü¼øÇÔÀÇ Çٽɿ¡ ¹Ù·Î °üÁ¡ÁöÇâ ÇÁ·Î±×·¡¹Ö, AOP°¡ Á¸ÀçÇÑ´Ù.

ÃÖ±Ù ¸î ³â °£ ÀÚ¹Ù °³¹ßÀÚµéÀÌ °æÇèÇϰí ÀÖ´Â »õ·Î¿î ±â¼úÀÇ È帧°ú ¹æÇâÀ» ÇѸ¶µð·Î ¸»Çغ¸Àڸ顮´Ü¼øÇÔ(simplicity)ÀÇ Ãß±¸¡¯¶ó°í ÇÒ ¼ö ÀÖ´Ù. ¾Æ¹«¸® Á¤±³Çϰí Àß ¼³°èµÈ ÇÁ·Î±×·¡¹Ö ±â¼ú°ú °³¹ß ¹æ¹ý·Ð, ºÐ¼®¼³°è ±â¼úÀ» »ç¿ëÇÑ´Ù°í ÇÏ´õ¶óµµ °³¹ßÀÚµéÀÌ ÀÌÇØÇÏ°í ±¸ÇöÇØ¾ß ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±¸Á¶¿Í ±¸Çö ³»¿ëÀº °¥¼ö·Ï º¹ÀâÇÏ°í ´ÙÂ÷¿øÀûÀÌ µÇ¾î°¡°í À̸¦ °¨´çÇϱâ À§Çؼ­ °³¹ßÀÚµéÀº Á¡Á¡ º¹ÀâÇÑ ¹Ì·Î ¼ÓÀ¸·Î ºüÁ®µé¾î °¥ ¼ö¹Û¿¡ ¾ø´Ù.

°üÁ¡ÁöÇâ ÇÁ·Î±×·¡¹Ö(Aspect Oriented Programming, ÀÌÇÏ AOP)À̶ó´Â ¸»À» óÀ½ µé¾îº¸¸é °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö(Object Oriented Programming, ÀÌÇÏ OOP)ÀÌ ¶°¿À¸¥´Ù. AOP´Â °á±¹ OOPÀÇ µÚ¸¦ ÀÕ´Â ¶Ç ÇϳªÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î ±¸Á¶¶ó°í »ý°¢µÉ ¼ö ÀÖ´Ù. Áö±Ý±îÁö ÇÁ·Î±×·¡¹Ö ±â¼úÀº ±â°è¾î¿Í °°Àº Ãʱ⠾ð¾î¸¦ ±â¹ÝÀ¸·Î ÇÑ ÇÁ·Î±×·¡¹ÖÀ¸·ÎºÎÅÍ Ãâ¹ßÇØ¼­ ÀýÂ÷Àû ÇÁ·Î±×·¡¹ÖÀ» °ÅÃÄ OOP¿¡ À̸£·¶´Ù. 20¿©³â ÀÌ»ó ÇöÀå¿¡¼­ÀÇ Àû¿ë°ú ³»ºÎÀûÀÎ °³³äÀÇ ¹ßÀü ±×¸®°í ÀÚ¹Ù³ª C# °°Àº ´ëÁßÀûÀÎ ¾ð¾îÀÇ µîÀå¿¡ ÈûÀÔ¾î ÀÌÁ¦´Â OOP°¡ Àüü ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÇ ´ëÇ¥ÀûÀÎ ÆÐ·¯´ÙÀÓÀ¸·Î ÀÚ¸® Àâ°í ÀÖ´Ù.

±×·³ ÀÌÁ¦ AOPÀÇ µîÀåÀ¸·Î OOP´Â »ç¶óÁ® °¥ °ÍÀ̰í, AOP°¡ OOP¸¦ ´ëüÇÏ°Ô µÉ °ÍÀ̶ó°í ÇÒ ¼ö ÀÖÀ»±î? °áÄÚ ±×·¸Áö ¾Ê´Ù. AOP¿Í °ü·ÃµÈ °¡Àå Áß¿äÇÑ °³³äÀº¡®AOP´Â °áÄÚ OOPÀÇ ÀÚ¸®¸¦ ´ë½ÅÇϱâ À§Çؼ­ µîÀåÇÑ ±â¼úÀÌ ¾Æ´Ï´Ù¡¯¶ó´Â °ÍÀÌ´Ù. ¿ÀÈ÷·Á AOP´Â OOP¸¦ ´õ¿í OOP´ä°Ô ¸¸µé¾îÁÙ ¼ö ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¸¹Àº AOP ±â¼úÀÇ ÁÖµµÀÚµé°ú °³¹ßÀÚµéÀº AOP°¡ OOP¸¦ »ç¶óÁö°Ô ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´õ¿í ¿ÏÀüÇÏ°Ô ¸¸µé¾î ÁÙ ¼ö ÀÖ´Ù°í ÁÖÀåÇÑ´Ù. ¶Ç AOP´Â OOP»Ó¸¸ ¾Æ´Ï¶ó ±âÁ¸ÀÇ ÀýÂ÷Àû ÇÁ·Î±×·¡¹Ö¿¡µµ Àû¿ëµÇ¾îÁú ¼öµµ ÀÖ´Ù. °á±¹ AOP´Â Áö±Ý±îÁöÀÇ ÇÁ·Î±×·¡¹Ö ±â¼ú º¯È­ÀÇ È帧¿¡ ´Ù¸¥ Â÷¿øÀÇ °üÁ¡À» Á¦½ÃÇÔÀ¸·Î½á »õ·Î¿î ÇÁ·Î±×·¡¹Ö ÆÐ·¯´ÙÀÓÀ» À̲ø¾î³»°í ÀÖ´Ù°í º¼ ¼ö ÀÖ´Ù.

AOPÀÇ Çʿ伺
AOPÀÇ Çʿ伺À» ÀÌÇØÇÏ´Â °¡Àå ±âÃʰ¡ µÇ´Â °³³äÀº¡®°ü½ÉÀÇ ºÐ¸®(Separation of Concerns)¡¯ÀÌ´Ù. °ü½ÉÀÇ ºÐ¸®´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀÇ °¡Àå ±âÃʰ¡ µÇ´Â ¿ø¸® Áß ÇϳªÀÌ´Ù. °ÅÀÇ ¸ðµç ÇÁ·Î±×·¡¹Ö ÆÐ·¯´ÙÀÓÀº ¹Ù·Î ÀÌ °ü½ÉÀÇ ºÐ¸® °úÁ¤À» ÅëÇØ ¹®Á¦ ¿µ¿ª(problem domain)À» µ¶¸³ÀûÀÎ ¸ðµâ·Î ºÐÇØÇÑ´Ù. ÀýÂ÷Àû ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ºÐ¸®µÈ °ü½ÉÀ» ÇÁ·Î½ÃÀú·Î ±¸¼ºÇϰí OOP¿¡¼­´Â À̸¦ Ŭ·¡½º·Î ÀÛ¼ºÇÑ´Ù. ¿©±â¼­ AOP´Â OOP¸¦ Àû¿ëÇÑ´Ù°í ÇÒÁö¶óµµ ÃæºÐÈ÷ ºÐ¸®ÇØ ³¾ ¼ö ¾ø´Â ºÎºÐÀÌ ÀÖ´Ù´Â ¹®Á¦ Á¦±â¿¡¼­ Ãâ¹ßÇÑ´Ù.

AOP¿¡¼­ ÁÖ¸ñÇϰí ÀÖ´Â ºÎºÐÀº OOP¿Í °°Àº ¸ðµâÈ­°¡ ¶Ù¾î³­ ¹æ¹ýÀ» »ç¿ëÇÏ´õ¶óµµ °áÄÚ ½±°Ô ºÐ¸®µÈ ¸ðµâ·Î ÀÛ¼ºÇϱâ Èûµç ¿ä±¸»çÇ×ÀÌ ½ÇÁ¦ ¾ÖÇø®ÄÉÀÌ¼Ç ¼³°è¿Í °³¹ß¿¡¼­ ÀÚÁÖ ¹ß°ßµÈ´Ù´Â Á¡ÀÌ´Ù. AOP¿¡¼­´Â À̸¦ Ⱦ´Ü °ü½É(crosscutting concerns)À̶ó°í ÇÑ´Ù. ÀÌ¿¡ ´ëºñÇØ¼­ ÇØ´ç ½Ã½ºÅÛÀÇ ÇÙ½É °¡Ä¡¿Í ¸ñÀûÀÌ ±×´ë·Î µå·¯³­ °ü½É ¿µ¿ªÀ» ÇÙ½É °ü½É(core concerns)À̶ó°í ºÎ¸¥´Ù. ÀÌ ÇÙ½É °ü½ÉÀº ±âÁ¸ÀÇ °´Ã¼ÁöÇ⠺м®/¼³°è(OOAD)¸¦ ÅëÇØ ½±°Ô ¸ðµâÈ­¿Í Ãß»óÈ­°¡ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ Ⱦ´Ü °ü½ÉÀº °´Ã¼ÁöÇâÀÇ ±âº» ¿øÄ¢À» ÁöŰ¸é¼­ À̸¦ ºÐ¸®Çؼ­ ¸ðµâÈ­ÇÏ´Â °ÍÀÌ ¸Å¿ì ¾î·Æ´Ù.

À̴ Ⱦ´Ü °ü½ÉÀÇ Æ¯Â¡À» ¸ðµâ·Î ±¸ÇöÇÏ´Â °ÍÀÌ ¾î·Æ±â ¶§¹®ÀÌ ¾Æ´Ï´Ù. ¹®Á¦´Â ±× ±¸ÇöµÈ ¸ðµâÀÌ ´Ù¸¥ ÇÙ½É °ü½ÉÀ» ±¸ÇöÇÑ ¸ðµâ°ú ¸Å¿ì ±ä¹ÐÇÏ°Ô °áÇյǾî Àֱ⠶§¹®ÀÌ´Ù. ½ÉÁö¾î´Â ¾î¶² ½Ã½ºÅÛ ¿µ¿ªÀÇ ¸ðµç ¸ðµâ°ú ¿¬µ¿µÇ¾î¾ß ÇÏ´Â °æ¿ì¸¶Àú ÀÖ´Ù. ±×·¡¼­ ±âÁ¸ÀÇ ÇÙ½É °ü½ÉÀ» ±¸ÇöÇÑ ¸ðµâ°ú ´Þ¸® Ⱦ´Ü °ü½ÉÀº ±× ±¸Çö ½ÃÁ¡¿¡¼­ ±× ºÐ¸®°¡ ½±Áö°¡ ¾Ê´Ù. ±âÁ¸ÀÇ OOP ¾ð¾î¿Í ±â¼ú·Î´Â »ÏÁ·ÇÑ ´äÀÌ ¾È ³ª¿À´Â °ÍÀÌ´Ù.

´ëºÎºÐÀÇ ¿£ÅÍÇÁ¶óÀÌÁî±Þ ¾ÖÇø®ÄÉÀ̼ÇÀº ·Î±×ÀÛ¼º(logging)°ú º¸¾È/ÀÎÁõ(security/authentication), Æ®·£Àè¼Ç(transaction), ¸®¼Ò½º Ç®¸µ(resource pooling), ¿¡·¯ °Ë»ç(error checking), Á¤Ã¥ Àû¿ë(policy enforcement), ¸ÖƼ¾²·¹µå ¾ÈÀü°ü¸®(multithread safety), µ¥ÀÌÅÍ ÆÛ½Ã½ºÅϽº(data persistence) µîÀÇ Àû¿ëÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ °ü½ÉµéÀº ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇÙ½É °ü½É°ú ´Ù¸¥ ÇüÅ·ΠÁ¸ÀçÇÑ´Ù.

¿¹¸¦ µé¾î ÀºÇà ¾÷¹«¸¦ ó¸®ÇÏ´Â ½Ã½ºÅÛÀ» »ý°¢Çغ¸¸é ÇÙ½É °ü½ÉÀº ¿¹±ÝÀÔÃâ±Ý, °èÁ°£ÀÌü, ÀÌÀÚ°è»ê, ´ëÃâó¸® µîÀ¸·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â Àüü ¾ÖÇø®ÄÉÀ̼ÇÀÇ Çٽɿ䱸»çÇ×°ú ±â´ÉµéÀ» ±¸ºÐÇØ¼­ ¸ðµâÈ­ÇÒ ¼ö ÀÖ°í OOP¿¡¼­¶ó¸é Ŭ·¡½º¿Í ÄÄÆ÷³ÍÆ® ÇüÅ·Π±¸¼ºÀÌ °¡´ÉÇÏ´Ù. °¢°¢ ¸ðµâÈ­µÈ Ŭ·¡½ºµéÀº Ãß»óÈ­ µîÀÇ ÀÛ¾÷À» ÅëÇØ ¼­·Î ´À½¼ÇÑ ¿¬°á »óÅÂ(loosely coupled)·Î ¸¸µé¾î¼­ ÀϺΠ¸ðµâÀ» Ÿ ½Ã½ºÅÛ¿¡¼­ ÀçȰ¿ëÇÒ ¼ö ÀÖ°í, ¶Ç ±¸ÇöÀÇ È®ÀåÀ̳ª ±³È¯µµ ½±°Ô °¡´ÉÇÏ´Ù. °´Ã¼ÁöÇâ ±â¼úÀÌ ¿ì¸®¿¡°Ô ÁØ ºñÀüÀÌ ¹Ù·Î ÀÌ·¯ÇÑ ÄÚµåÀÇ ¸ðµâÈ­¿Í Ãß»óÈ­¸¦ ÅëÇØ °£°áÇÏ°í ±ò²ûÇÑ ÄÚµå ÀÛ¼ºÀÌ °¡´ÉÇϰí ÀçȰ¿ë¼ºÀ» ¶Ù¾î³ª°Ô ÇØÁÖ´Â °ÍÀÌ´Ù.

<±×¸² 1> ÇÁ·Î±×·¡¹Ö ÆÐ·¯´ÙÀÓÀÇ º¯È­

ÇÏÁö¸¸ Çö½ÇÀº ±×·¸Áö ¸øÇÏ´Ù. ½ÇÁ¦·Î °³¹ßµÇ¾î µ¹¾Æ°¡´Â ÀºÇà ¾÷¹«ÀÇ °¢ ¸ðµâ¿¡´Â »ç½Ç ÇØ´ç ¾÷¹«¸¦ ó¸®Çϱâ À§ÇÑ ³»¿ë¸¸ Á¸ÀçÇØ¼­´Â ºÒ¿ÏÀüÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ÀÏ´Ü °¢ ¾÷¹«¸¦ ó¸®Çϴ Ŭ·¡½º¿Í ±¸ÇöµÈ ¸Þ½îµå¿¡´Â ÇâÈÄ ½Ã½ºÅÛÀ» ºÐ¼®Çϰųª ÃßÀûÀ» À§ÇØ ·Î±×¸¦ ÀÛ¼ºÇÏ´Â ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù. ¶Ç ÀÎÁõ ¹ÞÀº »ç¿ëÀÚ°¡ Á¢±ÙÇÏ´ÂÁö¸¦ üũÇÏ°í ±ÇÇÑ ¿©ºÎ¸¦ µûÁö´Â º¸¾È ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù. °Å±â´Ù ³»ºÎ¿¡¼­ »ç¿ëÇÏ´Â ÆÛ½Ã½ºÅϽº 󸮸¦ À§ÇØ Æ®·£Àè¼ÇÀ» ½ÃÀÛÇϰí, ¶Ç Çʿ信 µû¶ó¼­ ±×°ÍÀ» Ä¿¹Ô ¶Ç´Â ·Ñ¹éÇÏ´Â ºÎºÐµµ µé¾î°¡¾ß ÇÑ´Ù. ¿¹¿Ü »óȲÀ̳ª ¹®Á¦°¡ ¹ß»ýÇßÀ» ¶§´Â ±×°ÍÀ» ±â·Ï¿¡ ³²±â´Â ºÎºÐµµ ÀÖ¾î¾ß Çϰí, ÇÊ¿äÇÏ¸é °ü¸®ÀÚ¿¡°Ô À̸ÞÀÏÀ» ¹ß¼ÛÇØ¾ß ÇÑ´Ù. ¾î¶² °æ¿ì´Â ƯÁ¤ ¾÷¹«¸¦ »ç¿ëÇÏ´Â »ç¿ëÀÚÀÇ ÆÐÅÏÀ» ºÐ¼®Çϱâ À§ÇØ Åë°è󸮸¦ À§ÇÑ ±â´Éµµ Æ÷ÇÔ µÅ¾ß ÇÑ´Ù.

ÀÌ·¯ÇÑ ºÎ°¡ÀûÀÎ ±â´ÉµéÀº °¢°¢ ±¸ÇöÀ» µ¶¸³ÀûÀΠŬ·¡½º·Î ÀÛ¼ºµÉ¼ö ÀÖÁö¸¸ ±×·¸°Ô ±¸ÇöµÈ ±â´ÉµéÀ» È£ÃâÇÏ°í »ç¿ëÇÏ´Â ÄÚµåµéÀÌ ÇÙ½É ¸ðµâ ¾È¿¡ ÇÊ¿äÇÑ ¿µ¿ª¿¡ ¸ðµÎ Æ÷Ç﵃ ¼ö¹Û¿¡ ¾ø´Ù. AOP¸¦ Àû¿ëÇÏÁö¾ÊÀº OOP¿¡ ÀÇÇØ¼­¸¸ ÀÛ¼ºµÈ °£´ÜÇÑ °èÁÂÀÌü 󸮸¦ À§ÇÑ Å¬·¡½ºÀÇ ±¸¼ºÀ» »ìÆìº¸ÀÚ.

·Î±ë, ÀÎÁõ, ±ÇÇÑüũ, DB ¿¬µ¿, Æ®·£Àè¼Ç, ¶ôÅ·, ¿¡·¯Ã³¸® µîÀÇ ±â´ÉÀ» ¾Æ¹«¸® ¶Ù¾î³­ OOP ±â¼úÀ» ÀÌ¿ëÇØ ¸ðµâ·Î ±¸¼ºÇϰí Ãß»óÈ­¸¦ ÅëÇØ ÃÖ´ëÇÑ µ¶¸³½ÃŲ´Ù°í ÇØµµ <¸®½ºÆ® 1>¿¡¼­ º¸µíÀÌ ÇÙ½É ¸ðµâÀÇ ¸ðµç Ŭ·¡½º¿Í ¸Þ½îµå ¼Ó¿¡ ÀÌ¿Í ¿¬µ¿µÇ´Â ºÎºÐÀÌ ¸Å¿ì ±íÀÌ ±×¸®°í »ó´çÇÑ ¾çÀ» °®À¸¸é¼­ ÀÚ¸® Àâ°í ÀÖ´Ù. ½ÇÀü¿¡¼­ »ç¿ëµÇ´Â ÇÙ½É ¸ðµâ Ŭ·¡½ºµéÀº À̺¸´Ù ´õ º¹ÀâÇÏ¸é º¹ÀâÇßÁö ´õ ´Ü¼øÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ Äڵ忡¼­ Çٽɱâ´ÉÀ» ´ã´çÇϰí ÀÌ Å¬·¡½º°¡ ¼³°èµÈ ¹ÙÅÁÀÇ ÇÙ½É °ü½ÉÀ» ±¸ÇöÇÏ´Â ÄÚµå´Â ´Ü ´Ù¼¸ÁÙ¿¡ ºÒ°úÇÏ´Ù. ÇÏÁö¸¸ ±× ¿ÜÀÇ ºÎ°¡ÀûÀÎ Äڵ带 Æ÷ÇÔÇÏÁö ¾ÊÀ¸¸é ¿£ÅÍÇÁ¶óÀÌÁî±Þ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î´Â ¾µ¸ð¾øÀ» ¼ö¹Û¿¡ ¾ø´Ù.

<±×¸² 2> Ⱦ´Ü °ü½É

ÀÌ·¯ÇÑ È¾´Ü °ü½ÉÀ» ±¸ÇöÇÏ°í ¶Ç ±× ¸ðµâ°ú ¿¬µ¿ÀÌ µÇ´Â ÄÚµåµéÀÌ °ÅÀÇ ¸ðµç ÇÙ½É ¸ðµâ¿¡ ´Ù¾çÇÑ ÇüÅ·ΠÁ¸ÀçÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ½ÇÁ¦·Î ¸ðµâÈ­°¡ Àß µÈ ¾ÖÇø®ÄÉÀÌ¼Ç Å¬·¡½º¸¦ º¸´õ¶óµµ Çٽɱâ´ÉÀ» À§ÇÑ Äڵ庸´Ù ÀÌ·± Àú·± ºÎ°¡ÀûÀÎ ±â´É°ú 󸮸¦ À§ÇÑ ºÎºÐÀÇ ¾çÀÌ ´õ ¸¹¾ÆÁö±×·±µ¥ ¸¸¾à ÀÌ·¸°Ô °³¹ßµÈ Ŭ·¡½º°¡ ÇÑ ¼öõ °³°¡ µÇ°í ´ëºÎºÐÀÌ ¾ÕÀÇ ÄÚµå¿Í °¥ÀÌ ÀÛ¼ºµÆ´Ù°í ÇßÀ» ¶§ ¾î´À ³¯ »õ·Î¿î ÀºÇà Ä·ÆäÀÎÀÌ ½ÃÀ۵Ǿ °¢ ¸Þ½îµå¿¡¼­ »ç¿ëµÇ´Â °èÁÂÁ¤º¸¿¡¼­ ³»¿ëÀ» »Ì¾Æ³»¾î Åë°è󸮸¦ Çϵµ·Ï »õ·Î¿î ¿ä±¸»çÇ×ÀÌ »ý°å´Ù¸é ¾î¶»°Ô ÇØ¾ß Çϰڴ°¡?

±×¿Í °ü·ÃµÈ ¸ðµç Ŭ·¡½ºµéÀ» ã¾Æ <¸®½ºÆ® 1>°ú °°Àº ÄÚµå Æ² ¾È¿¡ ¶Ç »õ·Î¿î Åë°è󸮿ë Äڵ带 »ðÀÔÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù. ¶Ç ¸¸¾à ´Ù¸¥ Á¾·ùÀÇ ·Î±ëÇ÷§ÆûÀ» »ç¿ëÇØ ·Î±×ó¸®Çϴ Ŭ·¡½º¿Í ¸Þ½îµå°¡ ´Þ¶óÁö°í ·Î±× ¸Þ½ÃÁö°¡ º¯°æÀÌ µÇ¾ú´Ù¸é? ¶Ç °³¹ßÀÚµéÀº ¸ðµç Ŭ·¡½º ¾È¿¡ ÀÖ´Â ·Î±×°ü·Ã Äڵ带 ÀÏÀÏÀÌ ´Ù ¼öÁ¤ÇØ ÁÖ´Â ¼ö¹Û¿¡ ¾ø´Ù. ±×·¯´Ù°¡ ¸¸¾à Áß¿äÇÑ Å¬·¡½º¿¡¼­ ÇѵΠ±ºµ¥ ·Î±×±â·Ï Äڵ尡 ºüÁ³°í ÀÌ·Î ÀÎÇØ °á°ú¸¦ È®ÀÎÇϴµ¥ ¹®Á¦°¡ »ý°å´Ù¸é? À̸¦ ´Ù½Ã È®ÀÎÇϰí ã¾Æ³»´Â Àϸ¸ ÇØµµ ¾öû³­ ÀÛ¾÷ÀÌ ¾Æ´Ò ¼ö ¾øÀ» °ÍÀÌ´Ù.´Â °ÍÀÌ Çö½ÇÀÌ´Ù.

´õ ³ª¾Æ°¡¼­ ÀÌ·¸°Ô OOAD¿Í OOP¸¦ ÀÌ¿ëÇØ °³¹ßÇÑ ½Ã½ºÅÛÀÇ ÀϺΠ¸ðµâÀ» Ÿ ÀºÇà¿¡¼­ ÀçȰ¿ëÇÏ°í ½Í´Ù°í »ý°¢Çغ¸ÀÚ. °ú¿¬ À̰ÍÀÌ °¡´ÉÇѰ¡? ¾Æ¸¶ ¸Å¿ì ¾î·Á¿ï °ÍÀÌ´Ù. °´Ã¼ÁöÇâ ±â¼úÀÌ ÄÚµåÀÇ ÀçȰ¿ë¼ºÀ» ³ô¿©ÁÙ ¼ö ÀÖ´Ù´Â °ÍÀº ÀÌ·ÐÀûÀ¸·Î´Â ¸Â´Â ÀÏÀÌÁö¸¸ Çö½ÇÀûÀ¸·Î´Â º¹ÀâÇÏ°Ô ¼¯¿©Àִ Ⱦ´Ü °ü½É ÄÚµå·Î ÀÎÇØ ÀÌ ºÎºÐÀ» ´Ù ¼öÁ¤ÇϱâÀü¿¡´Â ´Ù¸¥ ȯ°æ¿¡¼­ °°Àº Çٽɱâ´ÉÀ» ó¸®ÇÏ´Â Äڵ带 »ç¿ëÇÑ´Ù´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. AOP°¡ Àû¿ëµÇÁö ¾ÊÀº ¹æ½ÄÀÇ ÇÁ·Î±×·¥ Äڵ忡¼­ º¸¸é ÇÙ½É °ü½É ¸ðµâ¿¡¼­ Ⱦ´Ü °ü½É ¸ðµâÀ» ã°í »ç¿ëÇÏ´Â ±¸Á¶·Î ÀÛ¼ºµÇ¾îÀÖ´Ù. ÀÌ·¸°Ô ÀÛ¼ºµÈ ¾ÖÇø®ÄÉÀ̼ÇÀº ¸î °¡Áö ½É°¢ÇÑ ¹®Á¦¸¦ °¡Áö°í ÀÖ´Ù.

 <¸®½ºÆ® 1> AOP¸¦ Àû¿ëÇÏÁö ¾ÊÀº °£´ÜÇÑ °èÁÂÀÌü ó¸® Ŭ·¡½º

¡ß Áߺ¹µÇ´Â ÄÚµå : º¹»ç&ºÙÀ̱⿡ ÀÇÇØ ¸¸µé¾îÁø ¿©·¯ ¸ðµâ¿¡¼­ Áߺ¹µÇ´Â ÄÚµåÀÇ ¹®Á¦Á¡Àº ÀÌ¹Ì Àß ¾Ë·ÁÁ® ÀÖ´Ù. ÇÏÁö¸¸ AOP¸¦ »ç¿ëÇÏÁö ¾ÊÀº ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â ¾î¶°ÇÑ Ãß»óÈ­¿Í ¸®ÆÑÅ丵À» ÅëÇØ¼­µµ ¹Ýº¹µÇ´Â Äڵ带 ÇÇÇϱⰡ ¾î·Æ´Ù.

¡ß ÁöÀúºÐÇÑ ÄÚµå : Ⱦ´Ü °ü½É°ú °ü·ÃµÈ ÄÚµåµéÀÌ Çٽɱâ´É ÄÚµå »çÀÌ»çÀÌ¿¡ ³¢¾îµé¾î°¡ Àֱ⠶§¹®¿¡ Äڵ尡 ÁöÀúºÐÇØÁö°í ÀÌ¿¡ µû¶ó °¡µ¶¼ºÀÌ ¶³¾îÁö¸ç °³¹ßÀÚµéÀÇ ½Ç¼ö³ª ¹ö±×¸¦ À¯¹ßÇϰí ÈÄ¿¡ Äڵ带 À¯Áöº¸¼öÇϴµ¥ Å« ¾î·Á¿òÀ» ÁØ´Ù.

¡ß »ý»ê¼ºÀÇ ÀúÇÏ : ¹®Á¦¿µ¿ª¿¡ ´ëÇÑ Áö½Ä°ú ºÐ¼®À» Åä´ë·Î À̸¦ ±¸ÇöÇØ¾ß Çϴµ¥ Ãæ½ÇÇØ¾ß ÇÏ´Â ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀÌ ÀÚÁÖ µîÀåÇϴ Ⱦ´Ü °ü½ÉÀ» ±¸ÇöÇÑ Äڵ带 ÇÔ²² ÀÛ¼ºÇØ¾ß Çϱ⠶§¹®¿¡ °³¹ßÀÇ ÁýÁß·ÂÀ» ¶³¾î¶ß¸®°í °á°úÀûÀ¸·Î Àüü »ý»ê¼ºÀÇ ÀúÇϸ¦ °¡Á®¿Â´Ù. ¶Ç ¸ðµâº°·Î °³¹ßÀÚµéÀ» ±¸ºÐÇÏ°í ºÐ»ê½ÃŰ´Â °ÍÀÌ ÇѰ踦 °¡Áú ¼ö¹Û¿¡ ¾ø´Ù.

¡ß ÀçȰ¿ë¼ºÀÇ ÀúÇÏ : ÀÌ¹Ì ¾ð±ÞÇßµíÀÌ OOPÀÇ ÀåÁ¡ÀÎ ÀçȰ¿ë¼ºÀÌ ¸Å¿ì ¶³¾îÁø´Ù.

¡ß º¯È­ÀÇ ¾î·Á¿ò : Çѹø ÀÛ¼ºµÈ ½Ã½ºÅÛÀº »õ·Î¿î ¿ä±¸»çÇ×ÀÌ »ý°åÀ» °æ¿ì¿¡ ÀüüÀûÀ¸·Î ¸¹Àº ºÎºÐ¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °æ¿ì ½±°Ô »õ·Î¿î ¿ä±¸»çÇ×À» Àû¿ëÇϱâ Èûµé°Ô µÈ´Ù. ¶Ç »õ·Î¿î °ü½É¿µ¿ªÀÇ µîÀåÀ̳ª ÀÌÀÇ Àû¿ëÀ» ¸Å¿ì ¾î·Æ°Ô ÇÑ´Ù. ÁÁÀº ÅøÀÇ µµ¿ò ¾øÀÌ´Â ¸®ÆÑÅ丵À» ÇÏ´Â °Íµµ ¾î·Æ°Ô µÈ´Ù.

ÀÌ·¯ÇÑ ¹®Á¦Á¡À» AOP¸¦ Àû¿ëÇÏ¸é ¾î¶»°Ô µÉ °ÍÀÎÁö <¸®½ºÆ® 1>ÀÇ Å¬·¡½º¸¦ ¸¸¾à AOP¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ¿¡¼­ ÀÛ¼ºÀ» ÇßÀ» ¶§ÀÇ ÄÚµå·Î »ìÆìº¸ÀÚ.

public class AccountTransfer extends AbstractAccountModule {
 public void transafer(Accouno fromAcc, Account toAcc, int amount) {
  if (fromAcc.hasEnoughMoney(amount) == false) {
   throw new AccountException(¡°not enough money¡±);
  }
  fromAcc.withdraw(amount);
  toAcc.credit(amount);
 }
¡¦
}

³î¶ø°Ôµµ AOP¸¦ Àû¿ëÇÏÁö ¾Ê¾ÒÀ» ¶§ÀÇ Äڵ忡 ºñÇØ ¸Å¿ì ½ÉÇÃÇÑ ±¸Á¶·Î ¹Ù²î¾ú´Ù. °èÁÂÀÌü ¸ðµâÀ» °´Ã¼ÁöÇâÀûÀ¸·Î ¼³°èÇßÀ» ¶§ ±× ¼³°è¿¡ ³ª¿À´Â Çٽɱâ´É Äڵ常 Á¸ÀçÇÏ°Ô µÈ °ÍÀÌ´Ù. ±×·³ ÀÌ·¸°Ô ÀÛ¼ºµÈ Äڵ尡 ¾Õ¿¡¼­ ÀÛ¼ºµÈ ÄÚµå¿Í ¶È°°Àº ±â´É°ú ¹æ½ÄÀ¸·Î µ¿ÀÛÇÒ¼ö ÀÖ´Â °ÍÀΰ¡? ±×·¸´Ù. »õ·Î¿î Ä·ÆäÀÎÀ» À§ÇÑ Åë°èÄڵ峪 ·Î±ë¸ðµâÀÌ ¹Ù²î´Â ÀÏÀÌ ÀϾµµ ÀÌ ÇÙ½É °ü½É ÄÚµå´Â °áÄÚ º¯ÇÏÁö ¾Ê´Â´Ù. ¹®Á¦¿µ¿ª ÀÚü°¡ ¹Ù²îÁö ¾Ê´Â ÇÑ ÀÌ ÄÚµå´Â ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à °°Àº ¿ä±¸Á¶°Ç°ú ±â´ÉÀ» °¡Áø ´Ù¸¥ ÀºÇàÀÌ ÀÌ Äڵ带 °¡Á®´Ù ¾²°í ½Í´õ¶óµµ °ÅÀÇ Äڵ忡 ¼ÕÀ» ´ëÁö ¾Ê°í Àç»ç¿ëÀÌ °¡´ÉÇÏ´Ù. ¹°·Ð ·Î±×, º¸¾È, ÀÎÁõ, ÆÛ½Ã½ºÅϽº µîÀÇ Ã³¸® ¹æ¹ý°ú ȯ°æÀÌ ¿ÏÀüÈ÷ ´Þ¶óÁø´Ù°í ÇØµµ »ó°ü¾ø´Ù.

<±×¸² 3> À§ºù

±×·¸´Ù¸é ±× ¸¹Àº ·Î±× ó¸®¿Í º¸¾È, Æ®·£Àè¼Ç °ü¸®, ¿¹¿Ü»óȲ 󸮵îÀÇ ÄÚµå´Â ¾îµð·Î °£ °ÍÀΰ¡? ±× ºÎºÐÀº µ¶¸³µÈ ÇüÅÂÀÇ ´ÜÀÏ ¸ðµâ·Î °¢°¢ ÀÛ¼ºÀÌ µÇ°í AOP¸¦ ÅëÇØ¼­ ÇÊ¿äÇÑ ½ÃÁ¡¿¡¼­ ÇÙ½É Äڵ忡 »ðÀԵǾîÁ® µ¿ÀÛÇÏ°Ô µÈ´Ù.

AOPÀÇ µ¿ÀÛ¿ø¸®
AOP°¡ ÇÙ½É °ü½É ¸ðµâÀÇ Äڵ带 Á÷Á¢ °Çµå¸®Áö ¾Ê°í ÇÊ¿äÇÑ ±â´ÉÀÌ ÀÛµ¿Çϵµ·Ï ÇÏ´Â µ¥´Â À§ºù(weaving) ¶Ç´Â Å©·Î½ºÄÆÆÃ(crosscutting)À̶ó°í ºÒ¸®´Â Ư¼öÇÑ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù. ÇÙ½É °ü½É ¸ðµâÀÌ ÀÚ½ÅÀÌ ÇÊ¿äÇÑ È¾´Ü °ü½É ¸ðµâÀ» ã¾Æ »ç¿ëÇÏ´Â ´ë½Å¿¡ AOP¿¡¼­´Â À§ºù ÀÛ¾÷À» ÅëÇØ ÇÙ½É °ü½É ¸ðµâÀÇ »çÀÌ»çÀÌ¿¡ ÇÊ¿äÇÑ È¾´Ü °ü½É Äڵ尡 µ¿ÀÛ Çϵµ·Ï ¿«¾îÁö°Ô ¸¸µç´Ù. À̸¦ ÅëÇØ AOP´Â ±âÁ¸ÀÇ OOP·Î ÀÛ¼ºµÈ ÄÚµåµéÀ» ¼öÁ¤ÇÏÁö ¾Ê°íµµ ÇÊ¿äÇÑ È¾´Ü °ü½É ±â´ÉÀ» È¿°úÀûÀ¸·Î Àû¿ëÇØ ³¾ ¼ö ÀÖ´Ù.

ÀÌ·± ÀÛ¾÷Àº ±âÁ¸ÀÇ ÀÚ¹Ù ¾ð¾î¿Í ÄÄÆÄÀÏ·¯¿¡¼­´Â ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾Æ´Ï´Ù. ÇöÀçÀÇ AOP ¾ð¾î¿Í ÅøÀÌ °³¹ßµÇ±â Àü¿¡´Â Å©°Ô µÎ °¡Áö ¹æ¹ýÀ¸·Î AOP¿Í ºñ½ÁÇÑ ±â´ÉÀ» ±¸ÇöÇØº¸·Á´Â ½Ãµµ°¡ ÀÖ¾ú´Ù. ù°´Â EJB¿Í °°Àº ÄÁÅ×ÀÌ³Ê ¶Ç´Â ¼­¹ö¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀÌ´Ù. EJB´Â Æ®·£Àè¼Ç°ú º¸¾È, ¿ÀºêÁ§Æ® Ç®¸µ°ú °°Àº Ⱦ´Ü °ü½É ±â´ÉÀ» ÄÁÅ×À̳ʸ¦ ÅëÇØ ±× À§¿¡¼­ µ¿ÀÛÇÏ´Â EJB ¸ðµâ¿¡ Àû¿ëÇϰí ÀÖ´Ù. ÀÏÁ¾ÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ¼­ºñ½º ±â´ÉÀÎ EJBÀÇ ÀÌ·¯ÇÑ Ã³¸® ¹æ½ÄÀº EJB°¡ ¿£ÅÍÇÁ¶óÀÌÁî±Þ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß°ú ¿î¿µ¿¡ Àû±ØÀûÀ¸·Î ¼ö¿ëµÇ´Â ¸¸Å­ Áß¿äÇÑ ÀÌÀ¯ ÁßÀÇ ÇϳªÀÌ´Ù. ÇÏÁö¸¸ EJB´Â Á¦°øÇÒ ¼ö ÀÖ´Â ¼­ºñ½º°¡ ¸Å¿ì Á¦ÇÑÀûÀ̰í ÀÓÀÇÀÇ ¼­ºñ½º Ãß°¡ µîÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡ º»°ÝÀûÀÎ AOP ¹æ¹ýÀ¸·Î »ç¿ëµÇ±â´Â ¾î·Æ´Ù. ´õ±º´Ù³ª ÄÁÅ×ÀÌ³Ê À§¿¡¼­¸¸ Ưº°ÇÑ ½ºÆå¿¡ µû¶ó ÀÛ¼ºµÈ ÄÚµå¿Í¸¸ ¿¬µ¿Çؼ­ µ¿ÀÛÇϱ⠶§¹®¿¡ POJO(Plain Old Java Objects) ±â¹ÝÀÇ ÀÏ¹Ý ¾ÖÇø®ÄÉÀ̼ǿ¡´Â Àû¿ëÇϱⰡ ºÒ°¡´ÉÇÏ´Ù.

µÎ ¹øÂ° ½ÃµµµÈ ¹æ¹ýÀº JDK 1.3ºÎÅÍ Áö¿øµÇ±â ½ÃÀÛÇÑ ´ÙÀ̳»¹Í ÇÁ·Ï½Ã(Dynamic Proxy)¸¦ ÀÌ¿ëÇÑ ÀÎÅͼÁÅÍ Ã¼ÀÎ(interceptor chain)±â¼úÀÌ´Ù. JBoss¸¦ ºñ·ÔÇÑ ÄÁÅ×ÀÌ³Ê °³¹ßÀÚµéÀ» ÅëÇØ ¸¹ÀÌ »ç¿ëµÈ ¹æ½ÄÀÌ´Ù. ÇÏÁö¸¸ ´ÙÀ̳»¹Í ÇÁ·Ï½Ã¸¦ ÀÌ¿ëÇÑ ÄÚµå´Â ±¸ÇöÀÌ ¸Å¿ì º¹ÀâÇÏ°í Æ¯Á¤ ±¸Á¶ÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç Æ²À» µû¶ó ÀÛ¼ºµÇ¾î¾ß¸¸ Àû¿ë °¡´ÉÇϸç, ¿ª½Ã º¹ÀâÇÑ ÇÁ·¹ÀÓ¿öÅ© ³»Áö´Â ÄÁÅ×À̳ÊÀÇ µµ¿òÀÌ ÇÊ¿äÇÏ´Ù´Â ¸é¿¡¼­ ½±°Ô ÀϹÝÈ­µÇÁö´Â ¸øÇß´Ù.

º»°ÝÀûÀÎ AOP ±â¼úÀÌ µîÀåÇÑ °ÍÀº 1990³â´ë ÈÄ¹Ý Á¦·Ï½º PARC ¿¬±¸¼Ò¿¡¼­ ±×·¹°Å űÁ¦ÀÏ(Gregor Kiczales)¿¡ ÀÇÇØ AspectJ°¡ °³¹ßµÇ¸é¼­¶ó°í º¼ ¼ö ÀÖ´Ù. ±×´Â Asepct¶ó´Â ¿ë¾î¿Í ÇÔ²² AOP¶ó´Â Ç¥ÇöÀ» óÀ½ »ç¿ëÇϱ⠽ÃÀÛÇß°í, ÀÚ¹Ù VM°ú ȣȯµÇ´Â ÃÖÃÊÀÇ AOP ÅøÀÎ AspectJ¸¦ ±¸ÇöÇØ ³Â´Ù. AspectJ´Â ÀÚ¹ÙÀÇ ¾ð¾î¸¦ È®ÀåÇÑ ÇüÅÂÀÇ ±¸Á¶·Î °³¹ßµÆ´Âµ¥ ÀÚ¹ÙÀÇ Å¬·¡½º¿Í À¯»çÇÑ °³³äÀÎ AOPÀÇ ¾Ö½ºÆÑÆ®(Aspect)¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ÅëÇØ AOPÀÇ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø ¾Ö½ºÆÑÆ®´Â AspectJÀÇ Æ¯º°ÇÑ ÄÄÆÄÀÏ·¯¸¦ ÅëÇØ ÀÚ¹Ù VM¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Â ÄÚµå·Î ¸¸µé¾îÁø´Ù. ¹Ù·Î À̶§ AOPÀÇ À§ºù ÀÛ¾÷ÀÌ ÀϾ´Ù. À§ºù ÀÛ¾÷À» ÅëÇØ ÇÙ½É °ü½É ¸ðµâÀÇ »çÀÌ»çÀÌ¿¡ ¾Ö½ºÆÑÆ® ÇüÅ·Π¸¸µé¾îÁø Ⱦ´Ü °ü½É ÄÚµåµéÀÌ »ðÀÔµÇ¾î ¾Ö½ºÆÑÆ®°¡ Àû¿ëµÈ(woven) ÃÖÁ¾ ¹ÙÀ̳ʸ®°¡ ¸¸µé¾îÁö´Â °ÍÀÌ´Ù.

AOP¸¦ ÀÌ¿ëÇÏ¸é °³¹ßÀÚµéÀº Ⱦ´Ü °ü½É ¸ðµâÀ» °¢°¢ µ¶¸³µÈ ¸ðµâ·Î Áߺ¹ ¾øÀÌ ÀÛ¼ºÇϰí À̸¦ À§ºùÀ» ÅëÇØ ÇÙ½É °ü½É ¸ðµâ°ú °áÇÕ½Ã۱⠶§¹®¿¡ ¼­·Î µ¶¸³¼ºÀ» °¡Áø ´Ù Â÷¿øÀÇ ¸ðµâÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¾Õ¿¡¼­ ÀÛ¼ºÇÑ AccountTransfer Ŭ·¡½º¿¡ Àû¿ëÇÒ ¸Þ½îµå ó¸®ÀÇ ½ÃÀÛ°ú ³¡À» ±â·ÏÇÏ´Â ·Î±× ÀÛ¼º¿ë ¾Ö½ºÆÑÆ®ÀÇ Äڵ带 »ìÆìº¸ÀÚ.

public aspect MethodLoggingAspect {
 Logger logger = MyLog.getLogger(¡°methodcall¡±);
 pointcut methodcall() : execution (void AccountTransfer.transfer(..)) &&
  !within(MethodLoggingAspect);
 before() : methodcall() {
  logger.begin(thisJoinPointStaticPart.getSignature().getName());
 }
 after() : methodcall() {
  logger.end(thisJoinPointStaticPart.getSignature().getName());
 }
}

±âÁ¸ÀÇ ÀÚ¹Ù ¾ð¾îÀÇ ¹®¹ýÀ» È®ÀåÇÑ ±¸Á¶¸¦ °¡Áö´Â AspectJ¿¡¼­´Â Ⱦ´Ü °ü½É ¸ðµâÀ» aspect¶ó´Â Ű¿öµå¸¦ °¡Áö´Â ÄÚµå·Î ÀÛ¼ºÀÌ °¡´ÉÇÏ´Ù. ¾ÕÀÇ MethodLoggingAspect¸¦ ÀÛ¼ºÇÑ ÈÄ AspectJÀÇ ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ ÄÄÆÄÀÏÀ» Çϰí AccountTransferÀÇ transfer() ¸Þ½îµå¸¦ ½ÇÇà½ÃŰ¸é ¸Þ½îµåÀÇ ½ÇÇà ÀüÈÄ¿¡ ¸Þ½îµåÀÇ ½ÃÀÛ°ú ³¡À» ¾Ë¸®´Â ·Î±×°¡ ¸¸µé¾îÁø´Ù.

ÀÌ·¸°Ô ¸¸µé¾îÁø ¾Ö½ºÆÑÆ®´Â ±âÁ¸ÀÇ Äڵ忡 ÀüÇô ¿µÇâÀ» ÁÖÁö ¾Ê°í ÀÚ¿¬½º·´°Ô À§ºùµÇ±â ¶§¹®¿¡ ÇÙ½É °ü½É ¸ðµâÀ» °³¹ßÇÏ´Â °³¹ßÀÚµéÀº ÀÌ ºÎºÐÀ» ÀüÇô °í·ÁÇÏÁö ¾Ê°í ±× ¸ðµâ ÀÚüÀÇ ·ÎÁ÷¿¡¸¸ Ãæ½ÇÈ÷ ÀÛ¼ºÇϰí ÈÄ¿¡ ÇÊ¿äÇÑ ¾Ö½ºÆÑÆ®¸¦ ¸¸µé¾î Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¾ÕÀÇ ¾Ö½ºÆÑÆ® ÄÚµå´Â AccountTransfer Ŭ·¡½ºÀÇ transfer ¸Þ½îµå¿¡¸¸ Àû¿ëÇϵµ·Ï ÇÑ °ÍÀÌ´Ù. ÇÊ¿äÇÏ¸é Æ÷ÀÎÆ®ÄÆÀ» Àû¿ëÇØ¼­ ¾ÖÇø®ÄÉÀÌ¼Ç ³»ÀÇ ¸ðµç ¸Þ½îµå¿¡ ·Î±×¸¦ ³²±â´Â ¾Ö½ºÆÑÆ®°¡ À§ºùµÇµµ·Ï ÇÒ ¼ö ÀÖ´Ù. °£´ÜÈ÷ Æ÷ÀÎÆ®ÄÆ ½Ã±×´Ïó¸¸ ¼öÁ¤ÇØÁÖ¸é µÈ´Ù.

    pointcut methodcall() : execution(* *.*(..)) && !within(MethodLoggingAspect)

ÀÌÁ¦ ±× ¼ýÀÚ¿Í »ó°ü¾øÀÌ ¸ðµç ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸Þ½îµåÀÇ ½ÃÀÛ°ú ³¡À» ·Î±×·Î ³²±æ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ¸¸¾à ·Î±×¸¦ ÀÛ¼ºÇÏ´Â Äڵ尡 ´Þ¶óÁ®¾ß ÇÑ´Ù¸é ÀÌÁ¦´Â ¾Ö½ºÆÑÆ®¸¸À» ¼öÁ¤ÇØÁÖ´Â °ÍÀ¸·Î ¸ðµç ¸Þ½îµåÀÇ ·Î±ë ¹æ¹ýÀ» ÇÑ ¹ø¿¡ º¯°æÇÒ ¼ö ÀÖ´Ù. AOP¸¦ »ç¿ëÇÏÁö ¾Ê°í ÀÏÀÏÀÌ ¸ðµç ¸Þ½îµåÀÇ ·Î±× Äڵ带 ¼öÁ¤Çß´ø °Í°ú ºñ±³ÇÏ¸é ±²ÀåÈ÷ Æí¸®ÇØÁ³À½À» ¾Ë ¼ö ÀÖ´Ù.

AOPÀÇ ±¸¼º¿ä¼Ò
AOP¿¡´Â »õ·Î¿î ¿ë¾î°¡ ¸¹ÀÌ µîÀåÇÑ´Ù. ÀÌ Áß¿¡¼­ ƯÈ÷ AOP¸¦ ÀÌ¿ëÇØ¼­ °³¹ßÇϴµ¥ ÇÊ¿äÇÑ Áß¿äÇÑ ±¸¼º¿ä¼Òµé¿¡ ´ëÇÑ Á¤ÀǸ¦ Á¤È®È÷ ÀÌÇØÇØ¾ß ÇÑ´Ù.

Á¶ÀÎÆ÷ÀÎÆ®
Ⱦ´Ü °ü½É ¸ðµâÀÇ ±â´ÉÀÌ »ðÀÔµÇ¾î µ¿ÀÛÇÒ ¼ö ÀÖ´Â ½ÇÇà °¡´ÉÇÑ Æ¯Á¤À§Ä¡¸¦ ¸»ÇÑ´Ù. ¿¹¸¦ µé¾î ¸Þ½îµå°¡ È£ÃâµÇ´Â ºÎºÐ ¶Ç´Â ¸®ÅϵǴ ½ÃÁ¡ÀÌ ÇϳªÀÇ Á¶ÀÎÆ÷ÀÎÆ®(jointpoint)°¡ µÉ ¼ö ÀÖ´Ù. ¶Ç Çʵ带 ¾×¼¼½ºÇÏ´Â ºÎºÐ, ÀνºÅϽº°¡ ¸¸µé¾îÁö´Â ÁöÁ¡, ¿¹¿Ü°¡ ´øÁ®Áö´Â ½ÃÁ¡, ¿¹¿Ü Çڵ鷯°¡ µ¿ÀÛÇÏ´Â À§Ä¡, Ŭ·¡½º°¡ ÃʱâÈ­µÇ´Â °÷ µîÀÌ ´ëÇ¥ÀûÀÎ Á¶ÀÎÆ÷ÀÎÆ®°¡ µÉ ¼ö ÀÖ´Ù. °¢°¢ÀÇ Á¶ÀÎÆ÷ÀÎÆ®µéÀº ±× ¾È¿¡ Ⱦ´Ü °ü½ÉÀÇ ±â´ÉÀÌ AOP¿¡ ÀÇÇØ ÀÚµ¿À¸·Î Ãß°¡µÇ¾îÁ®¼­ µ¿ÀÛÇÒ ¼ö ÀÖ´Â Èĺ¸Áö°¡ µÇ´Â °ÍÀÌ´Ù.

Æ÷ÀÎÆ®ÄÆ
Æ÷ÀÎÆ®ÄÆ(pointcut)Àº ¾î¶² Ŭ·¡½ºÀÇ ¾î´À Á¶ÀÎÆ÷ÀÎÆ®¸¦ »ç¿ëÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÏ´Â ¼±Åà ±â´ÉÀ» ¸»ÇÑ´Ù. AOP°¡ Ç×»ó ¸ðµç ¸ðµâÀÇ ¸ðµç Á¶ÀÎÆ÷ÀÎÆ®¸¦ »ç¿ëÇÒ °ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ Çʿ信 µû¶ó »ç¿ëÇØ¾ß ÇÒ ¸ðµâÀÇ Æ¯Á¤ Á¶ÀÎÆ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù. ÀÏÁ¾ÀÇ Á¶ÀÎÆ÷ÀÎÆ® ¼±Á¤ ·ê°ú °°Àº °³³äÀÌ´Ù. AOP¿¡¼­´Â Æ÷ÀÎÆ®ÄÆÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ Á¢±Ù ¹æ¹ýÀ» Á¦°øÇÑ´Ù. AspectJ¿¡¼­´Â ¿ÍÀϵåÄ«µå¸¦ ÀÌ¿ëÇÑ ¸Þ½îµå ½Ã±×´Ïó¸¦ »ç¿ëÇÑ´Ù.

¾îµå¹ÙÀ̽º ¶Ç´Â ÀÎÅͼÁÅÍ
¾îµå¹ÙÀ̽º(advice)´Â °¢ Á¶ÀÎÆ÷ÀÎÆ®¿¡ »ðÀԵǾîÁ® µ¿ÀÛÇÒ ¼ö ÀÖ´Â Äڵ带 ¸»ÇÑ´Ù. ÁÖ·Î ¸Þ½îµå ´ÜÀ§·Î ±¸¼ºµÈ ¾îµå¹ÙÀ̽º´Â Æ÷ÀÎÆ®ÄÆ¿¡ ÀÇÇØ °áÁ¤µÈ ¸ðµâÀÇ Á¶ÀÎÆ÷ÀÎÆ®¿¡¼­ È£ÃâµÇ¾î »ç¿ëµÈ´Ù. ÀϹÝÀûÀ¸·Î µ¶¸³ÀûÀΠŬ·¡½º µîÀ¸·Î ±¸ÇöµÈ Ⱦ´Ü °ü½É ¸ðµâÀ» Á¶ÀÎÆ÷ÀÎÆ®ÀÇ Á¤º¸¸¦ ÂüÁ¶Çؼ­ ÀÌ¿ëÇÏ´Â ¹æ½ÄÀ¸·Î ÀÛ¼ºµÈ´Ù. ÀÎÅͼÁÅÍ(intercepter)´Â ÀÎÅͼÁÅÍ Ã¼ÀÎ ¹æ½ÄÀÇ AOP Åø¿¡¼­ »ç¿ëÇÏ´Â ¿ë¾î·Î ÁÖ·Î ÇÑ °³ÀÇ invoke ¸Þ½îµå¸¦ °¡Áö´Â ¾îµå¹ÙÀ̽º¸¦ ¸»ÇÑ´Ù.

À§ºù ¶Ç´Â Å©·Î½ºÄÆÆÃ
Æ÷ÀÎÆ®ÄÆ¿¡ ÀÇÇØ¼­ °áÁ¤µÈ Á¶ÀÎÆ÷ÀÎÆ®¿¡ ÁöÁ¤µÈ ¾îµå¹ÙÀ̽º¸¦ »ðÀÔÇÏ´Â °úÁ¤ÀÌ À§ºùÀÌ´Ù. À§ºùÀº AOP°¡ ±âÁ¸ÀÇ ÇÙ½É °ü½É ¸ðµâÀÇ Äڵ忡 ÀüÇô ¿µÇâÀ» ÁÖÁö ¾ÊÀ¸¸é¼­ ÇÊ¿äÇÑ È¾´Ü °ü½É ±â´ÉÀ» Ãß°¡ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ÇÙ½ÉÀûÀΠ󸮰úÁ¤ÀÌ´Ù. ´Ù¸¥ ¸»·Î Å©·Î½ºÄÆÆÃ(crosscutting)À̶ó°í Çϱ⵵ ÇÑ´Ù. À§ºùÀ» ó¸®ÇÏ´Â ¹æ¹ýÀº ÈÄ󸮱⸦ ÅëÇÑ ÄÚµå»ý¼º ±â¼úÀ» ÅëÇÑ ¹æ¹ýºÎÅÍ Æ¯º°ÇÑ ÄÄÆÄÀÏ·¯ »ç¿ëÇÏ´Â °Í, ÀÌ¹Ì »ý¼ºµÈ Ŭ·¡½ºÀÇ Á¤ÀûÀÎ ¹ÙÀÌÆ®ÄÚµåÀÇ º¯È¯ ¶Ç´Â ½ÇÇà Áß Å¬·¡½º·Î´õ¸¦ ÅëÇÑ ½Ç½Ã°£ ¹ÙÀÌÆ®ÄÚµå º¯È¯ ±×¸®°í ´ÙÀ̳»¹Í ÇÁ·Ï½Ã¸¦ ÅëÇÑ ¹æ¹ý±îÁö ¸Å¿ì ´Ù¾çÇÏ´Ù.

ÀÎÆ®·Î´ö¼Ç ¶Ç´Â ÀÎÅÍŸÀÔ ¼±¾ð
ÀÎÆ®·Î´ö¼Ç(Introduction)Àº Á¤ÀûÀÎ ¹æ½ÄÀÇ AOP ±â¼úÀÌ´Ù. µ¿ÀûÀÎ AOP ¹æ½ÄÀ» »ç¿ëÇϸé ÄÚµåÀÇ Á¶ÀÎÆ÷ÀÎÆ®¿¡ ¾îµå¹ÙÀ̽º¸¦ Àû¿ëÇØ¼­ Çٽɰü½É ÄÚµåÀÇ µ¿ÀÛ ¹æ½ÄÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÎÆ®·Î´ö¼ÇÀº ÀÌ¿¡ ¹ÝÇØ¼­ ±âÁ¸ÀÇ Å¬·¡½º¿Í ÀÎÅÍÆäÀ̽º¿¡ ÇÊ¿äÇÑ ¸Þ½îµå³ª Çʵ带 Ãß°¡Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ¹æ¹ýÀÌ´Ù. OOP¿¡¼­ ¸»ÇÏ´Â ¿ÀºêÁ§Æ®ÀÇ »ó¼ÓÀ̳ª È®Àå°ú´Â ´Ù¸¥ ¹æ½ÄÀ¸·Î ¾îµå¹ÙÀ̽º ¶Ç´Â ¾Ö½ºÆÑÆ®¸¦ ÀÌ¿ëÇØ¼­ ±âÁ¸ Ŭ·¡½º¿¡ ¾ø´Â ÀÎÅÍÆäÀ̽º µîÀ» ´ÙÀ̳»¹ÍÇÏ°Ô ±¸ÇöÇØ ÁÙ ¼ö ÀÖ´Ù.

¾Ö½ºÆÑÆ® ¶Ç´Â ¾îµå¹ÙÀÌÀú
¾Ö½ºÆÑÆ®(aspect)´Â Æ÷ÀÎÆ®ÄÆ(¾îµð¿¡¼­)°ú ¾îµå¹ÙÀ̽º(¹«¾ùÀ» ÇÒ °ÍÀÎÁö)¸¦ ÇÕÃijõÀº °ÍÀ» ¸»ÇÑ´Ù. Çʿ信 µû¶ó¼­ ÀÎÆ®·Î´ö¼Çµµ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. AspectJ¿Í °°Àº ÀÚ¹Ù ¾ð¾î¸¦ È®ÀåÇÑ AOP¿¡¼­´Â ¸¶Ä¡ ÀÚ¹ÙÀÇ Å¬·¡½ºÃ³·³ ¾Ö½ºÆÑÆ®¸¦ ÄÚµå·Î ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. AOP ÅøÀÇ Á¾·ù¿¡ µû¶ó¼­ ¾îµå¹ÙÀ̽º¿Í Æ÷ÀÎÆ®ÄÆÀ» °¢°¢ ÀÏ¹Ý Àڹ٠Ŭ·¡½º·Î ÀÛ¼ºÇϰí À̸¦ °áÇÕÇÑ ¾îµå¹ÙÀÌÀú Ŭ·¡½º¸¦ ¸¸µé¾î¼­ »ç¿ëÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù.

´ëÇ¥ÀûÀÎ AOP Åø
AOP´Â OOPÀÇ È®Àå¿¡ °¡±õ±â ¶§¹®¿¡ Àü¿ë ¾ð¾î³ª µ¶¸³µÈ °³¹ß ÅøÀ» °¡Áö°í ÀÖÁö ¾Ê°í ´ë½Å ±âÁ¸ÀÇ OOP¸¦ È®ÀåÇÑ ¾ð¾î È®Àå(languageextension) ¶Ç´Â ÅøÀ̳ª ÇÁ·¹ÀÓ¿öÅ© ÇüÅ·Π»ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ´Ù. ÇöÀç ÀÚ¹Ù¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ°Ô ±¸ÇöµÈ AOPÀÇ ¼ýÀÚ´Â 10¿©°³°¡ µÈ´Ù. ÇÏÁö¸¸ ÀÌ Áß¿¡¼­ ÁÖ·Î »ç¿ëµÇ´Â ´ëÇ¥ÀûÀÎ AOP ¼Ö·ç¼ÇÀº 4°¡Áö Á¤µµ¸¦ ²ÅÀ» ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀ¸·Î AOP ±¸ÇöÀÇ ½ÃÃʰ¡ µÈ ÀÌŬ¸³½º ÇÁ·ÎÁ§Æ®ÀÇ AspectJ¸¦ µé ¼ö ÀÖ´Ù.

AspectJ´Â Ãʱ⿡ Á¦·Ï½º PARC ¿¬±¸¼Ò¿¡¼­ °³¹ßµÇ¾ú´Ù°¡ 2002³â¿¡ ÀÌŬ¸³½º ÇÁ·ÎÁ§Æ®¿¡ ±âÁõµÇ¾ú°í, ÇöÀç IBMÀÇ ÀüÆøÀûÀÎ Áö¿øÀ» ¹ÞÀ¸¸é¼­ °³¹ßµÇ¾î »ç¿ëµÇ°í ÀÖ´Ù. ±×¸®°í BEA°¡ Áß½ÉÀÌ µÇ¾î °³¹ßÇϰí ÀÖ´Â AspectWerkz°¡ ÀÖ´Ù. AspectWerkz´Â AspectJ¿Í ´Þ¸® ÀÚ¹Ù ¾ð¾î ÀÚü¸¦ È®ÀåÇÏÁö ¾Ê°í ±âÁ¸ÀÇ ÀÚ¹Ù ¾ð¾î¸¸À¸·Î AOPÀÇ »ç¿ëÀÌ °¡´ÉÇϵµ·Ï µÇ¾î ÀÖ´Ù. ±×¸®°í ÀÇÁ¸¼º »ðÀÔ(Dependency Injection, ÀÌÇÏ DI) ±â¹ÝÀÇ ÇÁ·¹ÀÓ¿öÅ©·Î À¯¸íÇÑ SpringAOP°¡ ÀÖ´Ù. °¡Àå ÃÖ±Ù¿¡ µîÀåÇÑ AOP·Î´Â JBossAOPµµ ÀÖ´Ù. SpringAOP¿Í ÇÔ²² ´ëÇ¥ÀûÀÎ ÀÎÅͼÁÅÍüÀÎ ¹æ½ÄÀÇ AOP·Î ²ÅÈù´Ù.

<Ç¥ 1> AOP ÅøÀÇ ºñ±³

ÀÌ·¸°Ô ¸¹Àº AOP ÅøÀÌ Á¸ÀçÇÏ´Â ÀÌÀ¯´Â ¾ÆÁ÷ AOP°¡ Ç¥ÁØ ½ºÆåÀ̳ª ±âÁØÀÌ ¾øÀÌ ÇöÀåÀ» Áß½ÉÀ¸·Î ºü¸£°Ô ÁøÈ­Çϰí ÀÖ´Â ±â¼úÀ̱⠶§¹®ÀÌ´Ù. ±âº»ÀûÀÎ AOP¿¡ °³³äÀº ºñ½ÁÇÏÁö¸¸ ½ÇÁ¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀ̳ª Àû¿ë ±â¼úÀº »ó´çÇÑ Â÷À̰¡ ÀÖ´Ù. ÀÌ Áß¿¡¼­ ¹«¾ùÀÌ Á¦ÀÏ ³ªÀº ÀÚ¹Ù ±â¹ÝÀÇ AOP Çϳª¸¦ ¼±Á¤Çϱâ´Â ¾î·Æ´Ù. ±× ÀÌÀ¯´Â AOP°¡ »ç¿ëµÇ´Â ¹æ½Ä°ú ¸ñÀû, ȯ°æ¿¡ µû¶ó °¢±â ´Ù¸¥ Àå´ÜÁ¡À» °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·¸°Ô ´Ù¾çÇÑ ÅøÀÌ Á¸ÀçÇÏ´Â °ÍÀÌ Ã³À½ AOP¸¦ Á¢±ÙÇÏ´Â °³¹ßÀڵ鿡°Ô´Â ºÎ´ãÀÌ µÇ´Â °ÍÀÌ »ç½ÇÀÌ´Ù. ÇÏÁö¸¸ °¢°¢ÀÇ AOP°¡ ²÷ÀÓ¾øÀÌ »õ·Î¿î ±â´ÉÀ» ½ÃµµÇÏ°í ¹ßÀüÇÏ´Â °úÁ¤À» ÅëÇØ AOP°¡ ´õ¿í °ß°íÇϰí dzºÎÇÑ ±â´ÉÀ» °¡Áú ¼ö ÀÖÀ» °ÍÀ» ±â´ëÇØ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

AspectJ
AspectJÀÇ °¡Àå Å« Ư¡Àº ´Ù¸¥ AOP Åø°ú´Â ´Þ¸® ÀÚ¹Ù ¾ð¾î¸¦ È®ÀåÇØ¼­ ¸¸µé¾îÁø ±¸Á¶¶ó´Â °ÍÀÌ´Ù. ¸¶Ä¡ »õ·Î¿î AOP ¾ð¾î¸¦ »ç¿ëÇϵíÀÌ aspect¶ó´Â Ű¿öµå¸¦ ÀÌ¿ëÇØ ¾Ö½ºÆÑÆ®³ª Æ÷ÀÎÆ®ÄÆ, ¾îµå¹ÙÀ̽º¸¦ ¸¸µé ¼ö ÀÖ´Ù. µû¶ó¼­ ÀÏ¹Ý ÀÚ¹Ù ÄÄÆÄÀÏ·¯·Î´Â ÄÄÆÄÀÏÀÌ ºÒ°¡´ÉÇÏ°í Æ¯º°ÇÑ AOP ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô ¸¸µé¾îÁø ¹ÙÀ̳ʸ®´Â Ç¥ÁØ JVM¿¡¼­ µ¿ÀÛ °¡´ÉÇÑ ±¸Á¶·Î µÇ¾îÀֱ⠶§¹®¿¡ Ưº°ÇÑ Å¬·¡½º ·Î´õÀÇ Áö¿ø ¾øÀ̵µ ½ÇÇà °¡´ÉÇÏ´Ù.

AspectJ´Â °¡Àå ¿À·¡µÇ°í °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â AOP ÅøÀÌ´Ù. µ¿½Ã¿¡ °¡Àå dzºÎÇÑ ±â´ÉÀ» °¡Áö°í ÀÖ°í È®À强ÀÌ ¶Ù¾î³ª±â ¶§¹®¿¡ °¡Àå ÀÌ»óÀûÀÎ AOP Åø·Î ²ÅÈ÷°í ÀÖ´Ù. ÇÏÁö¸¸ ÀÚ¹Ù ¾ð¾î¸¦ È®ÀåÇ߱⠶§¹®¿¡ »õ·Î¿î ¹®¹ý°ú ¾ð¾î¸¦ ÀÌÇØÇÒ Çʿ䰡 ÀÖ°í ÇÁ·ÎÁ§Æ® ºôµå½Ã Ưº°ÇÑ ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. À§ºùÀÌ ÄÄÆÄÀϽÿ¡ ÀϾ±â ¶§¹®¿¡ Æ÷ÀÎÆ®ÄÆ¿¡ ÀÇÇØ ¼±ÅÃµÈ ¸ðµç Ŭ·¡½ºµéÀº ¾Ö½ºÆÑÆ®°¡ ¹Ù²ð ¶§¸¶´Ù ¸ðµÎ ´Ù½Ã ÄÄÆÄÀÏÀÌ µÇ¾î¾ß ÇÑ´Ù.

AspectJ´Â °¡Àå ¿À·¡µÇ°í °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â AOP ÅøÀÌ´Ù. µ¿½Ã¿¡ °¡Àå dzºÎÇÑ ±â´ÉÀ» °¡Áö°í ÀÖ°í È®À强ÀÌ ¶Ù¾î³ª±â ¶§¹®¿¡ °¡Àå ÀÌ»óÀûÀÎ AOP Åø·Î ²ÅÈ÷°í ÀÖ´Ù. ÇÏÁö¸¸ ÀÚ¹Ù ¾ð¾î¸¦ È®ÀåÇ߱⠶§¹®¿¡ »õ·Î¿î ¹®¹ý°ú ¾ð¾î¸¦ ÀÌÇØÇÒ Çʿ䰡 ÀÖ°í ÇÁ·ÎÁ§Æ® ºôµå½Ã Ưº°ÇÑ ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. À§ºùÀÌ ÄÄÆÄÀϽÿ¡ ÀϾ±â ¶§¹®¿¡ Æ÷ÀÎÆ®ÄÆ¿¡ ÀÇÇØ ¼±ÅÃµÈ ¸ðµç Ŭ·¡½ºµéÀº ¾Ö½ºÆÑÆ®°¡ ¹Ù²ð ¶§¸¶´Ù ¸ðµÎ ´Ù½Ã ÄÄÆÄÀÏÀÌ µÇ¾î¾ß ÇÑ´Ù.

AspectWerkz
AspectWerkz´Â AspectJ¿Í´Â ´Þ¸® ÀÚ¹Ù ¾ð¾î¸¦ È®ÀåÇÏÁö ¾Ê´Â´Ù. µû¶ó¼­ Ç¥ÁØ Àڹ٠Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼­ AOP¸¦ ±¸ÇöÇØ ³¾ ¼ö ÀÖ´Ù. ÀÏ¹Ý Å¬·¡½º¿Í ¸Þ½îµå¸¦ ÀÌ¿ëÇØ ½±°Ô ±¸ÇöÀÌ °¡´ÉÇÑ ¾îµå¹ÙÀ̽º¿Í ´Þ¸® º¹ÀâÇÑ ¹®¹ýÀÌ ÇÊ¿äÇÑ Æ÷ÀÎÆ®ÄÆÀº º°µµÀÇ XML ÆÄÀÏÀ» ÀÌ¿ëÇØ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ´Ù. Àڹ٠Ŭ·¡½º¿Í XML ¼³Á¤ ÆÄÀÏÀÇ Á¢±Ù¹ý¿¡ Àͼ÷ÇÑ °³¹ßÀڵ鿡°Ô´Â ¸Å¿ì Æí¸®ÇÑ Á¢±Ù ¹æ½ÄÀ̶ó°í º¼ ¼ö ÀÖ´Ù.

ÃÖ±Ù¿¡´Â JDK5ÀÇ Áö¿ø¿¡ µû¶ó ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ¾î ´õ¿í Æí¸®ÇØÁ³´Ù. À§ºùÀº Ưº°ÇÑ Å¬·¡½º ·Î´õ¸¦ ÀÌ¿ëÇÑ ·ÎµùŸÀÓ ¹ÙÀÌÆ®ÄÚµå »ý¼ºÀ» ÀÌ¿ëÇÑ´Ù. AspectJ ¸øÁö¾ÊÀº ´Ù¾çÇÑ Á¶ÀÎÆ÷ÀÎÆ®¿Í AOP±â´ÉÀ» Áö¿øÇϰí ÀÖÀ¸¸ç Æí¸®ÇÑ °³¹ßÀ» À§ÇÑ IDE Ç÷¯±×ÀÎÀÌ °³¹ßµÇ¾î ÀÖ´Ù.

JBossAOP
JBossAOP´Â ¾ÕÀÇ µÎ °¡Áö Åø°ú ´Þ¸® ÇÁ·Ï½Ã¸¦ ÀÌ¿ëÇÑ ÀÎÅͼÁÅÍ Ã¼ÀÎÀ» Ȱ¿ëÇØ¼­ À§ºùÀ» ó¸®ÇÏ´Â °ÍÀÌ Æ¯Â¡ÀÌ´Ù. Çʿ信 µû¶ó¼­ JavaAssist¸¦ ÅëÇÑ ¹ÙÀÌÆ®ÄÚµå Á¶ÀÛÀ» ÀÌ¿ëÇϱ⵵ ÇÑ´Ù. JBossAOP´Â ¿ø·¡ JBoss ¼­¹öÀÇ EJB¸¦ À§ÇÑ ÀÎÅͼÁÅÍ Ã¼ÀÎ ±â¼úÀ» ÅëÇØ ¹ßÀüÇØ ¿Ô´Ù. JBoss´Â ÃÖÃÊ·Î µðÇ÷ÎÀÌ ½ÃÁ¡ÀÇ ÄÚµå »ý¼ºÀÌ ¾Æ´Ñ ÀÎÅͼÁÅÍ Ã¼ÀÎÀ» ÀÌ¿ëÇÑ ¹æ½ÄÀ¸·Î EJB È£Ãâ°ú ±× »çÀÌ¿¡ ÇÊ¿äÇÑ ¿£ÅÍÇÁ¶óÀÌÁî ¼­ºñ½º ±â´ÉÀÇ »ðÀÔÀ» ±¸ÇöÇØ³Â°í À̸¦ ¹ßÀü½ÃÄÑ ¿Ô´Ù. ÃÖ±Ù EJB3³ª ÇÏÀ̹ö³×ÀÌÆ®¿Í °°Àº POJO ±â¹ÝÀÇ ¿£ÅÍÇÁ¶óÀÌÁî °³¹ßÀÌ È°¹ßÇØÁö¸é¼­ Á» ´õ ¹ü¿ëÀûÀ¸·Î AOP¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ÇüÅ·ΠJBossAOP¸¦ °³¹ßÇß´Ù.

JBossAOP´Â ±âº»ÀûÀ¸·Î ÄÁÅ×À̳ʿ¡¼­ µ¿ÀÛÇÏÁö¸¸ ÄÁÅ×ÀÌ³Ê¿Í »ó°ü¾ø´Â µ¶¸³µÈ ÀÚ¹Ù ÇÁ·Î±×·¥¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÁÖ ¿ëµµ´Â JBoss ¼­¹ö¿Í ¾ÕÀ¸·Î ³ª¿Ã EJB3 ÄÁÅ×ÀÌ³Ê µî¿¡ AOP¸¦ Àû¿ëÇÏ´Â µ¥¿¡ »ç¿ëµÇ¾îÁö´Â °ÍÀÌ´Ù. AspectWerkz¿Í ¸¶Âù°¡Áö·Î ¾îµå¹ÙÀ̽º´Â Ç¥ÁØ ÀÚ¹Ù ÄÚµå·Î ÀÛ¼ºÇÏ°í Æ÷ÀÎÆ®Äưú ´Ù¸¥ ¼³Á¤Àº XML ÆÄÀÏÀ̳ª JDK5ÀÇ ¾î³ëÅ×À̼ÇÀ¸·Î ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¾ÆÁ÷±îÁö´Â JBoss »ç¿ëÀÚÀÇ ÀϺο¡¼­¸¸ »ç¿ëµÇ°í ÀÖÀ¸³ª ÇâÈÄ EJB3¸¦ Áß½ÉÀ¸·Î ÇÑ POJO ±â¹ÝÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ¹Ìµé¿þ¾î ÇÁ·¹ÀÓ¿öÅ©°¡ °³¹ßµÇ¾îÁü¿¡ µû¶ó Á¡Â÷·Î »ç¿ë·üÀÌ ¿Ã¶ó°¥ °ÍÀ¸·Î ±â´ëµÈ´Ù.

SpringAOP
SpringAOP´Â ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©ÀÇ Çٽɱâ´É ÁßÀÇ ÇѰ¡Áö·Î ½ºÇÁ¸µÀÇ DI ÄÁ³×À̳ʿ¡¼­ µ¿ÀÛÇÏ´Â ¿£ÅÍÇÁ¶óÀÌÁî ¼­ºñ½º¿¡¼­ ÁÖ·Î »ç¿ëµÈ´Ù. SpringAOP´Â ´Ù¸¥ AOP¿Í ´Þ¸® ±âÁ¸ Ŭ·¡½ºÀÇ ¹ÙÀÌÆ®Äڵ带 ¼öÁ¤ÇÏÁö ¾Ê´Â´Ù. ´ë½Å JDKÀÇ ´ÙÀ̳»¹Í ÇÁ·Ï½Ã¸¦ »ç¿ëÇØ¼­ ÇÁ·Ï½Ã¹æ½ÄÀ¸·Î AOPÀÇ ±â´ÉÀ» ¼öÇàÇÑ´Ù. ÀÌ ¶§¹®¿¡ ´Ù¸¥ AOPÀÇ ±â´É°ú ºñ±³Çؼ­ ¸Å¿ì Á¦ÇÑÀûÀÎ ºÎºÐ¸¸À» Áö¿øÇÑ´Ù.

ÇÏÁö¸¸ SpringAOPÀÇ ±¸Çö ¸ñÀûÀº ¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÁÖ·Î »ç¿ëµÇ´Â ÇÙ½ÉÀûÀÎ ±â´É¿¡ AOPÀÇ ÀåÁ¡À» »ì·Á À̸¦ ½ºÇÁ¸µ³»¿¡¼­ »ç¿ëÇÏ´Â °ÍÀ̱⠶§¹®¿¡ ´Ù¸¥ AOP¿Í °°Àº AOPÀÇ º¹ÀâÇÑ Àüü ±â´ÉÀ» ±»ÀÌ ´Ù ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ÇÁ·Ï½Ã ±â¹ÝÀÇ SpringAOP´Â SpringIoC/DI¿Í ¸Å¿ì ±ä¹ÐÇÏ°Ô ¿¬µ¿ÀÌ µÈ´Ù. µû¶ó¼­ SpringAOP¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ½ºÇÁ¸µ ³»¿¡ ÇÁ·Ï½Ã ºóÀ» ¼³Á¤Çؼ­ ½±°Ô »ç¿ëÇÒ
¼ö ÀÖ´Ù.

JDKÀÇ Ç¥ÁØ ±â´É¸¸À» »ç¿ëÇϱ⠶§¹®¿¡ Ưº°ÇÑ ºôµå °úÁ¤ÀÌ ÇÊ¿ä¾ø°í Ŭ·¡½º ·Î´õ¸¦ º¯°æÇѴٰųª ÇÏ´Â ¹ø°Å·Î¿î ÀÛ¾÷ÀÌ ¾ø´Ù. ´ë½Å Á¶ÀÎÆ÷ÀÎÆ®°¡ Á¾·ù°¡ ¸Þ½îµå ±â¹ÝÀ¸·Î Á¦ÇÑµÇ¸ç °°Àº Ŭ·¡½º ¾ÈÀÇ ¸Þ½îµå È£ÃâÀ̳ª Äݹé Äڵ带 »ç¿ëÇßÀ» °æ¿ì¿¡´Â ÇÁ·Ï½Ã¸¦ Àû¿ëÇÒ ¼ö ¾ø´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ´ëºÎºÐÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÇÊ¿ä·Î ÇÏ´Â ÁÖ¿ä AOP ±â´ÉµéÀ» ¸Þ½îµå È£ÃâÀ» ±â¹ÝÀ¸·Î ÃæºÐÈ÷ 󸮰¡ °¡´ÉÇϱ⠶§¹®¿¡ SpringAOP´Â ±× Á¦ÇÑµÈ AOP ±â´É¿¡µµ ºÒ±¸Çϰí ÇöÀå¿¡¼­ °¡Àå ºü¸¥ ¼Óµµ·Î Àû¿ëµÇ¾î »ç¿ëµÇ´Â AOP ¼Ö·ç¼Ç ÁßÀÇ ÇϳªÀÌ´Ù. SpringAOP´Â ¾îµå¹ÙÀ̽º¿Í Æ÷ÀÎÆ®ÄÆÀ» ¸ðµÎ Ç¥ÁØ Àڹ٠Ŭ·¡½º·Î ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

Çʿ信 µû¶ó¼­ Æ÷ÀÎÆ®ÄÆÀº ¼³Á¤ ÆÄÀÏ ³»¿¡¼­ Æ÷ÀÎÆ®ÄÆ ÆÑÅ丮 ºóÀ» ÀÌ¿ëÇØ¼­ Á¤±Ô½ÄÀ¸·Î Ç¥ÇöÀÌ °¡´ÉÇÏ´Ù. SpringAOPÀÇ ÃÖ´ë ´ÜÁ¡Àº º¹ÀâÇÑ ÇÁ·Ï½Ã ¼³Á¤ ±¸Á¶ÀÌ´Ù. SpringºóÀ» Á¤ÀÇÇÑ ÆÄÀÏ¿¡¼­ ÇÁ·Ï½Ã¸¦ Á¤ÀÇÇÑ ºÎºÐÀÇ ´Ù¸¥ XML±â¹ÝÀÇ AOP¿¡ ºñÇØ¼­µµ º¹ÀâÇÑ ÆíÀε¥ ÀÌ °æ¿ì SpringAOP°¡ Áö¿øÇÏ´Â AutoProxyingCreatorBean µîÀ» ÀÌ¿ëÇÏ¸é ¼³Á¤ Äڵ带 ¸Å¿ì ´Ü¼øÇÏ°Ô ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

AOPÀÇ °úÁ¦
Áö³­ 5³â°£ AOP°¡ µîÀåÇϰí ÇöÀå¿¡ Àû¿ëµÇ¸é¼­ Ç×»ó ¸ðµç °³¹ßÀڵ鿡°Ô ÁÁÀº ¹ÝÀÀ¸¸ ¾òÀº °ÍÀº ¾Æ´Ï´Ù. ¿ÀÈ÷·Á OOP¿¡ Àͼ÷ÇÑ ¸¹Àº °³¹ßÀÚµé°ú ÇÐÀÚ, ¿¬±¸¿øµé¿¡°Ô¼­ °­ÇÑ ÀúÇ×À» ´À³¥ ¼ö ÀÖÀ» Á¤µµ·Î ¹Ý¹ßÀÌ ÀÖ¾ú´Ù. AOP¸¦ ¹Ý´ëÇÏ´Â ´ëÇ¥ÀûÀÎ »ç¶÷ÀÌ ÀÚ¹ÙÀÇ Ã¢½ÃÀÚÀÎ Á¦ÀÓ½º °í½½¸µ(James Gosling)Àε¥ ±×´Â AOP°¡ ÀÚ¹ÙÀÇ OOP Á¤½Å°ú ¿øÄ¢À» ÈѼÕÇÏ°í ±×·ÎÀÎÇØ ½ÇÀü¿¡¼­ °³¹ßÀڵ鿡°Ô µµ¿òÀÌ µÇ±âº¸´Ù´Â ¾î·Á¿òÀ» ÁÖ´Â ¹®Á¦¸¦ ¾È°í ÀÖ´Ù°í ºñÆÇÇÑ´Ù.

ÇϳªÀÇ »õ·Î¿î ÇÁ·Î±×·¡¹Ö ÆÐ·¯´ÙÀÓÀÌ µîÀåÇÏ°í ¹ßÀüÇϸ鼭 ¿ÏÀüÈ÷ ÀÚ¸®¸¦ Àâ¾Æ°¡±â±îÁö´Â ±×¸¸Å­ ÃæºÐÇÑ ½Ã°£ÀÌ ÇÊ¿äÇÒ °ÍÀ̰í, ±× ÀÌÀü ¼¼´ë ÆÐ·¯´ÙÀÓ°úÀÇ ÀûÁö ¾ÊÀº Ãæµ¹À» ¿¹»óÇØ¾ß ÇÏ´Â °ÍÀº ºÐ¸íÇÏ´Ù. AOP´Â ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ÆÐ·¯´ÙÀÓº¸´Ù ÈξÀ ºü¸¥ ½Ã°£¿¡ ÇöÀå ½Ç¹«¿¡ Àû¿ëµÇ°í ÀÚ¸®¸¦ Àâ¾Æ³ª°¡°í ÀÖ°í ¸¹Àº °³¹ßÀÚµéÀÇ È£ÀÀ¿¡ ÈûÀÔ¾î ³î¶ó¿î ¼ºÀåÀ» º¸¿©ÁÖ°í ÀÖÀ½¿¡µµ ÁÖ·ù ±â¼ú·Î ÀÚ¸® Àâ±â À§Çؼ­´Â ÇØ°áÇØ¾ß ÇÒ ¿©·¯ ¹®Á¦Á¡°ú ±Øº¹ÇÒ À庮À» °¡Áö°í ÀÖ´Â °ÍÀÌ »ç½ÇÀÌ´Ù.

Ç¥ÁØÀÇ ºÎÀç
AOP´Â ÇöÀç Á¤ÇØÁø Ç¥ÁØÀÌ ¾øÀ¸¸ç Ç¥ÁØÀ» Á¤ÇÒ ±â±¸³ª Á¶Á÷µµ ¾ø´Ù. ¿ë¾îºÎÅÍ ½ÃÀÛÇØ¼­ ¹®¹ý, ±¸Çö ¹æ¹ý¿¡ À̸£±â±îÁö AOP¿Í °ü·ÃÇØ¼­ ÅëÀÏµÈ °ÍÀÌ ¾ø´Ù. µû¶ó¼­ AOP ÅøÀ» ¸¸µå´Â ÆÀ°ú ¾÷ü¿¡ µû¶ó¼­ ±× ³»¿ë°ú Çü½ÄÀÌ »ó´çÈ÷ Â÷À̰¡ ³ª´Â °æ¿ìµµ ÀÖ´Ù. ºñ·Ï ±âº»ÀûÀÎ °³³äÀº °øÀ¯Çϰí ÀÖ´Ù°í ÇÏÁö¸¸ Á¢±Ù ¹æ¹ýÀÌ Â÷À̰¡ ³ª´Â °ÍÀº AOP°¡ ÇÁ·Î±×·¡¹Ö Ç¥ÁØ ±â¼ú·Î ÀÚ¸® Àâ´Âµ¥ ¸¹Àº Àå¾Ö°¡ µÉ ¼ö¹Û¿¡ ¾ø´Ù. ÀÌ·Î ÀÎÇØ óÀ½ AOP¸¦ Á¢ÇÏ´Â °³¹ßÀÚµéÀ̳ª AOP¸¦ °øºÎÇÏ·Á´Â »ç¶÷µé¿¡°Ô È¥¶õÀ» ¾È°Ü Áֱ⵵ ÇÑ´Ù.

ÀÌ·± ¿ÍÁß¿¡ AOSD(Internationl Conference on Aspect Oriented Software Development)¿Í °°Àº Çà»çµéÀÌ ²ÙÁØÈ÷ ¿­¸®¸é¼­ AOP ¿¬±¸ÀÚµé°ú Åø °³¹ßÆÀ, °³¹ßÀÚµé »çÀÌ¿¡ ¸¹Àº ÀǰßÀ» ¸ðÀ¸°í Ç¥ÁØÀ» À§ÇÑ ³ë·ÂÀÌ ½ÃÀ۵Ǿú´Ù´Â °ÍÀº ¹Ý°¡¿î ¼Ò½ÄÀÌ´Ù. ¶ÇÇÑ ÃÖ±Ù AOPÅø ¾÷üµé °£¿¡ Çù·ÂÀ̳ª ÅëÇÕ ±¸Á¶°¡ °¡½ÃÀûÀ¸·Î º¸À̰í ÀÖ´Ù´Â °Í ¶ÇÇÑ ¸Å¿ì ÁÁÀº Çö»óÀ̶ó°í º»´Ù. ƯÈ÷ ¿ÃÇØ µé¾î ´ëÇ¥ÀûÀÎ AOP ÅøÀÎ AspectJ¿Í AspectWerkz°¡ Çù·ÂÇØ¼­ ÅëÇÕµÈ AOP ÅøÀ» ¸¸µé±â·Î Çϰí Áö±Ý ÀÛ¾÷ÀÌ ÁøÇà ÁßÀ̶ó´Â »ç½ÇÀº ¸Å¿ì °í¹«ÀûÀÌ´Ù.

°Ô´Ù°¡ ÃÖ±Ù AspectJ ÇÁ·ÎÁ§Æ®¸¦ À̲ô´Â ÇÙ½É °³¹ßÀÚÀÎ ¾Æµå¸®¾È Äݸ®¾î(Adrian Colyer)°¡ ±×µ¿¾È ¸ö´ã°í ÀÖÀ¸¸é¼­ AspectJ¸¦ °³¹ßÇØ ¿Ô´ø IBMÀ» ¶°³ª SpringAOP¸¦ ¸¸µç Interface21¿¡ ÇÕ·ùÇÏ°Ô µÇ¾ú´Ù. ÀÌ·Î ÀÎÇØ 3°³ÀÇ AOP ÅøÀÇ Àå±âÀûÀÎ ÅëÇÕµµ ±â´ëÇÒ ¼ö ÀÖÀ» °Í °°´Ù. ÇÏÁö¸¸ ÇÑÆíÀ¸·Î´Â Ç¥ÁØÀ» »¡¸® Á¦Á¤Çϱ⠺¸´Ù´Â ¾ÆÁ÷Àº AOP´Â ¹ßÀüÇϰí ÁøÈ­ÇØ¾ß ÇÏ´Â ´Ü°è¿¡ Àֱ⠶§¹®¿¡ ´Ù¾çÇÑ Ã¢Á¶ÀûÀÎ ½ÃµµµéÀÌ °¡´ÉÇÑ Çö »óŰ¡ ¾î´À Á¤µµ ´õ À¯ÁöµÇ¾îÁ®¾ß ÇÒ °ÍÀ̶ó´Â Àǰߵµ ÀÖ´Ù.

ÇнÀÀÇ ¾î·Á¿ò
ÇöÀå¿¡¼­ AOP¸¦ Á¢Çؿ °³¹ßÀÚµéÀÇ °¡Àå Å« AOP¿¡ ´ëÇÑ ºñÆÇÀº AOP°¡ ³Ê¹« ¾î·Æ´Ù´Â °ÍÀÌ´Ù. AOP¸¦ ¹è¿ì´Â °ÍÀº ±âÁ¸ OOP¿¡ ´ëÇÑ ¿Ïº®ÇÑ Áö½ÄÀ» ¹ÙÅÁÀ¸·Î ÇÑ´Ù°í ÇØµµ »ç½Ç »ó´çÇÑ ¹ß»óÀÇ ÀüȯÀÌ ÇÊ¿äÇÏ°í ±× °³³äÀÌ ³­ÇØÇÑ ºÎºÐÀÌ ¸¹´Ù. »õ·Î¿î ¿ë¾îµé¿¡ Àͼ÷ÇØÁö°í ±× Àǹ̸¦ Á¤È®È÷ ÆÄ¾ÇÇÏ´Â °Í ¶ÇÇÑ ¸¸¸¸ÇÑ °ÍÀÌ ¾Æ´Ï´Ù. °Ô´Ù°¡ À̸¦ ±âÁ¸ ¾ÖÇø®ÄÉÀ̼ǿ¡ ¾î¶»°Ô Àû¿ëÇØ¾ßÇÒÁö ±× Àû¿ë ¹æ¹ý°ú ¾ÆÀ̵ð¾î¸¦ ³»´Â °Íµµ ¼ö¿ùÇÏÁö ¾Ê´Ù. ´õ ³ª¾Æ°¡¼­ AOP·Î °³¹ßµÈ ¾ÖÇø®ÄÉÀ̼ÇÀ» º¸°í ÀÌÇØÇÏ´Â °Íµµ ¾î·Á¿òÀÌ ÀÖ´Ù°í ÁöÀûÇÑ´Ù.

ÇнÀ°ú ÀûÀÀÀÇ ¾î·Á¿òÀº OOP°¡ µîÀåÇϰí ÇöÀå¿¡ Àû¿ëµÇ´ø Ãʱâ¿Í ´Ù¸¦ ¹Ù ¾ø´Ù°í »ý°¢µÈ´Ù. ÇÁ·Î½ÃÀú ±â¹ÝÀÇ ÇÁ·Î±×·¡¹Ö¿¡ Àͼ÷ÇÑ °³¹ßÀڵ鿡°Ô °´Ã¼ÁöÇâ ¾ð¾î¿Í °³³äÀº ¸Å¿ì ³­ÇØÇß°í »ó´çÇÑ ½Ã°£ÀÌ Áö³ª±â±îÁö °³¹ßÀÚµéÀÌ ¸Å¿ì ¾î·Á¿öÇß´ø °ÍÀº »ç½ÇÀÌ´Ù. ¾ÆÁ÷µµ OOPÀÇ °³³ä°ú ¿ø¸®¿¡ ´ëÇØ¼­ ¶Ç´Â OOAD¿¡ ´ëÇØ Èûµé¾î ÇÏ´Â °³¹ßÀÚ°¡ ¸¹Àº °Ô »ç½ÇÀÌ´Ù. AOPµµ ¶ÇÇÑ Ãʱ⿡´Â ±×·¯ÇÑ ÀûÀÀÀÇ °úÁ¤ÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ´õ ¸¹Àº °³¹ßÀÚµé°ú À̷а¡µéÀÌ ÃæºÐÈ÷ ±× ±â¼ú°ú °³³ä¿¡ Àͼ÷ÇØÁ®¾ß ÇÒ ½Ã°£ÀÌ ÇÊ¿äÇÒ °ÍÀ̰í, ¶Ç AOP ±â¹ÝÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼³°èÇÏ°í ±¸ÇöÇϴµ¥ ÇÊ¿äÇÑ ´Ù¾çÇÑ ¹æ¹ý·Ð°ú ¼³°è ±â¼úµéÀÌ µîÀåÇÏ°Ô µÉ °ÍÀ̶ó°í º¸¿© Áø´Ù.

¹®Á¦´Â ÈÄÀÚÀÇ °æ¿ìÀε¥ AOP·Î ¸¸µç ÇÁ·Î±×·¥Àº ÇÁ·Î±×·¥ÀÇ È帧À» ÀÌÇØÇϰí ÃßÀûÇϱⰡ ¸Å¿ì Èûµé´Ù´Â ÁÖÀåÀÌ´Ù. ÀÌ´Â AOP¿¡ ´ëÇÑ ¿ÀÇØ¿¡¼­ ºñ·ÔµÈ ÁÖÀåÀ̶ó°í º¸¿©Áø´Ù. ÇÊÀÚ¸¦ Æ÷ÇÔÇØ¼­ ¸¹Àº AOP¸¦ ÀÌ¿ëÇØ¼­ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â °³¹ßÀÚµéÀÇ °øÅëÀûÀÎ ÀǰßÀº AOP¸¦ Àû¿ëÇÑ Èİ¡ ±×·¸Áö ¾ÊÀ» ¶§¿¡ ºñÇØ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±¸¼º°ú Äڵ尡 ±ò²ûÇØÁ³°í ±×·Î ÀÎÇØ Àüü ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÌÇØÇÏ°í ±³À°Çϰí À¯Áöº¸¼öÇϱⰡ ÇÑ°á ½¬¿öÁ³´Ù´Â °ÍÀÌ´Ù. ¹°·Ð AOP´Â ¸Å¿ì ´ÙÂ÷¿øÀûÀ¸·Î ½Ã½ºÅÛÀ» ÀÌÇØÇϰí Á¢±ÙÇϱ⠶§¹®¿¡ ¿ª½Ã ÇØ¼® ¶ÇÇÑ ´ÙÂ÷¿øÀûÀ̾î¾ß ÇÑ´Ù´Â ºÎ´ã°¨ÀÌ ÀÖ´Ù. ´ë½Å¿¡ °¢ Â÷¿øÀÇ µ¶¸³µÈ °üÁ¡¿¡ µû¶ó¼­ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ìÆìº¸°í À̸¦ ÅëÇÕÇØ¼­ »ý°¢ÇÏ´Â ÈÆ·Ã¸¸ µÈ´Ù¸é ÀÌÀü¿¡ ¸¹Àº ´Ù¸¥ Â÷¿øÀÇ ÄÚµåµéÀÌ ¼¯¿©ÀÖ´ø ¶§¿¡ ºñÇØ ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ÀÌÇØ´Â ÈξÀ ¼ö¿ùÇØÁú °ÍÀ̶ó°í ±â´ëµÈ´Ù.

OOP¿ÍÀÇ Ãæµ¹
AOPÀÇ ºñÆÇÀÚµé Áß »ó´ç¼ö´Â AOP°¡ OOPÀÇ Á¤½ÅÀ» ÈѼÕÇϰí OOPÀÇ Áß¿ä ¿øÄ¢À» ±ú¶ß¸°´Ù°í ÇÑ´Ù. ÀÌ ºÎºÐÀº ¾ÆÁ÷µµ ¸¹Àº ³íÀïÀÌ ÁøÇàÁßÀÎ ºÎºÐÀÌ´Ù. ´ëÇ¥ÀûÀ¸·Î AOP´Â OOPÀÇ Ä¸½¶È­¸¦ ±ú¶ß¸®°í °´Ã¼ÀÇ ³»ºÎ¿¡ Á÷Á¢ÀûÀÎ ¿µÇâÀ» ÁÙ ¼ö Àֱ⠶§¹®¿¡ °´Ã¼ÁöÇâÀûÀÎ ÀåÁ¡À» ¼Õ»óÇÏ°í ½Ã½ºÅÛÀ» º¹ÀâÇÏ°Ô ¸¸µç´Ù°í ÇÑ´Ù. ±âÁ¸ÀÇ Å¬·¡½º¿Í ÄÚµåÀÇ ¾î¶² ºÎºÐ¿¡¶óµµ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù´Â ¸é¿¡¼­ À졧 Àϸ®°¡ ÀÖ´Â ÁÖÀåÀÌ´Ù. ÇÏÁö¸¸ AOP°¡ ¾øÀÌ ±×·¯ÇÑ È¾´Ü°ü½É ±â´ÉÀ» ÇÙ½É ¸ðµâ ³»ºÎ¿¡ Á÷Á¢ ÀÛ¼ºÇؼ­ ¾²´Â °ÍÀº °ú¿¬ °´Ã¼ÁöÇâÀÇ ¿øÄ¢¿¡ ¸Â´Â ÀÏÀΰ¡? ±×°Ô ¾Æ´Ï¶ó¸é Çö½ÇÀûÀ¸·Î °´Ã¼ÁöÇâÀûÀÎ ¹æ¹ýÀ¸·Î ±× ºÎºÐÀ» ÇØ°áÇÒ ¼ö ÀÖ´Â È¿°úÀûÀÎ ¹æ¹ýÀ» Á¦½ÃÇØ¾ß ÇÒ °ÍÀÌ´Ù. °á±¹ OOPÀÇ ÇѰè¿Í ¾àÁ¡ÀÌÀÖ´Â °÷¿¡¼­ AOP°¡ Ãâ¹ßÇϱ⠶§¹®¿¡ À̰ÍÀ» ³ë°ñÀûÀ¸·Î µå·¯³»´Â AOP°¡ OOP¿Í Ãæµ¹ÇÏ´Â °ÍÀº ¾î¿ ¼ö ¾ø´Â Çö½ÇÀ̶ó°í º»´Ù.

´Ù¸¸ AOP ¸¸´ÉÁÖÀÇÀÚ°¡ µÇ¾î OOPÀûÀÎ ¹Ù¸¥ Á¢±Ù°ú ¼³°è¸¦ µÞÀüÀ¸·Î ÇÏ´Â °ÍÀº ÁøÁ¤ÇÑ AOP°¡ ¾Æ´Ï¶ó°í »ý°¢µÈ´Ù. AOP°¡ °¡Àå Å« ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â °Í ÁßÀÇ Çϳª´Â °³¹ß¹æ¹ý·ÐÀ» ºñ·ÔÇÑ ¼ÒÇÁÆ®¿þ¾î µðÀÚÀΰú ¾ÆÅ°ÅØÆÃ ºÎºÐÀÌ´Ù. ±âÁ¸ÀÇ BUFD(Big Up Front Design)¿¡ Àͼ÷ÇÑ °´Ã¼ÁöÇâ ¾ÆÅ°ÅØÆ®´Â µô·¹¸¶¿¡ ºüÁö±â°¡ ½¬¿îµ¥ ÀÌ´Â ÃʱâµðÀÚÀÎÀº ¾î´À Á¤µµ±îÁö ÇÏ´Â °ÍÀÌ Àû´çÇÑ °ÍÀÎÁö Ç×»ó °í¹ÎÇϱ⠶§¹®ÀÌ´Ù. ³Ê¹« °úµµÇÑ µðÀÚÀÎÀº ÇâÈÄ ½Ã½ºÅÛÀÇ °³¹ß °úÁ¤À̳ª °³¹ß ÈÄ¿¡ ´õ¿í ¹ßÀüÇϰųª º¯È­Çϴµ¥ Àå¾Ö°¡ µÇ±â ¶§¹®¿¡ Ãʱ⠵ðÀÚÀÎÀÌ ¾îµð±îÁö ³ª¾Æ°¡¾ß ÇÒ °ÍÀΰ¡ Å« °í¹ÎÀÏ ¼ö¹Û¿¡ ¾ø´Ù. ÀÌ·± »óȲ¿¡¼­ AOPÀÇ µµÀÔÀº Ãʱ⠵ðÀÚÀÎÀÇ ºÎ´ãÀ» Å©°Ô ´ú¾î ÁÙ ¼ö ÀÖ´Ù.

ÇÙ½É µðÀÚÀÎÀ» °ÅÀÇ ¼Õ´ëÁö ¾Ê°íµµ ½Ã½ºÅÛ Àü¹Ý¿¡ ¿µÇâÀ» Áִ Ⱦ´Ü °ü½É ¸ðµâÀ» µ¶¸³¼º ÀÖ°Ô °³¹ßÇϰí Àü ½Ã½ºÅÛ¿¡ °ÉÃÄ ÀÚÀ¯·Ó°Ô »ðÀÔ, Á¦°Å°¡ °¡´ÉÇØÁö±â ¶§¹®ÀÌ´Ù. µû¶ó¼­ AOP´Â XP(Extreme Programming) ¹æ½ÄÀ» µû¸£´Â °³¹ßÀڵ鿡°Ô´Â »ó´çÈ÷ ¸·°­ÇÑ ¹«±â°¡ µÇ±âµµ ÇÑ´Ù. µ¿½Ã¿¡ ÀüÅëÀûÀÎ µðÀÚÀÎ ¿ì¼± ¹æ½ÄÀ» ¼±ÅÃÇÑ ¾ÆÅ°ÅØÆ®µé¿¡°Ôµµ ¸¹Àº µµ¿òÀÌ µÇ°í ÀÖ´Â °Íµµ »ç½ÇÀÌ´Ù. ¿©±â¼­ ÇÑ °¡Áö AOP¿¡ ´ëÇÑ ¿ÀÇØ°¡ »ý±â±â ½¬¿îµ¥ AOP°¡ Àß ¼³°èµÇÁö ¸øÇÑ µðÀÚÀÎÀ» ¿ÏÀüÇÏ°Ô ¸¸µé¾î ÁÙ °ÍÀ̶ó´Â ȯ»óÀÌ´Ù. ÀÌ´Â °áÄÚ ±×·¸Áö ¾Ê´Ù. AOP´Â ÀÌ¹Ì Àß ¼³°èµÇ¾î ÀÖ´Â µðÀÚÀÎÀ» ´õ¿í ½¬¿î ¹æ¹ýÀ¸·Î Àû¿ëÇÒ¼ö ÀÖ°Ô ¸¸µé¾îÁÙ »ÓÀÌ´Ù. ÀÌ·± ¸é¿¡¼­ AOP¸¦ ¾´´Ù°í ÇØ¼­ ±âÁ¸ÀÇ OOPÀûÀÎ ¼³°è¿Í Á¢±Ù¹æ¹ýÀ» Æ÷±âÇϰųª °¡º±°Ô ¿©±â´Â °ÍÀº À߸øµÈ ¼±ÅÃÀÌ ºÐ¸íÇÏ´Ù.

AOPÀÇ ¹Ì·¡
AOP´Â °©Àڱ⠾îµð¼­ ¶³¾îÁø ¸¶¹ýÀÇ ¸¸´Éµµ±¸´Â ¾Æ´Ï´Ù. ¿ÀÈ÷·Á ÇöÀå¿¡¼­ °³¹ß¿¡ ¸ÅÁøÇÏ´Â °³¹ßÀÚµéÀÌ ½º½º·Î ±âÁ¸ ±â¼ú°ú ¹æ¹ýÀÇ ¹®Á¦Á¡À» ±Øº¹Çϱâ À§ÇØ Ã£¾Æ³½ °³¹ßÀÚ¸¦ À§ÇÑ µµ±¸ÀÌ´Ù. ¸ðµç ¼ÒÇÁÆ®¿þ¾î ±â¼úÀÌ ´Ù ±×·¸µíÀÌ AOPµµ °á±¹ Á» ´õ È¿°úÀûÀÎ ¹æ¹ýÀ¸·Î ´õ ³ªÀº ǰÁúÀÇ Á¦Ç°À» °³¹ßÇϴµ¥ ±× Á¸Àç °¡Ä¡°¡ ÀÖ´Ù. ÃÖ±Ù¿¡ ºÒ°í ÀÖ´Â POJO ±â¹ÝÀÇ °³¹ß ±â¼úÀÇ ¿­Ç³Àº ÀÌ·¯ÇÑ ±Ùº»ÀûÀÎ ¹®Á¦¿¡ ´ëÇÑ °³¹ßÀÚ ½º½º·ÎÀÇ ¹Ý¼ºÀÌ Çö½Ç·Î ³ªÅ¸³­ °ÍÀÌ´Ù. ¾Æµå¸®¾È Äݸ®¾î´Â POJO ±â¹ÝÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÇ 3´ë ±â¼úÀ» AOP, DI, ¾î³ëº£À̼ÇÀ̶ó°í Çϰí ÀÌ 3°¡Áö°¡ ¾ÕÀ¸·ÎÀÇ ½Ã´ë¸¦ ÁÖµµÇÏ´Â ÇÙ½É °³¹ß ±â¼úÀÌ µÉ °ÍÀ̶ó°í À̾߱âÇÑ´Ù. ÀÌ¹Ì ¾î³ëÅ×À̼ÇÀº ÀÚ¹Ù 5ÀÇ Ç¥ÁØ ±â¼ú·Î ÀÚ¸®¸¦ Àâ¾Ò°í ÀÇÁ¸ »ðÀÔ ¶ÇÇÑ ´Ù¾çÇÑ ÇÁ·¹ÀÓ¿öÅ©ÀÇ Áö¿ø ÇÏ¿¡ ¸Å¿ì ºü¸¥ ¼Óµµ·Î »ç½Ç»óÀÇ Ç¥ÁØ ±â¼ú·Î ÀÚ¸® Àâ°í ÀÖ´Ù. ÀÌÁ¦ AOP°¡ ÁÖ·ù ±â¼ú·Î ÀÚ¸® ÀâÀ» ¶§°¡ ´Ù°¡¿Ô´Ù°í º¸¿©Áø´Ù. AOP¸¦ ÅëÇØ ´õ ³ªÀº ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀ» °æÇèÇÏ´Â °³¹ßÀÚµéÀÌ ±¹³»¿¡µµ ¸¹¾ÆÁö°Ô µÇ±â¸¦ ±â´ëÇØº»´Ù.

* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
°ü·Ã±â»ç
¼ÒÇÁÆ®¿þ¾î ¾÷°è´Â Áö±Ý ¿ø½ºÅ顸½ºÅà ÀüÀ
¾ÖÇÃ, ÀÚ¹Ù ½ÃÅ¥¸®Æ¼ ¾÷µ¥ÀÌÆ® ¹ßÇ¥
°í±âÀâ´Â ¹ý ¾Æ´Â¡¸ÃÖ°íÀÇ IT ÀÎÀ硹±æ·¯³»°Ú´Ù
·¹µåÇÞÀÇ Jº¸½º Àμö ÆÄÀ塸ºò¸®±×·Î À̾îÁö³ª¡¹
½Å»ý ÀÚ¹Ù ±â¾÷, ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛ »ó´ë·Î Á¦¼Ò
¾Æ¿ô¼Ò½º³Ä, ¿ÀǼҽº³Ä? À̰ÍÀÌ ¹®Á¦·Î´Ù
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨í] Çʼö ¾ÆÀÌ...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ì] ÇÁ·Î±×·¡¹Ö...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨è] ¿ëÀ» ¸¸³ª...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ê] ±âº»±â ¾ø...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ë] »õ·Î¿î ½Ã...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨é] ³ª´®°ú ±³...
'ÁÖÃãÁÖÃã ¼Ò´Ï' º¸±ÞÇü Ä·ÄÚ´õ ½ÃÀå »ï¼º ¸Í°ø¡¦À¯Æ©ºê ¸ÂÃãÇü 'VM-MX20C' [00:07:48]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
[ZDNET ¿µ¹®¹æ¼Û]±¸±Û À¥ºê¶ó¿ìÀú '±¸±Û Å©·Ò' º£Å¸¹öÀü °ø°³ [00:01:29]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
¡°À¥ Ç¥ÁØÀº ¹«½¼!¡±¡¦IE8¿¡ ´ë...
°øÀÎÀÎÁõüÁ¦, ¿ì¸®¿¡°Ô ÀÓ¹ÚÇÑ ¹Ì...
³×À̹ö´Â ¿Ö '10´ë ÇØÄ¿'¿¡ ´ç...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
"¾×ƼºêX¿Í °øÁ¸ ¸ð»ö"¡¦±¸±Û, ...
'À§ÇÇ Àǹ«È­' ÆóÁö ºÐÀ§±â·Î¡¦
ÀÎÆ÷¹ðÅ© "IPTV ¸Þ½Ã¡ ¼­ºñ½º...
³ª¿ìÄÞ, DDoS Â÷´Ü ±â¼ú ƯÇã
¡®Àå¾ÖÀÎ À¥ Á¢±Ù¼º ¿ì¼ö±â°ü¡¯ ¼±...
°õTV, PMP ´Ù¿î·Îµå ¼­ºñ½º ...
Ä¿³Ø¼±Æ®ÄÚ¸®¾Æ, ºÐ´ç »õ »ç¹«½Ç·Î...
 
 
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.