π₯οΈ Web Development Study/Back-End
[Back-end] μ€νλ§ μ λ¬Έ :: AOP
ibelieveinme
2025. 1. 29. 23:05
728x90
*AOP(Aspect Oriented Programming)
: κ³΅ν΅ κ΄μ¬ μ¬ν(cross-cutting concern)κ³Ό ν΅μ¬ κ΄μ¬ μ¬ν(core concern)μ λΆλ¦¬νλ κ².
λͺ¨λ λ©μλμ νΈμΆ μκ°μ μΈ‘μ νκ³ μΆμ λ
νμ κ°μ μκ°, νμ μ‘°ν μκ°μ μΈ‘μ νκ³ μΆμ λ
1. νμ κ°μ , νμ μ‘°ν μκ° μΈ‘μ νκΈ°(μΌμΌμ΄)
import com.yoonsung.firstproject.domain.Member;
import com.yoonsung.firstproject.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
// νμκ°μ
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.print("join Time: " + 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.print("findId Time: " + timeMs + "ms");
}
}
...
}
ν¨μ νλνλμ try finally λ¬ΈμΌλ‘ μκ° μΈ‘μ νκΈ°.
ν΅μ¬μ½λμ κ³΅ν΅ μ½λκ° μμ΄κ³ μ€λ³΅ μ½λκ° λ§μ΄ λ°μνλ€.
2. κ°μ :: 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(* hello.hellospring..*(..))")
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 + "ms");
}
}
}
λ©μλ νΈμΆν λλ§λ€ jointPoint κ° intercept ν΄μ νΈμΆλλ€.
Spring bean μ λ±λ‘ν΄μ£Όκ±°λ Component μ€μΊμΌλ‘ λ§λ€κΈ°. Spring beanμ΄ λ κ°μμ μΈ ννμ΄λΌ μ νΈλλ€.
728x90