본문 바로가기
JAVA

[Spring] AOP (Spring AOP)란?

by HANdeveloper 2022. 9. 2.
Aspect Oriented Programming(AOP)
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고
그 관점을 기준으로 각각 모듈화하겠다는 것

*모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것

EX)

 - 핵심적인 관점 : 우리가 적용하고자 하는 핵심비지니스 로직

 - 부가적인 관점: 핵심로직을 실행하기 위해서 행해지는 DB연결, 로깅, 파일 입출력 등

 

- 위 A,B,C 클래스에서 동일한 색의 선들의 의미는 클래스들에 나타나는 중복되는(비슷한) 메소드, 필드, 코드들이 나타난다는 것
- 이러한 경우 만약 클래스 A에 주황색 부분을 수정해야 한다면 B,C클래스들에 주황색 부분에 해당하는 곳을 찾아가 전부 코드를 수정해야함
- 이런식으로 반복되는 코드를 흩어진 관심사(Crosscutting Concrens)라고 부름
- 이렇게 흩어진 관심사를 AOP는  Aspect를 이용해서 해결
- 위의 사진의 아래쪽을 보면 흩어져 있는 부분들을  Aspect를 이용해서 모듈화시킨 것을 볼 수있음
- 개발자가 모듈화 시킨 Aspect를 사진에서 위에 클래스에 어느 곳에 사용해야 하는지만 정의해주면 됨

 

☞ 결론적으로 Aspect로 모듈화하고 핵심적인 비지니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지

 

주요 키워드
Aspect 여러 곳에서 쓰이는 공통 부분 코드를 모듈화한 것
Target Aspect가 적용되는 곳 (class,method)
Advice - Aspect에서 실질적인 기능에 대한 구현체
- 어떤 일을 해야할 지에 대한 것, 해야할 일들에 대한 정보를 가짐
- 메소드 호출 전/후, Exception 발생할 때, 메소드 호출 후 반환되기 전
Join Point - Advice가 Target에 적용되는 시점
- 메소드 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때 등
- spring에선 메소드 실행 시점을 의미
Point cut Join Point의 상세스펙을 정의한 것
Proxy - 클라이언트와 타겟사이에 투명하게 존재하며 부가기능을 제공하는 object
- DI를 통해 타겟 대신 클라이언트에게 주입되며 클라이언트의 메소드 호출을
  대신 받아서 타겟에 위임하며 이 과정에서 부가 기능을 부여

댓글