스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard
섹션 7. AOP
7.1 AOP가 필요한 상황
MemberService 회원 조회 시간 측정 추가
join()
public Long join(Member member) {
// 회원 조회 시간 측정
// 시작할 때 시간 측정 + 끝날 때 시간 측정 try-finally 문 이용
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");
}
}
findMembers()
// 전체 회원 조회
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");
}
}
문제
7.2 AOP 적용
시간 측정 AOP 등록
package hello.hellospring.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect //aop로 사용하기 위해 필수
@Component // @Component로 사용해도 되지만, spring bean에 등록해서 사용해도 됨
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))") //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");
}
}
}
해결
스프링의 AOP 동작 방식 설명
AOP 작용 전 의존 관계
AOP 적용 후 의존관계
실제 Proxy 주입 확인 - 콘솔에 출력
System.out.println("memberService = " + memberService.getClass());
AOP 적용 전 전체 그림
AOP 적용 후 전체 그림
섹션 8. 다음으로
스프링 완전 정복 시리즈 - 강의 목록
스프링 부트와 JPA 실무 완전 정복 로드맵 - 강의 목록
FIN.
[스프링 핵심 원리 - 기본편] week08 (0) | 2022.09.25 |
---|---|
[스프링 핵심 원리 - 기본편] week07 (0) | 2022.09.18 |
[스프링 핵심 원리 - 기본편] week05 (0) | 2022.09.01 |
[스프링 핵심 원리 - 기본편] week04 (0) | 2022.08.28 |
[스프링 핵심 원리 - 기본편] week03 (0) | 2022.08.18 |
댓글 영역