AOP
AOP : Aspect Oriented Programming의 약자로,
여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법입니다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있게 만들어 줍니다.
AOP는 우리말로 관점지향 프로그래밍 정도로 많이 번역하고 있으나, Aspect는 구분되는 기능이나 요소를 의미하기 때문에, '관점'보다는 '기능 또는 관심'이라는 표현이 더 알맞습니다.
스프링도 프록시를 이용해서 AOP를 구현하고 있습니다.
AOP의 기본 개념은 핵심 기능에 공통 기능을 삽입하는 것입니다. 즉, 핵심 기능의 코드를 수정하지 않으면서 고통 기능의 구현을 추가하는 것이 AOP입니다. 핵심 기능에 공통 기능을 삽입하는 방법은 3가지가 있습니다.
핵심 기능에 공통 기능 삽입하는 방법 3가지
1) 컴파일 시점에 코드에 공통 기능을 삽입하는 방법
- AOP 개발 도구가 소스 코드를 컴파일하기 전에 공통 구현 코드를 소스에 삽입하는 방식으로 동작합니다.
2) 클래스 로딩 시점에 바이트 코드에 공통 기능을 삽입하는 방법
- 클래스를 로딩할 때 바이트 코드에 공통 기능을 클래스에 삽입하는 방식으로 동작합니다.
3) 런타임에 프록시 객체를 생성해서 공통 기능을 삽입하는 방법
1)과 2) 방법은 스프링 AOP에서 지원하지 않으며 AspectJ와 같이 AOP 전용 도구를 사용해서 적용할 수 있습니다. 스프링이 제공하는 AOP방식은 프록시를 이용하는 3) 방식입니다. (널리 사용되는 방법)
프록시 방식은 중간에 프록시 객체를 생성하고, 실제 객체의 기능을 실행하기 전, 후에 공통기능을 호출합니다.
[Spring] AOP 프로그래밍 - 프록시(Proxy) 객체
트랜잭션의 처리 방식을 이해하려면 AOP(Aspect Oriented Programming)를 이해해야 합니다. 제일 어려운 부분이니 자세히 짚어보겠습니다. 이전 요약글 [Spring] AOP 프로그래밍이란 ? AOP(Aspect-Oriented Programmin
muscleking3426.tistory.com
스프링 AOP는 프록시 객체를 자동으로 만들어주므로, 상위 타입의 인터페이스를 상속받은 프록시 클래스를 직접 구현할 필요가 없습니다.
오로지, 공통 기능을 구현한 클래스만 알맞게 구현하면 됩니다.
AOP 주요 용어
Advice | 언제 공통 관심 기능을 핵심 로직에 적용할지 정의 예) 메서드를 호출하기 전(언제)에 트랜잭션 시작(공통 기능) 기능을 적용한다는 것 정의 |
Joinpoint | Advice를 적용 가능한 지점 의미 메서드 호출, 필드 값 변경 등이 해당 스프링은 프록시를 이용해서 AOP를 구현하기 때문에 메서드 호출에 대한 Joinpoint만 지원 |
Pointcut | Joinpoint의 부분집합, 실제 Advice가 적용되는 Joinpoint를 나타낸다. 스프링에서는 정규 표현식이나 AspectJ의 문법을 이용하여 Pointcut을 정의할 수 있다. |
Weaving | Advice를 핵심 로직 코드에 적용하는 것 |
Aspect | 여러 객체에 공통으로 적용되는 기능 예) 트랜잭션, 보안 |
스프링에서 구현 가능 한 Advice의 종류
스프링은 프록시를 이용해서 메서드 호출 시점에 Aspect를 적용하기 때문에 구현 가능한 Advice 종류는 다음과 같습니다.
Before Advice | 대상 객체의 메서드 호출 전 공통기능 실행 |
After Returning Advice | 대상 객체의 메서드가 익셉션 없이 실행된 이후에 공통 기능 실행 |
After Throwing Advice | 대상 객체의 메서드를 실행하는 도중 익셉션이 발생한 경우에 공통 기능 실행 |
After Advice | 익셉션 발생 여부에 상관없이 대상 객체의 메서드 실행 후 공통 기능 실행 try-catch-finally의 finally 블록과 비슷 |
Around Advice | 대상 객체의 메서드 실행 전, 후, 익셉션 발생 시점에 공통 기능 실행하는데 사용 |
이 중에서 널리 사용되는 것은 Around Advice입니다. 이유는 대상 객체의 메서드를 실행하기 전/후, 익셉션 발생 시점 등 다양한 시점에 원하는 기능을 삽입할 수 있기 때문입니다. 캐시 기능, 성능 모니터링 기능과 같은 Aspect를 구현할 때에는 Around Advice를 주로 이용합니다.
'Spring' 카테고리의 다른 글
[Spring] AOP - 프록시 생성방식 (0) | 2024.02.05 |
---|---|
[Spring] Spring AOP 구현해보기 (@Aspect, @Pointcut, @Around) (1) | 2024.02.02 |
[Spring] AOP 프로그래밍 - 프록시(Proxy) 객체 (0) | 2024.01.30 |
[Spring] 빈 객체의 생성과 관리범위 (0) | 2024.01.29 |
[Spring] 빈 라이프 사이클 - 빈 객체의 초기화와 소멸 : 커스텀 메소드 (0) | 2024.01.29 |