일단 기선님의 AOP를 설명하는 그림 두 장을 보자.
AOP 적용 전, AOP 적용 후



무엇인고 하니.. 예를 들어 메소드의 수행 시간을 확인할 일이 있다고 하자.
그럼 일일히 하나하나 메소드에 시작과 끝 부분에 ms를 구하고 그 차이를 구하고 하는 방법이
바로 첫 번째 그림이다.

그걸 AOP를 사용하면 2번째 그림처럼 된다. 어떻게 이런 일이? 소스코드를 수정하지 않고
메소드에 저런 마법이 가능하단 말인가!!!!!!?????

그것은 바로 AOP(Aspect-Oriented Programming)의 마법이다!
AOP에 대해선 다음 글을 읽어보자

1. IBM 개발자네트워크의 Aspect-Oriented Programming: AOP에 대한 실제적 접근방식

2. 다음 dna의 기술노트  AOP 용어들과 DynamicProxy를 사용한 간단한 예제 - 구준근(기술위원회 PiLab팀), 2006년 11월
(요게 각종 개념들은 아주 쉽게 정리되어있다.)


http://dna.daum.net/wiki/imgs/custom/aop.jpg
  • Target : 주가 되는 비지니스 로직을 구현하고 있는 클래스를 말합니다.

  • JointPoint : Target 즉, 주가 되는 비지니스 로직을 가지는 인스턴스에 이벤트가 발생하는 시점을 말합니다.
    예를 들면 인스턴스가 생성되거나, 인스턴스의 특정 메소드가 호출되는 시점 또는 Exception이 발생하는 시점 등이 예가 됩니다.

  • Advice : target의 주된 비지니스 로직에 추가로 실행되어질 로직이 구현된 부분 입니다.

  • PointCut : Target의 JointPoint에 Advice를 결합하기 위해서 필요한 패턴을 말합니다.

  • Weaving : Target에 Advice 기능을 결합시키는 것을 말합니다. JAVA JDK에서는 1.3 버전부터 reflect API를 사용한
    DynamicProxy 클래스를 지원하여 부분적인 AOP를 구현하고 있으며, AspectJ 등의 툴은 바이너리 파일을 재 컴파일하여 AOP를 완벽히 지원하고 있습니다.

  • Aspect : Target의 JointPoint에 Advice 기능이 Weaving 되어 Target에 주된 비지니스 로직에 Advice 기능을 지원할 수 있도록 하는 완성된 클래스 입니다.


좋은 자료들을 봤으니 이해가 쏙쏙 될 것이다.
즉, 스프링의 AOP를 사용하면 DB의 트랜잭션 처리나, 로깅 등을 설정을 통해 수행할 수 있게 된다.
소스코드를 적지 않고도!

일일히 메소드에 정의하지 않고
죄다 어딘가 정의해놓으면 간단히 된다는 사실!!









 

Posted by 시난
TAG ,

댓글을 달아 주세요