개발 저장소/Spring
AOP in Spring
Diger
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