π Backend
Spring μ λ¬Έ / 7. AOP
Dongwoongkim
2023. 1. 19. 18:46
1. AOPκ° νμν μν©
EX) λͺ¨λ λ©μλμ νΈμΆ μκ°μ μΈ‘μ νκ³ μΆμ λ
package hello.hellospring.service;
@Transactional
public class MemberService {
/**
* νμκ°μ
*/
public Long join(Member member) {
long start = System.currentTimeMillis();
try {
validateDuplicateMember(member); //μ€λ³΅ νμ κ²μ¦
memberRepository.save(member);
return member.getId();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("join " + timeMs + "ms");
} }
/**
*μ 체 νμ μ‘°ν
*/
public List<Member> findMembers() {
long start = System.currentTimeMillis();
try {
return memberRepository.findAll();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("findMembers " + timeMs + "ms");
} }
}
λ¬Έμ
- νμκ°μ , νμ μ‘°νμ μκ°μ μΈ‘μ νλ κΈ°λ₯μ ν΅μ¬ κ΄μ¬ μ¬νμ΄ μλλ€.
- μκ°μ μΈ‘μ νλ λ‘μ§μ κ³΅ν΅ κ΄μ¬ μ¬νμ΄λ€.
- μκ°μ μΈ‘μ νλ λ‘μ§κ³Ό ν΅μ¬ λΉμ¦λμ€μ λ‘μ§μ΄ μμ¬μ μ μ§λ³΄μκ° μ΄λ ΅λ€.
- μκ°μ μΈ‘μ νλ λ‘μ§μ λ³λμ κ³΅ν΅ λ‘μ§μΌλ‘ λ§λ€κΈ° λ§€μ° μ΄λ ΅λ€.
- μκ°μ μΈ‘μ νλ λ‘μ§μ λ³κ²½ν λ λͺ¨λ λ‘μ§μ μ°Ύμκ°λ©΄μ λ³κ²½ν΄μΌ νλ€.
2. AOP μ μ©
AOP: Aspect Oriented Programming
κ΄μ μ§ν₯ νλ‘κ·Έλλ°.
κ³΅ν΅ κ΄μ¬ μ¬ν vs ν΅μ¬ κ΄μ¬ μ¬ν λΆλ¦¬

package kdo6301.spring0.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class TimeTraceAop {
// μ μ© λ²μ
@Around("execution(* kdo6301.spring0..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable
{
long start = System.currentTimeMillis();
System.out.println("START : " + joinPoint.toString());
try
{
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish-start;
System.out.println("END : " + joinPoint.toString() + " " + timeMs);
}
}
}
@Around μ΄λ Έν μ΄μ μ ν΅ν΄ μ μ©λ²μλ₯Ό μ€μ ν μ μλ€.