Aspect Oriented Programming은 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법
공통관심사항 (cross-cutting concern)
과
핵심관심사항 (core concern)
으로 나누어서 프로그래밍
- 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 도와준다.
- AOP에서 중요한 개념은 "횡단 관점의 분리 (Separation of Cross-Cutting Concern)"이다.
- OOP (Object Oriented Programming)를 더욱 OOP답게 만들어준다
- 공통관심사항 (cross-cutting concern)
- 공통기능으로 어플리케이션 전반에 걸쳐 필요한 기능
- 예) 로깅, 트랜잭션, 보안 등
- 핵심관심사항 (core concern)
- 핵심로직, 핵심 비즈니스 로직
- 예) 계좌이체, 이자계산, 대출처리 등
AOP 주요 용어
Target object | 하나 또는 그 이상의 Aspect에 의해 Advice되는 객체. 핵심 로직을 구현하는 클래스. |
JoinPoint | 애플리케이션을 실행할 때 특정 작업이 시작될 수 있는 시점을 의미. "클래스가 로드되는 시점", "인스턴스가 생성되는 시점", "메서드 호출 시점" 등이 조인포인트에 해당. 조인포인트는 어드바이스를 적용할 수 있는 시점들. 스프링에서는 프락시 기반 AOP를 지원하기 때문에 메서드 호출 조인포인트만 지원. |
Pointcut | 조인포인트의 부분집합. 실제로 어드바이스가 적용되는 조인포인트들을 의미. 스프링에서는 정규 표현식이나 AspectJ의 문법을 이용하여 포인트컷을 정의. |
Aspect | 여러 객체에 공통으로 적용되는 공통 관심 객체를 의미. |
Advice | 핵심 코드에 삽입되어 동작할 수 있는 공통코드와 시점을 의미. 어드바이스 시점은 before, after, after-throwing, after-returning, around 가 있다. |
Weaving | Advice(공통코드)를 핵심코드에 삽압하는 것을 의미. 스프링은 런타임시 위비을 지원한다. |
스프링에서는 자체적으로 런타임시에 위빙하는 '프록시 기반의 AOP'를 지원하고 있다.
예시코드
public class HelloServiceProxy extends HelloService { // 프록시 클래스 (파이썬의 데코레이터와 유사)
// HelloService 코드를 수정하지 않고 공통관심사인 로그 기능 추가
@Override
public String sayHello(String name) {
HelloLog.log();
String result = super.sayHello(name);
return result;
}
}
728x90
'컴퓨터 지식' 카테고리의 다른 글
[도커] 도커 컴포즈 (0) | 2024.12.28 |
---|---|
[CS] CI / CD (0) | 2024.11.08 |
[CS] 어노테이션과 데코레이터 (1) | 2024.11.01 |
[CS] Spring Framework (0) | 2024.11.01 |
[CS] 제어 반전 (제어 역전 (IoC)) (1) | 2024.10.31 |