[ Spring ] AOP(Aspect Oriented Programming) 기본개념

AOP(Aspect Oriented Programming)

AOP는 공통 관심(Aspect)사항을 구현한 코드를
핵심 로직을 구현한 코드 안에 삽입하는 것을 의미한다.



예를 들어, 위 처럼 Class A, B, C가 있고, 
각각의 색은 특정 기능을 하는 소스들을 의미한다고 가정하자.
여기서 공통된 소스부분을 같은 색상이라고 보면 된다.
코드가 중복되는 부분이 많다보니 나중에 수정해야할 일이 생기거나 했을 때,
개발 효율이 떨어지는건 당연한 일일지도 모른다.




하지만, AOP에서는 이런 공통된 부분을 관점(Aspect)이라는 모듈로 정의하고,
필요할 때마다 가져다 쓸 수 있도록 하고 있으며, 이것이 AOP의 기본적인 개념이다.

다시 말해, AOP 기법에서는 이러한 핵심 로직을 구현한 코드에서
공통된 기능을 직접적으로 호출하는 형태가 아니라,
AOP 라이브러리를 통해 공통기능을 구현한 코드가 
핵심 로직에 알맞게 삽입되어서 실행되도록 하고 있다.

만약 공통기능을 수정해야하는 상황이 발생하더라도
핵심 로직 코드를 변경할 필요가 없이,
공통된 소스를 변경하고 핵심 로직 코드에 적용만 시키면 된다.



AOP 용어 정리

Advice
언제 공통기능을 핵심 로직에 적용할지를 정의하고 있다.
종 류
설 명
Before Advice
대상 객체의 메서드 호출 전에 공통 기능을 실행
After Returning Advice
대상 객체의 메서드가 예외 없이 실행된 이후에 공통기능을 실행
After Throwing Advice
대상 객체의 메서드를 실행하던 도중에 예외가
발생한 경우에 공통기능 실행
After Advice
예외 발생여부와 관계없이 대상 객체의 메서드 실행 후
공통기능을 실행
Around Advice
대상 객체의 메서드 실행 전, 후 또는 예외 발생 시점에
공통 기능을 실행하는데 사용
Joinpoint
Advice 적용 가능 지점을 의미한다.
메서드 호출, 필드 값 변경 등이 Joinpoint에 해당한다.

Pointcut
실제 Advice가 적용되는 Joinpoint를 나타낸다.
스프링에서는 정규 표현식이나, AspectJ 문법을 이용해 Pointcut을 정의할 수 있다.

Weaving
Advice를 핵심 로직 코드에 적용하는 것을 Weaving이라고 한다.

Aspect
여러 객체에 공통으로 적용되는 기능을 Aspect라고 한다.



Spring에서의 AOP
스프링은 자체적으로 Proxy 기반의 AOP를 지원하고 있다.
따라서, Spring AOP는 메서드 호출 Joinpoint만을 지원한다.

Spring은 세 가지 방식으로 AOP를 구현할 수 있도록 하고 있다.
1. XML 스키마 기반의 POJO 클래스를 이용한 AOP 구현
2. AspectJ에서 정의한 @Aspect Annotation 기반의 AOP 구현
3. Spring API를 이용한 AOP 구현

댓글

이 블로그의 인기 게시물

[SPRING] log4j2.xml 설정

[ MongoDB ] STS에서 MongoDB연동 및 데이터 추출