관리 메뉴

제뉴어리의 모든것

[Section2] [Spring Core] Spring Framework의 핵심 개념 - AOP - 1 (용어) 본문

코드스테이츠/정리 블로깅

[Section2] [Spring Core] Spring Framework의 핵심 개념 - AOP - 1 (용어)

제뉴어리맨 2022. 8. 18. 17:12

사전 지식

  • AOP
    AOP는 아래에서 설명하겠지만, 관심사항과 부가적인 관심사항을 나눠서 프로그래밍을 하는 기법일 뿐이다.
    특정 라이브러리나 프레임워크 같은것을 말하는것이 아니다.
    자바나 스프링에 종속된 기술도 아니다. 다른 언어, 다른 프레임워크에도 존재하는 개념이다.

  • Spring AOP
    AOP를 지원하는 방법은 여러가지가 있지만, 그 중 스프링에서 지원하는 AOP 방식을 말한다.
    Spring AOP에서는 프록시를 이용하여 AOP를 지원한다.

  • AspectJ
    스프링 AOP를 지원하는 여러 소프트웨어 중에 하나이다.
    하지만 거의 표준처럼 많이 쓰이는 소프트웨어로 Spring AOP에서도 AspectJ를 부분적으로 이용하여 AOP가 구현되었다.

    출처 : https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=235242


 

AOP(Aspect-Oriented Programming)란?

관심(관점) 지향 프로그래밍이란 뜻으로, 전체 로직을 핵심 관심사항과 비핵심관심사항(공통관심사항)으로 나눠서 각각의 관심사항을 모듈화 하는 프로그래밍.

쉽게말해서, 비즈니스 로직과 비즈니스 로직이 아닌 로직을 따로 분리하여 코딩하겠다는 것이다.

예를들면, 쇼핑몰 웹앱이 있다고 했다고 했을때.

해당 앱에서 필요한 로직은 회원가입, 상품 구매, 정산로직 등등이 있을것이다.

우리의 사업 내용을 구현한 내용이라고 할 수 있다.

그러나 사용자의 로그, 각각의 로직의 성능을 테스트하는 코드와 같은 것들은 사업 내용을 구현한 비즈니스 로직은 아닐것이다. 이렇게 비즈니스 로직인것과 아닌 것을 합쳐서 코딩하는것이 아니라, 따로따로 코딩을 하는 방법을 말한다.

 

AOP의 필요성

이렇게 AOP를 적용하여 분리된 핵심 관심사항과 비핵심 관심사항의 코드는 유지보수에도 용이하고, 코드도 깔끔하고 직관성이 뛰어나기 때문이다.

쉽게 생각하자. 완벽한 예는 아니지만.

만약 한 백과사전에 동물의 대한 내용과 식물의 대한 내용이 모두 섞여 있다면 동물이나 식물의 특정 종을 찾을때 어떻겠는가? 차라리 동물사전 따로 식물사전 따로 존재하는것이 특정 종에 대해 찾는것이 빠르지 않겠는가. 

그런 원리다.

 

AOP 용어

  1. 애스팩트(Aspect)
  2. 어드바이스(Advice)
  3. 조인 포인트(join point)
  4. 포인트컷(Pointcut)
  5. 타겟 (Target)
  6. AOP 프록시(proxy)
  7. 위빙(Weaving)
  8. 어드바이저(Advisor)

 

1. 애스팩트(Aspect)

핵심로직과 분리된 비핵심로직(공통관심사항) 모듈들을 지칭하는 말이다.

객체지향 프로그래밍에서 각각의 모듈을 오브젝트라고 하듯이, 관심 지향 프로그래밍에서 공통관심사항을 애스팩트락로 할 뿐이다.

애스팩트는 어드바이스 + 포인트컷 으로 구성되어 있다.

2. 어드바이스(Advice)

어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.
공토관심사항인 실질적으로 처리기능의 코드를 말한다.

EX : 로그를 남기를 로직, 로직 수행시간 측정 로직

 

3. 조인 포인트(join point)

  • 클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미합니다.
  • 애플리케이션에 새로운 동작을 추가하기 위해 조인포인트에 관심 코드(aspect code)를 추가할 수 있습니다.
  • 횡단 관심은 조인포인트 전/후에 AOP에 의해 자동으로 추가됩니다.
  • 추성적인 개념이고 AOP를 적용할 수 있는 모든 지점이라 생각하면 됩니다.
  • 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한됩니다.
  • 어드바이스 적용이 필요한 곳은 애플리케이션 내에 메서드를 갖습니다.

어드바이스가 적용될 수 있는 지점을 말한다.

Spring AOP는 그 지점이, AOP를 적용시키도록 지정된 범위(포인트컷)내의 존재하는 메소드들이라고 할 수가 있다.
단순하게 말하면, Spring AOP에서는 어드바이스가 적용될 메소드들을 말한다.

 

4. 포인트컷(PointCut)

  • 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능입니다.
  • AspectJ 표현식을 사용해서 지정합니다.
  • 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능합니다.

쉽게 말해, 어드바이스를 적용할 조인포인트의 범위를 말한다.

조인포인트는 어드바이스가 조인되는 지점!

포인트컷은 그 포인트(지점)의 커트라인!

 

 

5. 타켓

부가기능을 부여할 대상.

Spring AOP를 예를 들어 설명하면,조인포인트(메소드)를 가지고 있는 클래스 객체를 말한다.

 

 

 

6. AOP 프록시

타겟을 감싸서 타겟의 요청을 대신 받아주는 랩핑(Wrapping) 오브젝트입니다.
타겟(핵심 관심사항을 가진 객체) + 어드바이스(공통 관심사항) 로 이루어진 오브젝트라고 할 수 있다.

프록시란 개념은 AOP에 종속된 개념이 아니라 기존에 존재하던 개념이다.ㅇㅏ

 

 

7. 위빙(Weaving)

지정된 객체에 애스팩트를 적용해서 새로운 프록시 객체를 생성하는 과정.

 

 

8. 어드바이저(Weaving)

  • 하나의 어드바이스와 하나의 포인트 컷으로 구성됩니다.
  • 스프링 AOP에서만 사용되는 특별한 용어입니다.

 

 

참조 : https://jojoldu.tistory.com/71