개발공부/개념

AOP란

이자드 2022. 9. 3. 00:11

개념

AOP(Aspect Oriented Programming)

언제 왜 쓰는지 알면 된다

 

공통 관심 사항 vs 핵심 관심 사항

 

공통 관심사항과 핵심 관심 사항이 섞여있으면 유지보수가 어렵다

또한 공통의 관심사항을 만들기 어렵고 변경시 모두 변경해야 함

 

AOP는 공통 관심 사항(cross-cutting concern) 과 핵심 관심 사항(core concern) 을 분리하는 것

 

좌측에서 우측으로 변경하는 것을 AOP 를 적용한 것

 

적용

  1. 클래스 범위에 @Aspect 어노테이션
  2. 빈으로 등록 해야함 ⇒@component로 등록 혹은 configuration파일에 @Bean 으로 등록 (보통 후자를 사용한다. 이유는 config 파일에 올리면 특별하니까)
  3. 메서드 범위에서 AOP 어노테이션 사용함

 

AOP 어노테이션

  1. Before(”$pointcut}”)이 어노테이션이 붙은 메소드의 반환값은 void
  2. 지정한 패턴에 해당되는 메서드 실행 전 동작
  3. After(”$pointcut}”)이 어노테이션이 붙은 메소드의 반환값은 void
  4. 지정된 패턴에 해당하는 메서드 실행한 뒤 동작
  5. Around(”$pointcut}”)반환값은 Object여야 한다(지정된 패턴에 해당하는 메서드의 실행 결과를 반환해야 하므로)
  6. 지정된 패턴에 해당하는 메서드 실행 전, 후 모두 동작

 

 

pointcut

와일드 카드

*: 모든 것

…:0개 이상

 

 

excution

특정 메서드를 지정하는 패턴

아래 나오는 표현식 일부 제외하고 execution 으로 대체 가능하다.

execution([접근제어자] 반환타입 패키지.패키지…클래스.메소드(인자))

@Around("execution(public * com.daz_tlog.test.controller.**.**(..)")

 

 

within

클래스 안 메서드 모두 지정

클래스명까지 지정할 수 있음을 유의

@Around(”within(com.daz_tlog.test.controller.*)”)

 

@within

특정 어노테이션 타입을 갖는 객체에 대해서 aop 지정

aop를 적용할 메서드가 있는 클래스 타입을 지정

단, 그 어노테이션의 retention은 class여야함

@withn(org.springframework.stereotype.Controller)

 

this, target

클래스를 상속 받는 하위객체를 지정

하지만 둘은 하위객체가 어떻게 생성에 따라 달라진다. this는 CGLB 기반 프록시로 생성되는 객체를 지정할 때 사용arget는 JDK 기반 프록시를 사용

this(상위 객체 타입) / target(상위 객체 타입)

this(com.pamyferret.impl.TestImpl)
target(com.pamyferret.impl.TestImpl)

 

@target

특정 타입의 어노테이션이 붙어있는 객체를 지정할 수 있는 점에서 @within이랑 똑같이 동작한다.

실제 이 둘의 차이점은 잘 느껴지지 않는다고 하는데, @target은 런타임 때 객체가 일치하는지 확인하므로 해당 어노테이션의 retention이 Runtime이어야 한다.

@target(어노테이션 타입)

@target(org.springframework.stereotype.Repository)

 

@annotation

특정 어노테이션이 붙은 객체에 대해 aop를 적용시킨다.

@annotation(어노테이션 타입)

@annotation(com.daz_tlog.test.AnnotationTest)

 

출처:

https://jung-story.tistory.com/129

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

https://pamyferret.tistory.com/51

'개발공부 > 개념' 카테고리의 다른 글

[용어정리] 오버헤드(overhead) 란?  (0) 2022.06.24
[개념 정리] 트랜잭션 (transaction)  (0) 2022.05.10
http request 구조  (0) 2022.05.09
[0317] 디버깅  (0) 2022.03.17
[0315] 공부  (0) 2022.03.15