● AOP 개요
AOP정의를 위한 기본 용어
- 관심사 : 어플리케이션 개발 위한 구현 기능들
- 횡단 관심사 : 여러 모듈에 걸쳐 공통저이고 반복적으로 필요로하는 처리 내용
- 횡단 분리 관심사 : 횡단 관심사를 한 곳으로 모으는 것
AOP 정의
- Aspect Oriented Programming : 관점 지향 프로그래밍
- 여러 비지니스 모듈에서 공통으로 사용되는 횡단 관심사를 중심으로 설계, 개발하는 프로그래밍 기법
- 횡단 관심 모듈을 각각 독립괸 모듈로 중복 없이 작성하고, di 설정 통해 핵심 관심모듈 적합한 위치에 결합
AOP 목적
- 횡단 관심사와 이에 영향 받는 일반 객체 간 결합도를 낮춘다.
- di와 차이 : di는 의존관계 빈들의 결합도 줄임
AOP 장점
- 전체 코드에 흩어져 있는 관심사들이 하나의 장소로 응집됨
- 기타 비지니스 모듈들은 본질적인 핵심 기능만 기술
- 공통 관심사는 공통 모듈로 옮겨 코드 깔끔
AOP 주요 용어
- Advice : 조인 포인트에 삽입되어 실행되는 코드
- Join Point : Advice 적용 가능한 지점들
- Pointcut : 수많은 Join Point 중에서 실제 적용될 지점들
- Aspect(Advisor) : 공통 관심사의 추상적 명칭
- Target : 횡단 관심사를 적용 받게 되는 대상, 어드바이스가 적용되는 객체
- Introduction : Target에 없는 새로운 멧드나 인스턴스 변수드를 추가하는 것
- Weaving : Advice와 Target이 결합되어 proxy 만드는 과정
- Proxy : Advice가 적용되었을 때 만들어지는 객체
스프링이 제공하는 Advice 유형

스프링 AOP 설계 방식
- 프록시 패턴 방식 통해 구현
- 객체를 직접적으로 참조하는 것이 아닌, 객체를 대행하는 프록시 객체를 통해 대상에 접근
- 핵심코드의 프록시를 만들어서 핵심코드엔 영향없이 프록시에서 aop적용

● AOP 구현
(정리한거 필요할거 같은디....)
xml을 이용한 구현
- Aspect 클래스를 하나 만들어 Aspect 설정을 해준다.
-> Aspect 클래스의 각 메서드들이 advice
-> JoinPoint를 통해 메서드 명과 인수 값 접근 (어떤 메서드인지, 포인트컷은 di설정으로)
- di 설정 : applicationContext에 설정을 해준다.
-> Aspect id를 지정하고 위에서 만든 빈으로 주입 받은 aspect클래스를 연결시킨다.
-> point-cut id 를 지정하고 excution을 이용해서 사용할 메서드를 연결한다.

Annotation을 이용한 구현
- Aspect 클래스에서 애노테이션 이용해 포인트컷, 어드바이스를 설정 해준다.
-> applicationContext에는 <aop:aspectj-autoproxy>로 애노테이션 적용
- Annotation 종류
-> @Aspect : 해당 클래스 aspect 설정임을 알려줌
-> @Before @After @AfterReturning @Arround : Advice 선언
-> pointcut 여기서도 excution 사용

'Spring' 카테고리의 다른 글
| [스프링] Security (0) | 2023.08.05 |
|---|---|
| [스프링] 트랜잭션 (0) | 2023.08.04 |
| [스프링] MyBatis (0) | 2023.08.01 |
| [스프링] REST 아키텍처 (0) | 2023.08.01 |
| [스프링] mvc 패턴 (0) | 2023.07.04 |