공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리
1. 공통 로직 만들기 (시간 측정)
- @Aspect 애노테이션을 통해 AOP로 사용하겠다는 의미
- @Around 애노테이션을 통해 타켓을 지정해 줄 수있는데 특정 클래스를 지정해줄 수 도 있다.
- 위에서는 hellospring패키지 안의 모든 클래스에 적용해주었다.
- joinPoint.proceed() : 다음 메소드 진행
- joinPoint.toString()을 통하여 어떤 메소드를 call하는지 확인
2. AOP등록
- 스프링 빈으로 등록(@Bean)
- 컴포넌트 스캔(@Component)
- 스프링 빈에 등록해서 쓰는 것을 선호하는 경향임.
- 우리는 컴포넌트 스캔으로 진행
3. 실행
spring을 실행시키고 localhost:8080으로 접속해 회원 목록으로 들어가면 console창에 다음과 같이 호출된 메소드들과 실행시간들이 출력되는 것을 확인 할 수 있다. 호출될 때마다 인터셉팅한다. 이를 활용하여 특정 조건이면 다음 메소드로 넘어가지 않도록 하는 등 개발자가 원하는 작업이 가능하다.
이렇게 console창에 실행시간과 호출 메소드를 출력해본다면 어떤 메소드에서 병목현상이 발생하고 이상이 발생하는지 알 수 있다.
4. 해결
- 회원가입, 회원 조회등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다.
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.
- 핵심 관심 사항을 깔끔하게 유지할 수 있다.
- 변경이 필요하면 이 로직만 변경하면 된다.
- 원하는 적용 대상을 선택할 수 있다.
* AOP 적용 전 의존관계
* AOP 적용 후
반응형
'Spring > Introduction to Spring' 카테고리의 다른 글
AOP (0) | 2021.02.24 |
---|---|
Spring Data JPA (0) | 2021.02.24 |
jpa (0) | 2021.02.22 |
JdbcTemplate (0) | 2021.02.20 |
스프링 통합 테스트 (0) | 2021.02.20 |