반응형

AOP

 

AOP가 필요한 상황

 

  • 모든 메서드의 호출 시간을 측정하고 싶다면?
  • 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)
  • 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?

 

우선, 제일 간단한 방법으로,
join() 메서드의 실행시간을 측정해보자.

System.currentTimeMillis();

이것을 사용하면 밀리세컨드로 받을 수 있다.

그리고 로직이 끝날 때, 시간을 찍어야 하는데, 예외가 터져도 찍어야 하므로,
try-finally를 사용했다.

실행시간은 finish - start 로 구해서 찍어주었다.

통합테스트로 돌려보았더니,

이렇게 찍힌다.

모든 메서드의 실행시간을 측정해야 하므로, findMembers() 에도 동일하게 작성해주자.

위와같이 작성해주었다.

findMembers는 서버를 직접돌려서 확인해보자.

서버를 돌리고, localhost:8080 에서 회원 목록을 누르면,
로그에 findMembers의 실행시간이 찍힐 것이다.

이렇게 찍혔다. 두번째하니까 속도가 조금 빨라졌다. (처음에 올리면 클래스 메타데이터 등등을 로딩하느라 좀더 오래걸린다)

 

이렇게 작성하면 여러가지 문제가 있다.

 

문제

  • 회원 가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다.
  • 시간을 측정하는 로직은 공통 관심 사항이다.
  • 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.
  • 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
  • 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.

 

따라서 이러한 상황에는 AOP를 적용해서
공통 관심사항(cross-cutting concern)과 핵심 관심 사항(core concern)을 분리해줘야 한다.

 

다음 시간에는 AOP의 적용에 대해 알아보자.

 

반응형