부가로직과 핵심기능의 분리를 위해
여러곳에서 사용하는 부가로직 횡단 관심사가 됨
변경 지점은 하나가 될 수 있도록 모듈화되어야 함
부가기능과 부가 기능을 어디에 적용할지 선택하는 기능을 합친 하나의 모듈이 에스펙트다
어드바이저도 어드바이스오 포인트컷을 가지고 있어 개념상 하나의 에스팩트
에스팩트는 관점이라는 뜻 횡단 관심사와 관련 애스팩트를 사용한 방식을 관점지향프로그래밍 AOP다
AOP는 OOP를 대체하는게 아니라 OOP의 부족한 부분을 보조함
에스팩트J는 AOP의 구현으로 스프링도 AOP를 지원하지만 결국 대부분 에스팩트J의 문법을 쓰고 에스펙트J의 일부기능만 지원
횡단 관심사는 오류 검사 및 처리, 캐싱 모니터링, 로깅, 동기화 등
AOP 적용 방식은 3가지 있다
1. 컴파일
2. 클래스 로딩
3. 런타임(프록시)
컴파일 시점
컴파일 타임 - 위빙 (옷감을 짜다) (에스펙트와 코드를 붙임)
.java를 컴파일하면 .class가 만들어지는데 그 사이에 부가 처리 로직을 집어넣어버림 에스팩트J가 제공하는 특별한 컴파일러 사용해야함
컴파일 시점 단점 : 특별한 컴파일러도 필요하고 설정 복잡
클래스 로딩 시점
로드 타임 - 위빙
자바 실행하면 .class를 jvm내부의 클래스 로더에 보관함 이때 .class파일을 조작해서 부가처리로직을 집어넣어버림 바이트코드조작기법 자바 언어는 .class를 jvm내부에 저장하기 전에 조작하는 기능 제공함 모니터링 툴들이 이거 많이 사용
클래스 로딩 시점 단점 : 특별한 옵션으로 클래스 로더 조작기를 지정해야하는데 번거롭고 운영하기 어려움
런타임 시점
런타임 - 위빙
컴파일 끝나고 클래스 로더에 클래스도 다 올라가서 자바 main 메세드가 이미 실행된 다음임 스프링 같은 컨테이너 도움 받고 프록시 DI 빈 포스트 프로세스 총 동원해야함 최종적으로 프록시 통해 빈에 부가 기능 적용 가능
프록시를 사용해서 AOP에 일부 제약이있다는 단점 파이널 불가 상속불가 생성자에 설정불가 대신 설정 안 복잡함
컴파일 : 실제 대상 코드 변경 에스펙트J직접사용
클래스 로딩 : 실제 대상 코드 변경 에스펙트J직접사용
런타임 : 실제 대상 코드 유지 프록시 활용
조인포인트 = AOP적용가능지점
AOP는 생성자 필드값 등등 다할 수 있는데
프록시 방식의 스프링 AOP는 메서드 실행지점에만 AOP 사용 가능
프록시는 메서드 오버라이드 개념으로 동작 생성자 static 필드 값 접근등에 사용 불가
스프링 AOP의 조인포인트는 메서드 실행으로 제한 또한 스프링 빈에만 적용 가능
스프링은 에스팩트J의 문법만 차용하고 프록시 방식이 AOP 적용 에스팩트J 직접 사용 X
조인포인트 = 어드바이스가 적용될 수 있는 위치 = AOP 적용 가능 지점 = 추상적인 개념 = 스프링AOP에서는 항상 메소드 실행 지점
포인트컷 = 조인 포인트중에서 어드바이스가 작용될 위치를 선별하는 기능
에스팩트J 표현식 사용, 스프링 AOP에서는 메서드 실행지점에만 지정가능
타겟 = 어드바이스를 받는 객체, 포인트 컷으로 결정
어드바이스 = 부가기능
특정 조인포인트에서 에스펙트에 의해 취해지는 조치
어라운드 비포 애프터같은 다양한 종류의 어드바이스 있음
에스팩트 = 어드바이스 + 포인트컷 모듈화
@Aspect와 같음
여러 어드바이스와 포인트 컷이 함께 존재
어드바이저 = 하나으 어드바이스와 하나의 포인트 컷으로 구성
스프링 AOP에서만 사용되는 특별한 에스팩트
위빙 = 포인트컷으로 결정한 타겟에 어드바이스를 적용하는 곳
핵심 기능 코드에 영향을 주지 않고 부가기능 추가 가능
AOP 적용 위해 에스팩트를 객체에 연결한 상태
컴파일 타임
클래스 로드 타임
런타임 가능
AOP 프록시
AOP기능을 구현하기 위해 만든 프록시 객체, 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시
'Spring > AOP' 카테고리의 다른 글
| 스프링 AOP 주의점2 - 프라이빗 (0) | 2026.01.23 |
|---|---|
| 스프링 AOP 주의점1 - 내부 호출과 대안 (0) | 2026.01.23 |
| 빈 후처리기와 스프링이 프록시를 등록하는 방법 (0) | 2026.01.23 |
| Aspect (0) | 2026.01.23 |
| 프록시팩토리 (0) | 2026.01.23 |