AOP

이은영·2022년 6월 15일
0

웹프레임워크

목록 보기
2/4

1. AOP란?

Aspect Oriented Programming 관점지향 프로그래밍

비즈니스 어플리케이션 개발에 있어서 중요한 2가지 원칙

낮은 결합도 : 코드의 수정 용이, DI를 이용하여 구현 가능
높은 응집도 : 비즈니스 로직 프로그램과 디버그, 예외처리 등의 부가 프로그램을 분리하여 코딩

2. AOP 용어

관심 분리 (Separation of Concerns) : 위에 두개의 관심을 분리할 수 있다면, 실제 비즈니스 로직만 각각의 클래스를 구성할 수 있고, 필요에 따라 넣었다 뺐다 하는 더욱 간결하고 응집도 높은 프로그램을 만들 수 있다. 관심분리 측면에서, OOP(객체지향 프로그래밍)에서는 횡단관심에 해당되는 공통 코드를 완벽하게 독립적인 모듈과 불리해 내는 것이 어려움

횡단 관심(Cross-Cutting Concerns): 메소드마다 공통으로 들어가는 로깅, 예외 처리 등의 코드
핵심 관심 (Core Concerns): 사용자의 요청에 따라 실제로 수행되는 핵심 비즈니스 로직

⭐️ 용어가 중요

  • 조인포인트(Joinpoint) : 클라이언트가 호출하는 모든 비즈니스 로직 메소드(핵심관심영역코드)
    EX. Impl의 모든 메소드, 메서드 호출, 필드 값 변경

  • 포인트컷(pointcut) : 모든 비즈니스 메소드 중, 공통기능(횡단관심 영역의 코드)이 적용되는 메소드
    expression : 표현 execution : 실행

    아래와 예와 같이, id를 다르게 하면서, 여러개의 포인트컷설정

  • 어드바이스(Advice) : 충고, 횡단 관심에 해당되는 공통기능의 코드를 의미, 독립된 클래스의 메소드로 작성, 구현된 어드바이스의 동작유무는 스프링 설정파일에서 결정됨

    • 동작시점은 5가지로 분류
    • 핵심기능에 대해서 언제 공통기능을 적용할지 선택
    • 'before', 'after', 'around', 'after-throwing', 'after-returning'
  • 애스팩트(Aspect) : 포인트컷과 어드바이스의 결합으로 어떤 포인트컷에 대해서 어떤 어드바이스를 실행할지를 결정한다 즉, 애스팩트의 설정에 따라서 aop의 동작 방식이 결정

  • 위빙(Weaving) : 포인트컷으로 지정한 핵심관심 메소드가 호출될때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정
    즉, 횡단관심(CrossCutting)과 핵심관심(CoreConcerns)들이 섞어가면서 프로그램 하는 것

2-1 AOP 적용 전

2-2 AOP 적용 후

3. AOP 엘리먼트

엘리먼트 설정방법에는 XML방식과 어노테이션 방식이 있음
XMl을 이용한 설정방식

 태그(Tag)와 엘리먼트(Element)
   - html코딩을 하다보면, 태그와 엘리먼트라는 용어가 혼재 사용
   - 엘리먼트 = 시작태그 + 내용 + 끝태그로 구성, 시작태그와 종료태그를 묶어서 구성, 속성을 가짐, 중첩가능 등이 특징
   
ex) <h2> 웹프로그래밍실무 <h2> 이 경우에 <h2>태그 전체는 엘리먼트임 

<aop:config>

<aop:config> AOP 설정에 있어서 루트 엘리먼트로 여러개가 올 수 있으며
<aop:config> 하위에 <aop:pointcut><aop:aspect>가 위치할 수 있음
<aop:pointcut>엘리먼트는 포인트것을 지정하기 위해 사용

<aop:pointcut>

<aop:pointcut>엘리먼트는 포인트컷을 지정하기 위해 사용
<aop:config><aop:aspect>의 자식엘리먼트로 올 수 있음
아래와 같이 <aop:pointcut>rk <aop:aspect> 밖에 있으면, 여러개의 <aop:aspect>에 사용될 수 있지만, 
<aop:aspect>의 자식엘리먼트로 <aop:pointcut>가 사용되면, 해당 <aop:aspect>내에서만 사용됨

<aop:aspect>

<aop:aspect>엘리먼트는 애스팩트를 설정하기 위해서 사용
핵심관심의 포인트 컷과 횡단관심의 어드바이스를 결합하기 위해서 사용

애스팩트를 어떻게 사용하느냐에 따라, 위빙에 결과가 달라지기 때문에 중요한 설정임

참고 https://creamilk88.tistory.com/148

profile
성장중인 개발자 (머리속의 생각을 글로 옮기는 연습을 하고 있습니다.)

0개의 댓글