Spring AOP (Aspect Oriented Programming)

2010. 8. 19. 00:14plming/Java - Spring

  객체 지향 프로그래밍(OOP: Object Oriented Programming)이 비즈니스 업무에 대한 확장성과 독립성을 가능하게 함으로서 유지보수성을 좋게한 것은 사실이지만, OOP 이전의 절차적 프로그램에서 나타나던 Logging, Exception처럼 비즈니스 로직과는 관계없는 코드들이 핵심적인 비즈니스 로직을 담당하는 소스코드와 함께 애플리케이션 전체 영역에 걸쳐서 중복된 소스코드가 존재하고 있기 때문에 Logging, Exception 정책이 바뀔 경우 개발자들이 소스를 일일이 찾아서 수정해줘야하는 번거로움을 감수할 수 밖에 없었던 한계점을 극복하기 위한 대안으로 등장한 것.

  AOP는 OOP와 경쟁관계에 있는 것이 아니라 상호 보완적인 관계로 새롭게 등장한 패러다임이다.  그러므로 AOP는 지금까지의 개발 방식인 OOP 기반하에서 OOP가 가지고 있는 문제점을 보완하여 이와 같은 한계점을 극복하고, Spring 프레임워크에 트랜잭션과 같은 컨테이너 기능을 지원하기 위한 목적으로 AOP 기능을 지원한다.


- AOP에서 새롭게 등장한 용어

Joinpoint : 특정 작업이 실행되는 시점
Advice : 실질적인 비즈니스 로직을 구현하고 있는 Core에 추가적인 기능을 제공하는 것
Pointcut : 분리된 기능들을 결합시키기 위한 규칙(패턴)
Aspect : Advice와 Pointcut을 합쳐서 일정한 패턴을 가지는 클래스에 Advice를 적용하도록 지원할 수 있는 것
Weaving : 분리된 기능들을 하나로 결합시키는 것을 의미.
               분리하여 개발된 기능들을 weaving하는 작업을 도와주는 것이 AOP 툴
Target : 핵심 비즈니스 로직을 구현하는 클래스


[출처] http://www.javajigi.net/pages/viewpage.action?pageId=6619146
[출처] Spring 프레임워크 워크북