정리/Spring
[Spring] 스프링 입문 7) AOP
민발자
2023. 10. 15. 23:00
728x90
스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술
Session 7 AOP
1. AOP가 필요한 상황
1) AOP가 필요한 상황
회원가입과 같은 로직은 핵심 관심사항, 시간 측정과 같은 로직은 공통 관심 사항이라고 함
공통 관심 로직이 핵심 비즈니스 로직과 섞이면 유지보수가 어렵다.
공통 관심 로직을 별도의 공통 로직으로 만들기 매우 어렵고 로직을 변경할 때 모든 로직을 찾아가며 변경해야함
▶ 이러한 문제점을 해결하기 위해 AOP를 적용
2. AOP적용
1) AOP(Aspect Oriented Programming)
공통 관심사항과 핵심 관심 사항을 분리
2) 시간 측정 AOP 작성
@Aspect // AOP 적용
@Component // 스프링 빈으로 등록하기위해 componentScan방식 사용
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))") // AOP를 어디에 적용할 것인지 타게팅
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");
}
}
}
3) 동작 방식
프록시 기술로 컨테이너에 가짜 멤버 서비스 빈을 만들어 진짜 멤버 서비스 앞에 등록
joinPoint.proceed()통해 실제 멤버 서비스를 호출할 수 있음
컨트롤러가 호출하는 것은 가짜 멤버 서비스
728x90