만약 모든 메소드의 호출시간을 측정하고 싶다면?
🤔모든 메서드의 시작과 끝에 시간을 호출해 각각 그 값이 차이를 계산...
🔒 problem
시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞이면 유지보수가 어렵다.
시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.
공통 관심 사항(cross-cutting concern): 여러 메서드에 공통으로 적용하고 싶은 기능. 예) 메서드의 시간을 측정하는 로직
핵심 관심 사항(core concern): 핵심 비즈니스 로직과 같이 서비스에서 중심이 되는 기능.
🔑 solution
AOP를 사용하면 된다!
시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.
핵심 관심 사항을 깔끔하게 유지할 수 있다.
변경이 필요하면 이 로직만 변경하면 되고, 원하는 적용 대상을 선택할 수 있다. (@Around 안에 적용 대상 쓰면 됨)