이번 시간에는 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가 주입된는 것을 확인할 수 있습니다.
이 글은 김영한 님의 스프링 입문 강의를 복습하기 위해 작성된 글 입니다.
'Dev > Spring' 카테고리의 다른 글
[spring-intorduction] 스프링 DB 접근 기술 (0) | 2022.10.07 |
---|---|
[spring-introduction] 회원관리 웹 MVC 개발 (0) | 2022.10.07 |
[spring-introduction] 스프링 빈과 의존관계 (1) | 2022.10.07 |
[spring-introduction] 회원 관리 예제로 백엔드 개발 및 테스트 해보기 (0) | 2022.10.03 |
[spring-introduction] 정적 컨텐츠, MVC와 템플릿 엔진, API 을 활용한 웹 개발 방식 비교 (0) | 2022.10.02 |