핵심 기능과 부가 기능
부가 기능 적용 문제
- 부가 기능을 적용할 때 아주 많은 반복이 필요하다.
- 부가 기능이 여러 곳에 퍼져서 중복 코드를 만들어낸다.
- 부가 기능을 변경할 때 중복 때문에 많은 수정이 필요하다.
- 부가 기능의 적용 대상을 변경할 때 많은 수정이 필요하다.
Aspect - 핵심 기능과 부가 기능을 분리
☆ Aspect를 사용한 프로그래밍 방식을 관점 지향 프로그래밍 AOP(Aspect-Oriented Programming) 이라 한다.
☆ AOP는 OOP를 대체용이 아닌 횡단 관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적으로 개발되었다.
AOP 적용 방식
적용 방법
1. 컴파일 시점
2. 클래스 로딩 시점
3. 런타임 시점(프록시)
단점 : 컴파일 시점에 부가 기능을 적용하려면 특별한 컴파일러도 필요하고 복잡
단점 : 자바를 실행 시 옵션( java -javaagent )을 통해 클래스 로더 조작기를 지정해야 하는데, 번거롭고 운영하기 어렵
부가 기능이 적용되는 차이 정리
- 컴파일 시점: 실제 대상 코드에 애스팩트를 통한 부가 기능 호출 코드가 포함된다. AspectJ를 직접 사용
- 클래스 로딩 시점: 실제 대상 코드에 애스팩트를 통한 부가 기능 호출 코드가 포함된다. AspectJ를 직접 사용
- 런타임 시점: 실제 대상 코드는 그대로 유지된다. 대신에 프록시를 통해 부가 기능이 적용된다. 스프링 AOP는 이 방식을 사용
◎ 참고
스프링은 AspectJ의 문법을 차용하고 프록시 방식의 AOP를 적용한다. AspectJ를 직접 사용하는 것이 아니다.
→ AspectJ는 자바 관련 설정 (특별한 컴파일러, AspectJ 전용 문법, 자바실행 옵션)도 복잡하다.
AOP 용어 정리

조인 포인트(Join point)
→ 조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점이라 생각하면 된다. (항상 메소드 실행 지점으로 제한)
포인트컷(Pointcut)
→ 조인 포인트 중에서 어드바이스가 적용될 위치 선별하는 기능 (AspectJ 표현식을 사용해서 지정)
타켓(Target)
→ 어드바이스를 받는 객체, 포인트컷으로 결정
어드바이스(Advice)
→ 부가 기능
ex) Around(주변), Before(전), After(후)
애스펙트(Aspect)
→ 어드바이스 + 포인트컷을 모듈화 한 것 (@Aspect)
어드바이저(Advisor)
→ 하나의 어드바이스와 하나의 포인트 컷으로 구성
위빙(Weaving)
→ 포인트컷으로 결정한 타켓의 조인 포인트에 어드바이스를 적용하는 것
- 컴파일 타임(AspectJ compiler)
- 로드 타임
- 런타임, 스프링 AOP는 런타임, 프록시 방식
AOP 프록시
→ 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다.
'Spring > Advanced' 카테고리의 다른 글
스프링 AOP - 포인트컷 (0) | 2023.08.21 |
---|---|
스프링 AOP 구현 (0) | 2023.08.21 |
@Aspect AOP (0) | 2023.08.21 |
빈 후처리기 (0) | 2023.08.17 |
스프링이 지원하는 프록시 (0) | 2023.08.17 |