본문 바로가기

IT 개념

Spring AOP (Aspect-Oriented Programming)(관점지향 프로그래밍)

계속해서 수 많은 개념들이 나오고 있습니다..

그럴 때마다 그냥 넘어가고 싶지만, 지금 잘 알아둬야 나중에 후회할 일이 없을 것 같습니다.

저에게든, 제가 개발한 프로그램 혹은 웹을 사용할 사용자든, 동료에게든.

https://jojoldu.tistory.com/71?category=635883

AOP 정리 (3)

AOP란? Spring의 핵심 개념중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다. AOP (Aspect-Oriented Programming)..

jojoldu.tistory.com

Spring 이 DI(의존성 주입) 가 애플리케이션 모듈 간의 결합도를 낮춰주는 것처럼

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

핵심기능의 입장에서 바라본 관점(Aspect)

각각의 Service 를 핵심기능에서 바라보았을 때 Board, User, XXX 등 공통된 요소가 없습니다.

이런 관점에서 각각의 Service는 각자 코드를 구현하고 있습니다.

그런데 이 관점을 부가기능 의 관점에서 바라보면 달라집니다.

부가기능의 입장에서 바라본 관점(Aspect), AOP를 Cross-Cutting 이라고 합니다.(가로영역 잘라냄)

부가기능의 관점에서 바라보면 각각의 Service는

수행시간 측정을 나타내는 before라는 메소드와 after라는 메소드가 공통됩니다.

기존에 OOP(객체지향적 프로그래밍)에서 바라보던 관점(Aspect)를 다르게 하여

부가기능 적인 측면에서 보았을 때 공통된 요소를 추출하자는 것입니다.

※ OOP : 비지니스 로직의 모듈화, 모듈화의 핵심 단위는 비지니스 로직

※ AOP : 인프라 혹은 부가기능의 모듈화, (로깅,트랜잭션, 보안 등)

즉, 공통된 기능을 재사용하는 기법이 AOP 인 것입니다.

OOP 에선 공통된 기능을 재사용하는 방법으로 상속이나 위임을 사용하지만, 전체 어플리케이션에서

여기저기에서 사용되는 부가기능들을 상속이나 위임으로 처리하기에는 깔끔하게 모듈화가 어렵습니다.

그래서 이 문제를 해결하는 것이 AOP 입니다.

[AOP의 장점]

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

- 다른 서비스 모듈들이 본인의 목적에만 충실하고 그 외 사항들은 신경쓰지 않아도 된다는 점

[AOP 용어]

1. 타겟(Target)

1) 부가기능을 부여할 대상을 얘기

2) 그림에서는 getBoards, getUsers, getXXXs 등을 의미함

2. 애스펙트(Aspect)

1) 객체지향 모듈을 오브젝트라 부르는 것과 비슷하게 부가기능 모듈을 애스펙트라고 부르며

핵심기능에 부가되어 의미를 갖는 특별한 모듈

2) 부가될 기능을 정의한 어드바이스(Advice)와

어드바이스를 어디에 적용할지를 결정하는 포인트컷(PointCut)을 갖고 있음

3. 어드바이스 (Advice)

1) 실질적으로 부가기능을 담은 구현체

2 ) 타겟 오브젝트에 종속되지 않기 때문에 순수하게 부가기능에만 집중할 수 있다.

3) 어드바이스는 애스펙트(Aspect)가 '무엇'을 '언제'할지를 정의한다.

4. 포인트컷 ( PointCut )

1) 부가기능이 적용될 대상(메소드)를 선정하는 방법

2) 즉, 어드바이스를 적용할 조인포인트(JoinPoint)를 선별하는 기능을 정의한 모듈

5. 조인포인트 ( JoinPoint )

1) 어드바이스(Advice)가 적용될 수 있는 위치

2) 다른 AOP 프레임워크와 달리 Spring 에서는 메소드 조인포인트(JoinPoint)만 제공

3) 따라서, 스프링에서는 조인포인트(JoinPoint)라하면 메소드라 생각해도 무방

6. 프록시 ( Proxy)

1) 타겟을 감싸서 타겟의 요청을 대신 받아주는 랩핑(Wrapping) 오브젝트

2) 호출자(Client)에서 타겟을 호출하게 되면 타겟이 아닌 타겟을 감싸고 있는 프록시가 호출되어,

타겟 메소드 실행 전에 선처리, 타겟 메소드 실행 후, 후처리를 실행시키도록 구성

7. 인트로덕션 ( Introduction )

1) 타겟 클래스에 코드 변경 없이 신규 메소드나 멤버변수를 추가하는 기능

8. 위빙 ( Weaving )

1) 지정된 객체에 애스펙트(Aspect)를 적용해서 새로운 프록시 객체를 생성하는 과정

예를들어, A라는 객체에 트랜잭션 애스펙트가 지저오디어 있다면,

A라는 객체가 실행되기 전 커넥션을 오픈하고 실행이 끝나면

커넥션을 종료하는 기능이 추가된 프록시 객체가 생성되고,

이 프록시 객체가 앞으로 A 객체가 호출되는 시점에서 사용,

이 때의 프록시 객체가 생성되는 과정을 위빙이라고 한다.

2) 컴파일 타임, 클래스로드 타임, 런타임과 같은 시점에서 실행되지만,

Spring AOP는 런타임에서 프록시 객체가 생성

따라치면서 이해해 본 결과,

AOP는 각 중요메소드(메인이라고 할까요..?)들이 실행하는 Service 가 실행되기 전, 후에

공통적인 과정을 한 곳에 모아놨다. 그래서 유지보수가 편리하고 효율적이다. 라는 느낌이네요.

'IT 개념' 카테고리의 다른 글

Forward, Redirect  (0) 2021.06.18
싱글톤 객체  (0) 2021.06.18
Spring, ResponeseEntity  (0) 2021.06.15
jQuery .val() (javascript)  (0) 2021.06.15
JSTL <c:if>, <c:choose>  (0) 2021.06.15