Spring/Introduction to Spring

AOP 적용

민철킹 2021. 2. 25. 21:04

공통 관심 사항(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