[Áöµð³ÝÄÚ¸®¾Æ]Àü ¼¼°è ÀÚ¹Ù 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¸¦ Àû¿ëÇÏÁö ¾ÊÀº °£´ÜÇÑ °èÁÂÀÌü ó¸® Ŭ·¡½º | | | |
public class AccountTransfer extends AbstractAccountModule {
Logger logger = MyLogger.getLog(¡°accountTransfer¡±);
TransactionManager txManager = new MyDBTransactionManager(TxDefinition.Default);
PersistentHelper persistentHelper = new MyPersistentHelper(Account.class,
DBConst.DBConnectionInfo);
Authentication auth = new LDAPAuthentication();
ErrorHandler errorHandler = MyHandlerFactory.getErrorHandler();
...
public void transafer(Accouno fromAcc, Account toAcc, int amount) {
logger.begin(¡°transfer¡±);
if (auth.checkLoginedUser() == false) {
throw new NotLoginedUserAccessException();
}
if (auth.checkAuthorization() == false) {
throw new AuthorizationFailException();
}
persistentHelper.connectDB();
txManager.beginTransaction();
try {
loadAccount(fromAcc);
loadAccount(toAcc);
lockingAccount(fromAcc);
lockingAccount(toAcc);
// core concern code ---------------------------
if (fromAcc.hasEnoughMoney(amount) == false) {
throw new AccountException(¡°not enough money¡±);
}
fromAcc.withdraw(amount);
toAcc.credit(amount);
// core concern code ---------------------------
unlockingAccount(fromAcc);
unlockingAccount(toAcc);
saveAccount(fromAcc);
saveAccount(toAcc);
txManager.commit();
}
catch(TransasferException e) {
txManager.rollback();
errorHandler.saveAppException(e);
errorHandler.sendErrorNotificationToManager();
logger.exception(e);
throw new BakingRuntimeException(e);
}
catch(PersistentException e) {
logger.exception(e);
errorHandler.sendErrorNotificationToDBA();
throw new BakingRuntimeException(e);
}
finally {
txManager.close();
connectDB.close();
}
logger.end(¡°transfer¡±);
}
...
}
| |
 |
¡ß Áߺ¹µÇ´Â ÄÚµå : º¹»ç&ºÙÀ̱⿡ ÀÇÇØ ¸¸µé¾îÁø ¿©·¯ ¸ðµâ¿¡¼ Áߺ¹µÇ´Â ÄÚµåÀÇ ¹®Á¦Á¡Àº ÀÌ¹Ì Àß ¾Ë·ÁÁ® ÀÖ´Ù. ÇÏÁö¸¸ 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ÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.