Home » SPRING -3. AOP

SPRING -3. AOP

3.1. AOP (Aspect Oriented Programming: 관점 지향 프로그래밍)

  • AOP의 필요성은 실제 개발에서 OOP(Object Oriented Programming:객체지향 프로그래밍)대로 프로그래밍 하더라도 모듈을 분리된 상태로 개발하기 힘든 경우가 발생하면서 생겨났다.
  • 간단한 홈페이지를 만든다고 했을 때 OOP에 맞춰 프로그래밍하면 회원관리, 게시판 관리 등의 기능들이 각각의 클래스나 컴포넌트로 구성된 모듈로 개발된다.
  • 각각의 모듈이 하는 역할은 다르지만, 트랜젝션이나 로깅 등의 공통 적으로 쓰이는 기능을 처리하려면 각 모듈마다 동일한 (혹은 유사한) 소스 코드가 추가 되어야 한다.
    image013

  • 이때 회원관리, 게시판 등의 시스템의 구현하려는 기능의 관심 영역을 핵심관심이라 하고, 공통적으로 적용하려는 트랜젝션이나 로깅등의 기능을 횡단관심이라 한다.

  • AOP는 문제를 해결하는 핵심 관심과 전체 적용하는 공통 사항을 분리해서 프로그래밍 함으로써, 공통 모듈을 여러 코드에 적용 가능하다.
  • 이를 통하여 트랜젝션이나 로깅등의 공통적으로 쓰이는 기능을 분리하여 여러 모듈에 적용할 수 있다.

[ AOP 구성요소 ]

명 칭 설 명
JoinPoint Crosscutting Concerns 모듈이 삽입되어 동작할 수 있는 실행 가능한 특정 위치.
PointCut 어느 JoinPoint를 사용할 것인지를 결정하는 선택하는 기능.
Advice 각 JoinPoint에 삽입되어져 동작할 수 있는 코드.
[동작 시점]
– Before : Matching된 JoinPoint 전에 동작하는 Advice이다.
– AfteReturning : Matching된 JoinPoint 종료 후에 동작
– AfterThrowing : Exception이 발생하여 Matching된 JoinPoint가 종료된 후에 동작
– After : Matching된 JoinPoint 종료 후에 동작
– Around : Matching된 JoinPoint 전 후에 동작하며 JoinPoint 실행 시점을 결정할 수 있다. 또한 다른 Advice와는 달리 입력값 target object, return 값 등에 대한 변경이 가능하다
Weaving(CrossCutting) 모듈의 코드를 직접 건드리지 않고 필요한 기능이 작동하도록 하는데 필요한 작업.
Aspect 어디에서(Pointcut) 무엇을 할 것인지(Advice)를 합쳐놓은 것.

3.2. Test Code 작성

  • Aspect를 사용하여 Controller 호출의 시작과 끝에 로그를 남기는 예제를 작성한다.

[ pom.xml ]

  • Maven 설정 파일에 Aspect를 사용하기 위한 lib 추가.

[ ControllerLogAspect.java ]

  • AOP에 사용할 Aspect 클래스.
    • @Aspect : @Aspect 을 사용하여 Aspect를 생성한다.
  • xml을 사용할 경우 [ servlet-context.xml ] 파일에 아래와 같은 설정을 통해 bean을 등록한다.

  • @Component(“controllerLogAspect”) : @Component를 사용하여 bean 등록
  • @Before(“execution(* kr.co.ahope..controller.Controller.(..))”) : @Before를 사용하여 메소드 동작전에 시행한다. 실행조건은 kr.co.ahope..controller형태를 가지는 패키지 아래에 Controller로 끝나는 클래스의 모든 메소드의 시행이다.
  • @After(“execution(* kr.co.ahope..controller.Controller.*(..))”) : @After를 사용하여 메소드를 메소드 동작 후 시행한다. 조건은 위와 같다.

[ servert-context.xml ]

  • @Aspect를 사용하기 위한 Spring 설정

  • Log 결과 확인