JAVA/SPRING 2009. 5. 6. 11:12

Aspect Oriented Programming의 약자로 여러 곳에 흩어져 존재할 수 밖에 없었던 코드를 모듈화 할 수있는 프로그래밍 기법입니다. Aspect라는 것을 사용하요 츠로그래밍을 할 때 특정한 관심사를 가진 코드 부분을 별도의 모듈로 분리함으로써, 기존 객체지향의 강력한 기능(상속, 위임)만으로는 처치가 곤란했던 중복을 제거 할 수 있게 되었습니다.
로깅, 트랜잭션 처리, 모니터링 관련 코드들을 AOP를 적용하여 하나의 Aspect로 모듈화각 가능하므로 서비스계층이나 도메인 계층에서 관련된 코드들의 제거 할수 있습니다. 또 특정 클래스에 종속성을 가지던 현상을 제거 할수 있게 되었습니다.

Spring AOP용어의 정리

Advice : 언제 무엇을 할지 나타냅니다. 즉 애스펙트가 해야하는 작업언제 그 작업을 수행해야 하는지를 정의한 것이 어드바이스 입니다. (실제로 Target 객체에 적용할 일을 나타냄.)

◎ Joinpoint : Advice를 적용할 시점을 말합니다. (생성자 호출, 필드에 접근, 필드의 값 변셩, 메소드 호출등의 시점.) Spring AOP는 메소드 호출 Joinpoint만 지원합니다.

Pointcut : Joinpoint의 부분집합으로 애스펙트가 어드바이스 할 조인포인트의 영역을 좁히는 일을합니다.

Advisor : 하나의 Advice와 하나의 Piontcut을 묶은 것. Aspect는 여러개의 Advice와 Pointcut을 가지고 있는 것을 말합니다. 즉 Advisor도 하나의 Advice와 Pointcut을 가지고 있는 Aspect라고 할 수 있습니다.

Aspect : Advice + Pointcut 
어드바이스와 포인트컷을 합친 것이 애스펙트 입니다. 두가지 정보가 합쳐지면 애스팩트가 무엇을 언제해야할지, 즉 애스펙트에 필요한 모든 정보가 정의됩니다.

Introduction : 기존 클래스의 코드 변경 없이도 새 메소드나 멤버변수를 추가하는 기능입니다.

Target : Advice의 대상이 되는 객체를 말합니다.

Proxy : 프록시 객체
Spring AOP는 Proxy객체를 사용합니다. 프록시는 어드바이스를 타깃 객체에 적용하면 생성되는 객체입니다.

Weaving : Target 객체에 Aspect를 적용하는 과정.
타깃 객체에 애스펙트를 적용해서 새로운 프록시 객체를 생성하는 절차를 위빙이라고 합니다. 애스펙트는 타깃 객체의 조인포인트로 위빙됩니다. 
위빙은 대상 객체의 생애중 컴파일 시점, 런타임 시점, 클래스 로딩 시점에 할 수 있는데, Spring AOP는 런타임시에 동시적으로 Proxy객체를 생성합니다.


Spring AOP의 특징

◎ 자바로 작성한다.

◎ 스프링 애스팩트는 실행시간에 만들어진다. (런타임시에 특정 Target객체의 Proxy객체를 만들어 Aspect로 사용한다.) 
스프링에서 Proxy를 만드는 방법은 두가지가 있는데 인터페이스 기반으로 Proxy를 만드는 방법과 클래스를 기반으로 Proxy를 만드는 방법이 있습니다. 인터페이스를 기반으로 Proxy를 만들때는 JDK의 Proxy클래스를 사용하기 때문에, 별도의 라이브러리를 클래스 패스에 추가할 필요가 없으며, 인터페이스 기반의 코딩으로 보다 유연한 코드 작성이 가능합니다. 반면 클래스 기반 Proxy를 만들 때는 CGLIB 라이브러리를 필요로 하며, 상속을 사용하여 만들 수 없기 때문에 final로 선언된 메소드를 가진 클래스의 Proxy객체를 생성할 수 없습니다.

method joinpoint만 지원한다.
posted by 나는너의힘
: