JAN's History
스프링과 JPA를 이용한 웹개발_AOP 본문
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
'스프링' 카테고리의 다른 글
스프링과 JPA를 이용한 웹개발_컨트롤러 구현 (0) | 2024.04.03 |
---|---|
예시를 통해 알아보는 MVC 패턴 총정리 (RequestMapping, addAttribute) (0) | 2024.04.02 |
스프링과 JPA를 이용한 웹개발_스프링MVC (0) | 2024.04.02 |
스프링과 JPA를 이용한 웹개발_의존성 주입 (0) | 2024.04.01 |
스프링과 JPA를 이용한 웹개발_스프링 소개 (0) | 2024.03.31 |