관리 메뉴

JAN's History

스프링과 JPA를 이용한 웹개발_AOP 본문

스프링

스프링과 JPA를 이용한 웹개발_AOP

JANNNNNN 2024. 4. 2. 12:10

AOP(Aspect-Oriented Programming)

애플리케이션의 관심사를 분리하여 모듈화하는 기술입니다.

이를 통해 횡단 관심사(cross-cutting concerns)와 핵심 비즈니스 로직을 분리함으로써 코드의 가독성, 재사용성, 유지 보수성을 향상시킵니다.

Transfer, Withdraw, Loan 이 3가지의 핵심 비즈니스 로직(=Coe Concerns)이 있다고 가정했을때 그

3가지에는 모두 Logging, Security, Transaction이 3가지의 부가기능이 모두 공.통.적으로 존재합니다.

그래서 이 비즈니스 로직은 위와같이 분리할 수 있습니다. (=cross-cutting concerns) 

➡️이것을 AOP라고 합니다

AOP의 주요 구성 요소는 아래와 같습니다.

Aspect(관점): 관심사의 모듈화된 단위로, 횡단 관심사를 정의한 것입니다. 보통 로깅, 보안, 트랜잭션 관리 등이 Aspect로 구현될 수 있습니다.

Advice(조언): Aspect가 특정 지점에서 실행할 코드를 정의한 것입니다. Advice에는 다음과 같은 종류가 있습니다.

  • Before advice: 메소드 실행 전에 실행되는 코드를 정의합니다.
  • After returning advice: 메소드가 예외 없이 정상적으로 반환될 때 실행되는 코드를 정의합니다.
  • After throwing advice: 메소드가 예외를 던질 때 실행되는 코드를 정의합니다.
  • After (finally) advice: 메소드가 실행된 후 항상 실행되는 코드를 정의합니다.
  • Around advice: 메소드 실행 전후에 실행되는 코드를 정의하며, 메소드 실행을 제어할 수 있습니다

➡️ AOP를 사용하면 횡단 관심사를 분리하여 모듈화할 수 있고, 이로 인해 코드의 가독성과 유지 보수성이 향상되며, 중복 코드를 줄일 수 있습니다. 주요 AOP 프레임워크로는 스프링 AOP, AspectJ 등이 있습니다.

 

Joinpoint

Joinpoint(결합점): 코드 실행 중 Aspect가 적용될 수 있는 지점입니다. 메소드 호출, 예외 발생 등이 Joinpoint에 해당합니다.

 

여태까지 나온 용어 정리!

Aspect : Cross-cutting concern을 모듈화한 것

  • @Aspect 어노테이션과 함께 사용

Join point : AOP가 적용될 대상 (메소드)

Advice : Join point에서 AOP가 적용되는 시점

Pointcut: AOP가 적용될 메소드를 표현하는 마치 정규식과 유사한 표현식

  • 정의한 aspect가 모든 메소드에 적용하게 할 수도 있고, 특정 패키지 하위에 적용하고 싶을 도 있기 때문에 그것들을 선별해서 적용하는 것!

예시

getEmployeeNameFromId()에 AOP를 적용하고 싶다면?

 

Weaving

메소드를 aspect에 넣을 때 링크되는 것을 부르는 말 

Run time(RTW):스프링이 사용하는 방법

AOP 정리

Advice : cross-cutting concern을 어디에 넣을 지 지정해주는 것

  • before, around..

JoinPoint, PointCut : Advice가 실행되고 난 후 Core concern이 실행되는데, 실행될 수 있는 core conern을 joinPoint라고 하지만, 모든 메소드가 cross-cutting concern을 실행할 것은 아니기 때문에 그것을 선별하는 것이 PointCut이다 최근에는 excutive보다 어노테이션으로 하는 방법이 선호된다.

  • 위에서는 getAge와 getName이니까 get*~ 이런식으로 사용하면 된다.

Aspect : Advice + PointCut을 포함하고 있는 것

  • @Aspect