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
'๐ฅ๏ธ Web Development Study > Back-End' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Back-end] ์คํ๋ง ์ ๋ฌธ :: ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ (0) | 2025.01.29 |
---|---|
[Back-end] ์คํ๋ง ์ ๋ฌธ :: ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ (1) | 2025.01.29 |
[Back-End] ์คํ๋ง ์ ๋ฌธ :: ์คํผ๋ง ๋น๊ณผ ์์กด๊ด๊ณ (1) | 2025.01.23 |
[Back-End] ์คํ๋ง ์ ๋ฌธ :: ํ์ ๊ด๋ฆฌ ์์ - ๋ฐฑ์๋ ๊ฐ๋ฐ (0) | 2024.12.25 |
[Back-End] ์คํ๋ง ์ ๋ฌธ :: Spring ์น ๊ฐ๋ฐ ๊ธฐ์ด (0) | 2024.12.22 |