본문 바로가기
Study/Spring Korea

Spring In Action - 3.1 AOP소개

by epro 2007. 4. 1.

AOP가 필요한 이유?
애플리케이션 전체에 걸쳐 흩어져 있던 기능을 한 곳(애스펙트)에 작성할 수 있다.

3.1 AOP소개
횡단(cross-cutting)관심사의 모듈화와 관련이 있다. (보안, 트랜잭션, 기타..)
횡단관심사는 애스팩트(aspect)라고 하는 특별한 객체로 모듈화된다.
#에스팩트의 이득
1) 각 관심사에 대한 로직이 한 장소에서 관리된다.
2) 애플리케이션 고유의 서비스 모듈이 명확해진다.

[3.1.1] AOP 용어 정리
aspect : 구현하고자 하는 횡단 관심사의 기능을 말함(로깅이 대표적)
joinpoint : aspect를 플러그인할 수 이는 애플리케이션의 실행 지점을 말한다. (메소드시작끝,예외 등)
advice : aspect의 실제 구현체
pointcut : advice가 어떤 joinpoint에 적용돼야 하는지를 정의함
introduction : 기존의 클래스에 새로운 메소드나 속성을 추가함(wow~ surprise~!)
target : advice를 받는 클래스
proxy : target에 advice가 적용된 후 생성되는 객체를 말함
weaving : aspect를 target에 적용하여 새로운 프록시 객체를 생성하는 과정을 말함(컴파일시, 클래스 로딩시, 런타임 시 발생할 수 있음)

[3.1.2] 스프링의 AOP 구현
#스프링의 advice는 자바로 작성한다
 => pointcut은 xml로 작성된다.
 
#스프링의 객체에 대한 advice는 runtime시에 이뤄진다
 => 애플리케이션이 프록시 빈을 필요로 하기전까지는 프록시 객체를 생성하지 않음.
     고로, 특별한 컴파일러는 필요하지 않다.
    * 프록시 클래스 만드는 2가지 방법?
    target이 특정한 메소드들을 공개하는 인터페이스를 구현한다면 : java.lang.reflect.Proxy클래스 사용    
    target이 어떤 인터페이스를 구현하고 있지 않다면 : CGLIB[각주:1] 라이브러리를 사용

#스프링은 AOP 연맹의 인터페이스를 구현한다.
 => 다양한 자바 AOP 구현체 사이에 상호호환성을 제공하기 위해 자바의 AOP인터페이스를 표준화 하는 것이 목적

#스프링은 메소드 joinpoint만 제공한다.
  => AspectJ나 JBoss는 필드 결합점도 제공.
       스프링의 철학은 필드 가로채기가 캡슐화를 위반하는 것으로 여긴다.

더 공부할 것 : 프록시 클래스 만드는 2가지 방법

  1. CGLIB는 오픈소스이며, 고성능의 코드 생성 라이브러리다. 자세한 정보는 http://cglib.sourceforge.net/ 참조. [본문으로]

댓글