이번 시간에는 AOP가 필요한 상황에 대해 알아보고 시간을 호출하는 기능을 AOP를 적용해 구현해보겠습니다.

AOP가 필요한 상황

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

다음과 같은 문제가 발생합니다.

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

 

AOP 적용

  • AOP: Aspet Oriented Programming
    • 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리
  • @Aspect, @Component로 시간 측정 AOP를 등록합니다.
    •  AOP는 특이한 케이스이기 때문에 보통 config에서 스프링 빈을 등록해줍니다.
    • Around를 통해 원하는 적용 범위를 설정하여 AOP를 적용할 수 있습니다.

AOP를 사용하여 위의 문제를 해결합니다.

  • 회원가입, 회원 조회 등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다.
  • 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.
  • 핵심 관심 사항을 깔끔하게 유지할 수 있다.
  • 변경이 필요하면 이 로직만 변경하면 된다.
  • 원하는 적용 대상을 선택할 수 있다.

 

스프링의 AOP 동작 방식

  • Proxy라는 기술을 써서 동작, DI를 통해 가능

AOP 적용 전 의존관계

AOP 적용 후 의존관계

AOP 적용 전 전체 그림

AOP 적용 후 전체 그림

콘솔을 보면 Proxy가 주입된는 것을 확인할 수 있습니다.


이 글은 김영한 님의 스프링 입문 강의를 복습하기 위해 작성된 글 입니다.

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

+ Recent posts