AOP (Aspect Oriented Programming : 관점 지향 프로그래밍)

 

 

📌개념

어플리케이션의 기능중에서 핵심기능(로그인,회원가입,계좌이체 등) 과 부가기능(보안,트랜잭션,로깅처리,예외처리 등) 을 분리해서 개발하고자 하는 개발 방법론.

핵심기능에서 부가기능이 필요하면 주입받아서 사용한다.

 

 

 

 

📌기술

AspectJ 이름의 AOP 원천 기술이 존재 (1995년)

Spring에서 AspectJ원천 기술 스킬에서 일부분의 스킬을 채택하고 Spring AOP라고 부름.

외부 라이브러리가 필요하다.

 

외부 라이브러리
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>

 

 

 


 

 

 

용어

 

📌 주입시점 (Join Point)

login 메서드 호출시 ★★★

⇒ 부가기능이 핵심기능에 주입되는 시점은 핵심기능의 메서드를 호출할 때 이다.
     (원천 기술인 AspectJ는 메서드 호출 및 다양한 상황에서도 주입받을 수 있다.)

 

 

 

📌 어떤 메서드 호출시 주입? 표현식 (Pointcut)

login 메서드가 호출될 때 주입하도록
login 메서드가 선택될 수 있게 표현식을 사용해서 알려준다.

@Pointcut ("execution(" * login(..)") ")

https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#aop-pointcuts-examples
교안 p.70

 

 

 

📌 타겟(target)

핵심기능 빈 (부가기능이 주입되는 대상)

 

 

 

📌 aspect

부가기능이 구현된 빈

@Aspect 어노테이션 지정한다.

⇒ 활성화 위해서 <aop:aspectj-autoproxy /> 지정한다.

 

 

 

📌 위빙(weaving)

주입(조인)을 의미한다.

메서드 호출(jointPoint) 시 위빙됨.

 

 

 

📌 부가기능의 실행시점 (advice)

  1. 핵심기능의 메서드호출 전 (before advice) @Before
  2. 핵심기능의 메서드호출 후 (after advice) @After
  3. 핵심기능의 메서드 정상처리시 (afterReturning advice) @AfterReturning
  4. 핵심기능의 메서드 예외발생시 (afterThrowing advice) @AfterThrowing
  5. 핵심기능의 메서드호출전, 호출후, 정상처리, 예외발생시 모두 포함한 경우 (around advice) @Around
xoo | 수진