1. Spring AOP λ?
AOPλ Aspect Oriented Programming μ μ½μλ‘ κ΄μ μ§ν₯ νλ‘κ·Έλλ°μΌλ‘ λΆλ¦°λ€. κ΄μ μ§ν₯μ μ½κ² λ§ν΄μ μ΄λ€ λ‘μ§μ κΈ°μ€μΌλ‘ ν΅μ¬μ μΈ κ΄μ , λΆκ°μ μΈ κ΄μ μΌλ‘ λλμ΄μ λ³΄κ³ κ·Έ κ΄μ μ κΈ°μ€μΌλ‘ κ°κ° λͺ¨λννκ² λ€λ κ²μ΄λ€.
μλ‘λ€μ΄ ν΅μ¬μ μΈ κ΄μ μ κ²°κ΅ μ°λ¦¬κ° μ μ©νκ³ μ νλ ν΅μ¬ λΉμ¦λμ€ λ‘μ§μ΄ λλ€. λν λΆκ°μ μΈ κ΄μ μ ν΅μ¬ λ‘μ§μ μ€ννκΈ° μν΄μ νν΄μ§λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°, λ‘κΉ , νμΌ μ μΆλ ₯ λ±μ μλ‘ λ€ μ μλ€.
AOPμμ κ° κ΄μ μ κΈ°μ€μΌλ‘ λ‘μ§μ λͺ¨λννλ€λ κ²μ μ½λλ€μ λΆλΆμ μΌλ‘ λλμ΄μ λͺ¨λννκ² λ€λ μλ―Έλ€. μ΄λ, μμ€ μ½λμμμ λ€λ₯Έ λΆλΆμ κ³μ λ°λ³΅ν΄μ μ°λ μ½λλ€μ λ°κ²¬ν μ μλ λ° μ΄κ²μ ν©μ΄μ§ κ΄μ¬μ¬ (Crosscutting Concerns)λΌ λΆλ₯Έλ€.
2. AOP μ£Όμ κ°λ
- Aspect : μμμ μ€λͺ ν ν©μ΄μ§ κ΄μ¬μ¬λ₯Ό λͺ¨λν ν κ². μ£Όλ‘ λΆκ°κΈ°λ₯μ λͺ¨λν
- Target : Aspectλ₯Ό μ μ©νλ κ³³ (ν΄λμ€, λ©μλ ..)
- Advice : μ€μ§μ μΌλ‘ μ΄λ€ μΌμ ν΄μΌν μ§μ λν κ², μ€μ§μ μΈ λΆκ°κΈ°λ₯μ λ΄μ ꡬν체
- JoinPoint : Adviceκ° μ μ©λ μμΉ, λΌμ΄λ€ μ μλ μ§μ . λ©μλ μ§μ μ§μ , μμ±μ νΈμΆ μμ , νλμμ κ°μ κΊΌλ΄μ¬ λ λ± λ€μν μμ μ μ μ©κ°λ₯
- PointCut : JoinPointμ μμΈν μ€νμ μ μν κ². 'Aλ λ©μλμ μ§μ μμ μ νΈμΆν κ²'κ³Ό κ°μ΄ λμ± κ΅¬μ²΄μ μΌλ‘ Adviceκ° μ€νλ μ§μ μ μ ν μ μμ
3. Spring AOP νΉμ§
- νλ‘μ ν¨ν΄ κΈ°λ°μ AOP ꡬν체, νλ‘μ κ°μ²΄λ₯Ό μ°λ μ΄μ λ μ κ·Ό μ μ΄ λ° λΆκ°κΈ°λ₯μ μΆκ°νκΈ° μν΄
- μ€νλ§ λΉμλ§ AOP μ μ© κ°λ₯
- λͺ¨λ AOP κΈ°λ₯μ μ 곡νλ κ²μ΄ μλ μ€νλ§ IoCμ μ°λνμ¬ μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ μμ κ°μ₯ νν λ¬Έμ (μ€λ³΅μ½λ, νλ‘μ ν΄λμ€ μμ±μ λ²κ±°λ‘μ, κ°μ²΄λ€ κ° κ΄κ³ 볡μ‘λ μ¦κ° ..)μ λν ν΄κ²°μ± μ μ§μνλ κ²μ΄ λͺ©μ
3. Spring AOP μ μ©
μ€νλ§ AOPλ₯Ό μ¬μ©νκΈ° μν΄ μλμ κ°μ μμ‘΄μ±μ μΆκ°ν΄μΌ νλ€.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Component
@Aspect
class PerfAspect {
@Around("execution(* com.aop..*.EventService.*(..))")
public Object logPerf(ProceedingJoinPoint pjp) throws Throwable{
long begin = System.currentTimeMillis();
Object retVal = pjp.proceed(); // λ©μλ νΈμΆ μ체λ₯Ό κ°μ
System.out.println(System.currentTimeMillis() - begin);
return retVal;
}
}
'π CS [ComputerScience] > π CS λ©΄μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [7] [@Transactional / AOP] (0) | 2024.02.27 |
---|---|
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [6] [Data Base] (0) | 2024.02.04 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [4] [MSA] (0) | 2024.01.30 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [3] (0) | 2024.01.18 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [2] (0) | 2024.01.17 |