AOP
관점 지향 프로그래밍으로서 공통된 로직을 추출하여 메소드의 다양한 시점에 실행할 수 있게 해줄수 있으며, 코드를 줄여주고, 개발자가 공통 로직을 배제하고 핵심 관심사에 집중할 수 있도록 해준다.
AOP란?
좋은 개발환경의 주요 원칙은
개발자가 비즈니스 로직에만 집중할 수 있게 한다
는 것이다이 목표를 위해 몇가지 중요한 원칙이 있지만, 가장 쉽게 생각할 수 있는 것은
반복적인 코드의 제거
라고 할 수 있다스프링 프레임워크는 이러한 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공한다
대부분의 시스템이 공통적으로 가지고 있는 보안, 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는
횡단 관심사 (cross-concern)
이라고 한다스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하다
AOP
는 이러한횡단 관심사를 모듈로 분리
하는 프로그래밍의 패러다임이다
AOP 기법에서는
핵심 로직을 구현한 코드
에서공통 기능
을 직접적으로 호출하지 않는다핵심 로직을 구현한 코드를
컴파일
하거나, 컴파일 된 클래스를로딩
하거나, 로딩한 클래스의객체를 생성
할 때 AOP가 적용되어 핵심 로직 구현 코드안에 공통 기능이 삽입된다공통 기능이 변경되더라도 핵심 로직을 구현한 코드를 변경할 필요가 없다
AOP의 장점
개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고,
각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화 시킬 수 있고,
원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다
AOP 용어
Target
핵심 기능을 담고 있는 모듈로, 부가 기능을
부여할 대상
이 된다
Advice
타겟에 제공할
부가기능
을 정의Advice의 종류
Around
Target의 method가 호출되기 이전(before) 시점과 이후(after) 시점에 모두 처리해야 할 필요가 있는 부가기능을 정의한다
Joinpoint 앞과 뒤에 실행돠는 Advice
Before
Target의 method가 실행되기 이전(before) 시점에 처리해야 할 필요가 있는 부가기능을 정의
Joinpoint 앞에서 실행되는 Advice
After Returning
Target의 method가 정상적으로 실행된 이후(after) 시점에 처리할 필요가 있는 부가기능을 정의
Jointpoint method 호출이 정상적으로 종료된 뒤에 실행되는 Advice
After Throwing
Target의 method가 예외를 발생한 이후(after) 시점에 처리해야 할 필요가 있는 부가기능을 정의
예외가 throw 될 때 실행되는 Advice
JoinPoint
어드바이스가
적용
될 수 있는 위치타겟 객체가 구현한 인터페이스의 모든 method는 조인 포인트가 된다
Pointcut
어드바이스를
적용할 타겟
의메서드를 선별
하는 정규표현식Advice를
어디에 적용할지
를 결정!
포인트컷 표현식은
execution
으로 시작하고, method의signature
를 비교하는 방법이 주요 사용된다
Weaving
Pointcut에 의해서 결정된 target의
jointpoint
에 부가기능 (advice
)를삽입
하는 과정을 뜻한다Weaving은 AOP가
핵심기능 (target)
의 코드에영향
을 주지 않으면서 필요한 부가기능 (advice
)를추가
할 수 있도록 해주는 핵심적인 처리과정이다
Aspect
AOP의 기본 module
Aspect = Advice + Pointcut
Aspect는 singleton의 형태의 객체로 존재한다
AOP 개념을 적용하면 핵심기능 코드 사이에 침투된 부가기능을
독립적인 aspect
로 구분해 낼 수 있다구분된 부가기능 aspect를 runtime 시에 필요한 위치에 동적으로 참여하게 할 수 있다
Advisor
Advisor = Advice + Pointcut
Advisor는 Spring AOP에서만 사용되는 특별한 용어이다
Last updated