본문 바로가기

Java/자바 기반 웹 개발자 과정 필기

[200622.81일차] Spring 11 - AOP

반응형
더보기

AOP (Aspect Oriented Programing)

=> 관점 지향 프로그램

=> 관심사의 분리(기능의 분리), 핵심적인 기능에서 부가적인 기능을 분리

=> AOP는 부가기능을 애스펙트(Aspect)로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬수 있도록 도와주는 개념

=> 실제 핵심 로직(Core Concern)을 수행하면서 발생하는 횡단 관심사 (CrossCutting Concerns) 를 한데 모아 처리하는 것을 AOP

  • 핵심 기능(Core Concerns) : 업무 로직을 포함하는 기능
  • 횡단 관심사(Cross-cutting Concerns) : 부가기능. 핵심 기능을 도와주는 부가적인 기능(로깅, 보안)
  • 애스펙트(Aspect) : AOP의 기본 모듈. 공통기능. 애스펙트는 싱글톤 형태의 객체로 존재. 여러 객체에 공통으로 적용되는 관심 사항. 보안, 트랜잭션, 로깅등이 대표적인 예. 부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용하지를 결정하는 포인트컷(PointCut)을 합친 개념. Advice + PointCut = Aspect
  • 타겟(Target) : 핵심 로직을 구현하는 클래스 또는 객체 AOP를 적용하여 Advice를 받을 대상을 의미하는 단어. 핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 된다.
  • 어드바이스(Advice) :  Aspect의 기능 자체. 어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다. 횡단 관심사로 분리 된 로직에 대한 코드를 Aspect로 분리 되어 실행 시, 위빙되어 구체적인 처리를 하는 로직을 일컫는 단어
  • 어드바이저(Advisio) : 어드바이스 + 포인트컷. 어드바이저는 Spring AOP에서만 사용되는 특별한 용어.
  • 조인포인트(Join Point) : 횡단 관심사로 분리 된 로직이 끼어들 수 있는 (조인할 수 있는) 위치 또는 시점. 어드바이스가 적용될 수 있는 위치를 말한다. 타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다. 스프링에서는 메소드가 해당한다.
  • 포인트 컷(Pointcut) :  어드바이스를 적용할 타겟의 메서드를 선별하는 정규 표현식이다. 공통으로 적용할 조인트 포인트를 표현식 같은 기능을 사용하여 하나로 묶어내는 역할을 한다. 실제 어드바이스코드가 적용될 지점을 의미하는 단어. 포인트컷 표현식은 execution으로 시작하고 메서드의 Signature를 비교하는 방법을 주로 이용한다. 
  • 위빙(Weaving) : 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능(어드바이스)를 삽입하는 과정을 뜻함. Advice 코드를 핵심 로직의 Point cut에 적용하는 것을 의미. Advice로 분리한 코드를 핵심 로직에 다시 합치는 일. 위빙은 AOP가 핵심기능(타겟)의 코드에 영향을 주지 않으면서 필요한 부가기능(어드바이스)를 추가할 수 있도록 해주는 핵심적인 처리과정. 런타임 시 Proxy로 생성하며 코드를 합치는 방법과 컴파일 또는 클래스 로드 시 바이트 코드를 조작하여 실제 코드를 끼워 넣는 방법이 있다. 

 


pom.xml에 아래 코드 넣기

<!-- AOP -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.6</version>
</dependency> 
<dependency> 
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.6</version>
</dependency>
<!-- AOP cglib -->
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.2</version>
</dependency>

CoreClass

CommonClass

applicationAOP_ex01

MainClass

실행 결과


CoreClass

CommonClass

=> @Before : @Around 실행 전에 실행

applicationAOP_ex02.xml

MainClass & 실행 결과


Pointcut을 지정할 때 사용하는 표현식으로 Aspectj 문법을 사용한다.

public void 인 모든 get 메소드 포함 매개변수 ( . . ) 0개 이상의 모든 것 excution(public void get*(..))
com.care.aop_ex01패키지 하위 패키지에 파라미터가 없는 모든 메소드
excution(* com.care.aop_ex01..*.*())
com.care.aop_ex01.CoreClass 안의 모든 메소드 excution(* com.care. aop_ex01.CoreClass.*())
com.care.aop_ex01패키지 안의 모든 메소드 within(com.care. aop_ex01.*)
com.care.aop_ex01패키지 및 하위 패키지 안에 있는 모든 메소드 within(com.care. aop_ex01..*)
com.care.aop_ex01.CoreClass 안의 모든 메소드 within(com.care. aop_ex01.CoreClass)

 


spring08 프로젝트에 해당 코드들 추가

pom.xml

servlet-context.xml

Test

실행 결과

페이지를 이동할 때 마다 컨트롤러가 불러짐 => 출력문이 실행


12_spring_AOP_QUIZ.pdf
0.17MB

반응형