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