컴퓨터 지식

[CS] AOP

bornsoon 2024. 11. 5. 11:13
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