본문 바로가기
Spring

[스프링] AOP

by chu_dw 2023. 8. 2.

● 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