Published 2022. 5. 19. 18:37
728x90

AOP가 필요한 상황

  • 모든 메소드의 호출 시간을 측정하고 싶을 때

  • 공통 관심사항 vs 핵심 관심사항

  • 회원 가입 시간, 회원 조회 시간을 측정하고 싶을때


문제 1.

  • 회원가입에서 시간을 측정하는 기능은 핵심 관심 사항이 아니다.

  • 시간을 측정하는 로직은 공통 관심 사항이다.

  • 시간측정 <-> 핵심로직의 코드가 겹쳐서 유지보수가 힘들다.

  • 시간을 측정하는 로직을 공통 로직으로 만들기 어렵다.


해결 1. By AOP

핵심 개념 : 공통 관심사항 (Cross-cutting concern) vs 핵심 관심사항(Core concern) 분리

  • 시간 측정 로직을 한 곳으로 모으고 -> 필요할 때 가져다 쓰도록

AOP는 특수한 목적이기 때문에

@Component로 빈등록해주는것보단

Config에 직접 빈등록을 명시해 주는것이 좋음

메서드 실행 시 중간에 메서드를 인터셉트를 하여 추가 기능을 수행할 수 있도록 한다.


AOP 동작방식

AOP 적용 전 의존관계

Controller -> memberService

AOP 적용 후 의존관계

Controller -> [프록시 memberService -> joinPoint.proceed()-> 실제 memberService]

AOP 를 빈등록하면 컨트롤러가 가짜 서비스(프록시 memberService)를 호출하여 joinPoint를 실행하고

호출이 끝난 후 실제 memberService를 호출하게된다.

728x90
복사했습니다!