반응형

[광고 누르면 오늘의 행운 상승!!]

Aspect Oriented Programming

  • AOP는 관심사의 분리를 통해서 소프트웨어의 모듈성을 향상시키고자 하는 프로그래밍 패러다임
  • 소스코드 레벨에서 관심사의 모듈화를 지향하는 프로그래밍 방법이나 도구를 포함한다.

횡단관심

횡단관심(Cross-cutting concern)은 어플리케이션의 다양한 관점(point)에 영향을 미치는 기능

객체지향 개념의 상속과 위임

  • 상속은 어플리케이션을 통해 사용되는 동일한 기반 클래스라는 깨지기 쉬운 객체 계층 구조를 사용하게 됨
  • 위임은 위임 객체로의 복잡한 호출이 필요할 수 있기 때문에 다루기 어려움

Aspect-oriented

  • 많은 환경에서 더 명확해질 수 있는 상속과 위임의 대안으로 사용됨
  • AOP를 사용해서 한 곳에 공통된 기능을 정의하며, 새로운 특성을 적용하려는 클래스를 변경하지 않고 해당 기능을 어떻게 어디에 적용할지를 선언적으로 정의함
  • Cross-cutting concern은 aspect라고 하는 특별한 객체로 모듈화가 가능함

장점

  • 각각의 관심사(concern)에 대한 로직은 코드 여기저기에 모두 흩어져있는 것과는 반대로 한 군데에 모여있음.
  • 서비스 모듈들은 주요 관심사(concern) (혹은 핵심 기능)에 대한 코드만을 포함하고 부수적인 관심사(concern)는 aspect로 옮겨지기 때문에 더 명확해짐

Aspect

  • 횡단관심사의 동작과 그 횡단관심사를 적용하려는 소스 코드에서의 위치를 모아 둔 것
  • 하나 이상의 Advice(동작)과 Pointcut(동작을 적용하는 조건)을 조합한 것

JoinPoint

  • Advice가 실행하는 동작을 끼워 넣을 수 있는 때를 의미한다..
  • 스프링에서는 메소드가 호출될 때와 메소드가 원래 호출한 곳으로 돌아갈 때가 어드바이스를 끼워 넣을 수 있는 조인포인트이다.

Advice

  • Joinpoint에서 실행되는 코드
  • 보안, 로깅, 트랜잭션 관리 등의 코드가 기술된다.

Pointcut

  • Pointcut은 Joinpoint와 Advice의 중간에 있으면서 처리가 조인포인트에 이르렀을 때 Advice를 호출할지 선별한다.

Java로 작성되는 Spring의 advice

  • Sprint내에서 생성되는 모든 advice는 일반적인 Java클래스이다.
  • AspectJ는 Java를 확장한 언어로 구현한다.
  • AOP에 특화된 언어를 사용하는 것은 세밀하게 aspect를 적용하거나 AOP도구를 사용한다는 장점이 있지만, 새로운 도구와 언어의 문법을 배워야 하는 단점이 있다.

Spring의 실행시 advice 구성

  • Aspect들은 Spring이 관리하는 빈(bean)에 실행 시 proxy 클래스와 함께 감싸서 (wrapping) 구성됨

스프링은 메소드 Jointpoint만을 지원한다.

  • 스프링은 동적 proxy를 기반으로 하므로 메소드 joinpoint만을 지원하며, 세밀한 advice를 구성을 할 수 없다.
  • AspectJ나 Jboss의 경우 생성자 joinpoint나 필드 joinpoint를 추가로 지원한다.
  • 스프링은J2EE의구현에 대한 프레임워크를 제공하는데 초점을 맞추기 때문에 메소드 interception 만으로도 충분하다.
  • 그 이상의 기능은 AOP가 필요하면 AspectJ와 Spring AOP를 통합해서 사용해야 함

 

반응형

+ Recent posts