1. AOP : 관점 지향 프로그래밍
  => 쉽게 말해 해당 소스에 있는 코드가 핵심기능을 담당하는지, 공통적인 기능을 담당하는 코드인지를 구분하는 것.
  => 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍.




위의 그림과 같이 하나의 로직안에 공통기능과 핵심기능이 섞여 있는 경우 공통기능의 부분을 따로 분리하여 처리.
즉, 위의 소스의 경우 공통기능 코드가 변경되면 다른 로직부분의 공통기능부분도 모두 수정을 해줘야 하지만 공통기능을 따로 분리하여 처리함으로써 핵심기능(핵심로직) 코드는 수정없이 변경된 공통기능의 코드만 적용하면 됨.



2. AOP 용어 (매우 중요)
  => advice : 공통기능을 구현한 것(클래스)
  => target : advice가 적용될 객체
  => joinpoint : advice가 적용될 지점(target의 메소드)
  => pointcut : 실제로 advice가 적용된 joinpoint (pointcut은 joinpoint의 부분집합)
  => advisor(= aspect) : advice + pointcut
  => weaving : advice를 핵심 로직 코드에 적용하는 것


3. 스프링에서 AOP를 구현하는 방법
  ⓐ 스프링 API를 이용한 AOP 구현
  ⓑ POJO 클래스를 이용한 AOP 구현
  ⓒ AspectJ 5에서 정의한 @Aspect 어노테이션 기반의 AOP 구현


스프링은 프록시를 이용하여 AOP를 구현하며 advisor(= aspect)의 target이 되는 객체에 대한 프록시를 만들어 제공한다. 대상 객체를 사용하는 코도는 대상 객체를 직접 접근하기 보다는 프록시를 통해서 간접적으로 접근하게 됨.
이는 스프링의 설정파일(xml)를 통해서 지정할 수 있으며, 스프링은 설정 정보를 이용하여 런타임에 대상 객체에 대한 프록시 객체를 생성하게 된다.

+ Recent posts