본문 바로가기
웹 개발/Java Spring

AOP( Aspect Oriented Programming), 관점 지향 프로그래밍 이란?

by 동배_ 2021. 8. 5.

AOP란?

AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원한다.

그럼 AOP는 언제 사용해야 할까?

예를 들어서 모든 메소드의 호출 시간을 측정한다고 가정해보자. 그러면 메소드마다

이런 식의 방법으로 하나하나 시간을 재서 호출 시간을 볼 수 있다.

하지만 이런 메소드가 10000개 100000개가 된다면 하나하나 다치다가 정년을 마칠 수도 있을 것이다.

거기다가 유지보수를 할때 매우 불편하다. 시간을 측정하는 요소는 사실 핵심 비지니스 로직도 아니고 또 핵심 비지니스 로직과 섞여버려서 보기도 불편하고 변경을 할 때도 모든 로직을 찾아가야한다.

이러한 문제점을 해결해주는 것이 바로 AOP이다.

간단히 살명하자면 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)의 분리이다.

이렇게 시간 측정 로직이라는 공통된 로직을 분리시켜 핵심 관심 사항을 깔끔하게 유지 할 수 있고

공통된 로직의 변경이 필요하면 이 로직만 변경하기만 하면 된다. 또 이러한 AOP방식을 사용하면

원하는 적용 대상을 선택할 수 있다.(ex) 같은 패키지내에 있는, 특정 클래스 등)

코드 예제를 보자

Spring boot AOP

코드를 통해 제일 처음 구현했던 시간 측정 코드를 분리하여 공통 관심 사항을 만든 것이다. 이떄 AOP의 용어들을 설명한다.

AOP 용어

-Target : 어떤 대상에 부가 기능을 부여하나

-Advice : 어떤 부가기능을 부여하나(Before, AfterRturning,AfterThrowing, After,Around)

-Join point : 어디에 적용할 것인가? (메서드, 필드, 객체, 생성자 등)->스프링에서는 (메서드가 실행될 때를 사용함)

- Point cut : 실제 advice가 적용될 지점, Spring AOP에서는 advice가 적용될 메서드를 선정

ex)"execution(* com.example.hellospring..*(..))" 이런 것들

Spring 에서의 AOP의 동작방식

스프링에서 aop의 동작방식 간단히 그림으로 보자

AOP 적용 전 의존관계

AOP를 적용하기전 스프링 컨테이너에서는 이러한 의존관계를 가진다.

AOP 적용 후 의존관계

memberService라는 타겟클래스를 부가기능을 제공하는 프록시로 감싸서 제공한다.

이때 프록시란 타겟을 감싸서 타겟의 요청을 대신 받아주는 랩핑오브젝트이다. controller가 memberservice를 호출하게 되면 memberservice가 직접 호출되는 것이 아닌 프록시가 호출 되며 타겟 메소드 실행전에 선처리, 터겟 메소드 실행 후, 후처리를 실행시키도록 돼 있다.

이러한 방법은 ioc와 DI를 지원하는 spring에서 가능한 방법이다.

 

AOP에 대해 간단히 알아보았다. AOP는 OOP와 대비되는 기술이 아닌 oop를 좀더 보완시켜주는 그런 존재이며 유지보수 및 생산성을 늘려주는 좋은 기술이다.

참고 자료:

https://www.youtube.com/watch?v=Hm0w_9ngDpM&t=453s

// 우하한 Tech SPRING AOP 설명

'웹 개발 > Java Spring' 카테고리의 다른 글

스프링의 다양한 의존관계 주입방법  (0) 2021.08.07
Spring IOC(역전의 제어)/DI(의존관계 주입)  (0) 2021.08.06
JPA(Spring-Data-JPA)  (0) 2021.08.04
스프링 빈(Spring Bean)  (0) 2021.08.03
MVC와 템플릿 엔진  (0) 2021.08.02

댓글