서론
java에는 프로그램의 실행 흐름에 관여(공통프로세스)하는 방법이 3가지 Filter, Interceptor, AOP가 있다.
필터와 인터셉트는 서블릿 단위에서 사용되는 기능이며 AOP는 OOP(객체지향설계)를 보완하기 위해 나온 기능이다.
AOP 개요
하나의 소프트웨어를 객체지향으로 설계했다면 각 기능들에는 공통되는 로직이 있을것이다.
이러한 로직(공통 관심사라고 표현하던데 왜 그렇게 이해하기 어려운 단어을 쓸까) 을 분리하는 개념이다.
위 그림이 객체지향프로그래밍으로 설계 되었다면 각 서비스(이체, 출금, 계산)가 프로그래밍 되어 있고 각 서비스의 기능동작을 위한 로깅, 보안, 트랜잭션 코드가 구현되어있을것이다.
이 때 실질적으로 프로그래밍의 기능을 구현하는 서비스를 핵심 관심사라고 하며 그 기능을 서포터해주는 기능들을
횡단 관심사라고 한다. 이 때 각 서비스에선 공통되는 로직(횡단 관심)이 있을것이고, 이를 분리하여 하나의 공통모듈로 작성한것이 AOP라고 한다. 한마디로 AOP는 OOP를 발전시킨 기법이며 AOP의 핵심은 공통 모듈을 분리시켜 해당 소스코드가 다른 외부의 클래스에 존재하다는 것이다.
AOP의 핵심 요소
관점은 구현하고자 하는 횡단 관심사의 기능이다.
결합점의 집합이며 어느 메소드를 대상으로 하는지 결정한다. 클래스 간 매핑시켜주는 역할
위 예시와 같이 Poiontcut어노테이션으로 작성될 함수의 위치를 적고
결합점(Join point)
동작할 특정 시점을 말하며 Advice를 포괄한다.
관점(Aspect)의 실제 구현체, 결합점을 실제로 동작하게 하는 코드
충고는 결합점과 결합하여 동작하는 시점에 따라 before, after, around advice 타입 등으로 구분된다.
- Before advice: joinpoint 전에 수행되는 advice
- After returning advice: joinpoint가 성공적으로 리턴된 후에 동작하는 advice
- After throwing advice: 예외가 발생하여 joinpoint가 빠져나갈때 수행되는 advice
- After (finally) advice: join point를 빠져나가는(정상적이거나 예외적인 반환) 방법에 상관없이 수행되는 advice
- Around advice: joinpoint 전, 후에 수행되는 advice
이렇게 구현, 연결된 관점(aspect)을 통해 생성된 새로운 객체
기존 객체에 관점이 구현되어 만들어진 새로운 객체
대상 객체는 충고(Advice)를 받는 객체,
Spring AOP에서 대상 객체는 항상 프록시 객체가 된다.
이유는 AOP는 런타임 프록시를 사용하기 때문이라고 한다.
런타인 프록시 : 별도의 소스코드 조작없이 프록시를 생성
www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:aop
해당 글은 위 egov, aop문서를 참고하여 작성 함
'JAVA > Spring' 카테고리의 다른 글
[Spring] Gradle build 중 JDK Version 문제 해결 (0) | 2021.05.05 |
---|---|
[Spring] 'POST' not supported 에러 (0) | 2021.05.04 |
[Spring] DI를 사용하는 이유 (0) | 2021.04.28 |
[Spring] 스프링이란? (0) | 2021.04.26 |
[Spring] Mybatis 연동절차 (0) | 2021.04.21 |