AOP에 대한 설명 #197
Replies: 2 comments
-
AOP(Aspect-Oriented Programming)
AOP 용어
공통적인 기능을 모듈화 한 것을 의미
Aspect가 적용될 대상을 의미, 메소드 또는 클래스 레벨에 적용
Aspect 이 적용될 수 있는 시점을 의미, 메소드 실행 전, 후 등
Aspect 기능을 정의한 것으로 메소드 실행 전, 후 예외 처리 발생 시 실행되는 코드를 의미
Advice를 적용할 메소드의 범위를 지정하는 것을 의미 특정 패키지, 클래스, 메소드 이름 또는 정규 표현식을 사용하여 범위를 지정할 수 있음
컴파일 시점, 클래스 로딩 시점, 런타임 시점 중 어느 때에 Advice적용할지 결정하는 프로세스이다. 스프링 AOP는 런타임 시점에 프록시를 생성하여 Advice 적용 AOP 관련 어노테이션해당 클래스를 Aspect 로 사용하겠다는 것을 명시 대상 메서드가 실행되기 전에 Advice을 실행 메서드가 실행된 후에 Advice를 실행
대상 메서드가 정상적으로 실행되고 반환된 후에 Advice를 실행
메서드에서 예외가 발생했을 때 Advice를 실행 메서드 실행 전, 후 또는 예외 발생 시에 Advice를 실행 AOP를 쓰는 이유
아래는 영한님 강의에서 AOP를 적용하는 예시
TimeTraceAop.java @Component
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs +
"ms");
}
}
}
AOP 동작 설명기존 AOP 적용 프록시라는 가짜 스프링 빈을 등록하여 실제 스프링 빈에 DI하기전에 프록시 빈을 거쳐가도록 동작하게됨 번외 스프링 AOP는 JDK 동적 프록시와 CGLIB 프록시를 사용해 AOP를 구현함 |
Beta Was this translation helpful? Give feedback.
-
비즈니스 로직과 같이 애플리케이션의 주목적을 달성하기 위한 관심사를 핵심 관심 사항(Core concern) 이라고 하고 로깅, 보안, 트랜잭션과 같이 공통적인 기능에 대한 관심사를 공통 관심 사항(Cross-cutting concern) 이라고 합니다. AOP는 핵심 관심 사항에서 공통 관심 사항 분리를 목표로 하는 소프트웨어 페러다임입니다.
AOP 관련 용어1. Aspect여러 객체에 공통으로 적용되는 부가 기능을 모듈화한 것을 말하며 Advice와 PointCut을 합친 개념입니다. 2. Advice (what)Transaction, Security, Logging와 같이 각각의 부가 기능을 구현한 코드를 가리킵니다. 3. Target (where)Aspect를 적용할 클래스, 메서드 등을 의미하며 PointCut으로 결정됩니다. 4. JointPoint (when)클래스 초기화, 객체 인스턴화, 메서드 실행 전∙후, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미합니다. 5. PointCutJoinPoint 중에서 Advice를 어디에 적용할지 필터링합니다. 6. WeavingPointCut으로 결정한 Target의 JoinPoint에 Advice를 엮은 것으로, Target에 Aspect를 적용해서 새로운 AOP 객체를 생성하는 과정입니다. 7. AOP ProxyAOP 기능을 구현하기 위해 생성된 프록시 객체이며 Spring 프레임워크에서 AOP Proxy는 JDK Dynamic Proxy 또는 CGLIB Proxy입니다. AOP 적용 방식AOP 적용 방식은 컴파일 타임, 클래스 로드 타임, 런타임 3가지가 있습니다. 하지만 컴파일 타임, 클래스 로드 타임 방식은 AspectJ 프레임워크를 직접 사용해야 하는 번거로움이 있어 주로 런타임 방식인 Spring AOP를 사용합니다. 추가 키워드
|
Beta Was this translation helpful? Give feedback.
-
.
Beta Was this translation helpful? Give feedback.
All reactions