SPRING

[Spring] AOP란

보겸삼촌 2021. 1. 27. 16:45

이번 포스팅에서는 AOP (Aspect-Oriented Programming) 에 대해서 기술할 것

 

1. AOP란, 

관심사 분리라는 개념을 갖고 객체지향프로그래밍을 통해 더욱 객체지향적으로 만들어주는 기술

  쉽게 말하면, 대상을 바라보는 방향을 바꿔보자는 관점

 

[그림] 핵심기능 관점에서 Service들을 바라본 관점

 

 

 각각의 Service는 핵심기능 관점에서 바라보았을 때, Board, User, XXX , 공통된 요소가 없음. 이런 관점에서는 각각의 Service는 독립적인 각자의 코드를 구현하고 있음. AOP는 이런 관점을 돌려서 부가기능이라는 것에 초점을 두도록 도움

 

 부가기능 관점에서 각각의 Servicebefore(), after()라는 메소드가 공통되는 것을 알 수 있음. , AOP는 기존의 객체지향적인 관점에서 바라보던 것을 다르게 하여 부가기능적인 측면에서 보았을 때, 공통된 요소를 추출하자는 것이 핵심

 

 

[그림] AOP 관점에서 부가기능을 중점으로 바라본 관점

 

 

 이 때, 가로 영역의 공통적인 부분을 잘라내었다고 하여, 크로스 컷팅(Cross-Cutting)이라고 부르기도 함

 

 정리하자면, 객체지향 프로그래밍(OOP)는 비즈니스 로직의 모듈화라고 할 수 있고, 관점지향 프로그래밍(AOP)는 인프라 혹은 부가기능의 모듈화라고 할 수 있음

 

 

결론은,

공통된 기능을 재사용하는 기법

 

 

 

1.1. AOP의 장점

 

  - 어플리케이션 전체에 흩어진 공통기능이 하나의 장소에서 관리됨

  - 다른 Service 모듈들이 본인의 목적에만 충실하고 그 외 사항들은 신경쓰지 않아도 됨

 

 

 

1.2. AOP 용어

 

- Target

    : 부가기능을 부여할 대상, 핵심 기능을 담당하는 Service

 

- Advice

    : 실질적으로 부가기능을 담은 구현체로, Target 객체에 종속되지 않기 때문에 부가기능에만 집중할 수 있음.

     다시 말하면 AdviceAspect가 무엇을 언제할지를 정의함

 

- PointCut

    : 부가기능이 적용될 대상(메소드)를 선정하는 방법을 말함. , Advice를 적용할 Joint Point를 선별하는 기능을

     정의한 모듈

 

- JointPoint

    : Advice가 적용될 수 있는 위치를 말함. 다른 AOP 프레임워크와는 달리 Spring에서 메소드 JointPoint만 제공.

     따라서, 메소드를 가리킨다고 생각해도 무방

 

- Aspect

    : 부가기능 모듈이며, 핵심기능에 부가되어 의미를 갖는 특별한 모듈, 부가될 기능을 정의한 AdviceAdvice

     어디에 적용할지 결정하는 PointCut함께 지님

 

- Proxy

    : Target을 감싸서 Target의 요청을 대신 받아주는 Wrapping 객체.

     Client에서 Target을 호출하게 되면 Target이 아닌 Target을 감싸고 있는 Proxy가 호출되어, Target 메소드를

     실행하기 전에 전처리하고 Target 메소드를 실행하고 후처리를 실행하도록 구성

 

AOP에서 Proxy는 호출을 가로챈 후, Advice에 등록된 기능을 수행한 후 Target 메소드를 호출함.

 

 

 

 

[참고] https://jojoldu.tistory.com/71

'SPRING' 카테고리의 다른 글

[Spring] MVC, 동작원리, 개발순서  (0) 2021.01.27
spring mvc 개념  (0) 2019.07.02
Spring MVC Project 생성 및 설정(2)  (0) 2019.07.02
Spring MVC Project 생성 및 설정(1)  (0) 2019.06.30