Spring

[Spring] AOP

개발 공주 2023. 6. 15. 15:58
728x90

AOP 관점 지향 프로그래밍

 

AOP(Aspect-Oriented Programming)는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것

 

AOP는 핵심 비즈니스 로직과 부가 기능(Aspect)를 분리하는 등 OOP를 보완하는 역할이다. (객체지향적 가치를 지키게 도와준다)
때문에 핵심 비즈니스 로직에 더욱 집중 할 수 있고, 반복적인 코드들을 한 곳에서 유지하고 관리할 수 있다는 이점이 있다.

 

- Spring AOP는 스프링 프레임워크에서 제공하는 기능 중 하나로 관점 지향 프로그래밍을 지원하는 기술입니다. Spring AOP는 로깅, 보안, 트랜잭션 관리 등과 같은 공통적인 관심사를 모듈화 하여 코드 중복을 줄이고 유지 보수성을 향상하는데 도움을 줍니다.

 

[ AOP(Aspect Oriented Programming)의 장점 ]

  • 공통 관심 사항을 핵심 관심사항으로부터 분리시켜 핵심 로직을 깔끔하게 유지할 수 있다.
  • 그에 따라 코드의 가독성, 유지보수성 등을 높일 수 있다.
  • 각각의 모듈에 수정이 필요하면 다른 모듈의 수정 없이 해당 로직만 변경하면 된다.
  • 공통 로직을 적용할 대상을 선택할 수 있다

 

Spring AOP의 특징

프록시 기반

- Spring은 타겟(Target) 객체에 대한 프록시를 만들어서 제공한다.

- 타겟을 감싸는 프록시는 실행시간(RunTime)에 생성된다.

- 프록시는 어드바이스(Advice)를 타겟 객체에 적용하면서 생성되는 객체

- 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위함이다.

 

프록시가 호출을 가로챔(Intercept)

- 프록시는 타겟 객체에 대한 호출을 가로챈 다음 Advice의 부가기능 로직을 수행하고난 후에 타겟의 핵심기능 로직을 호출한다.

(전처리 어드바이스)

- 타겟의 핵심기능 로직 메소드를 호출한 후에 부가기능을 수행하는 경우도 있다.

(후처리 어드바이스)

 

메소드 JoinPoint만 지원한다.

- Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메소드 조인 포인트만 지원

- 핵심기능(타겟)의 메소드가 호출되는 런타임 시점에만 부가기능(어드바이스)를 적용할 수 있음

 

- 반면에 AseptJ같은 고급 AOP 프레임워크를 사용하면 객체의 생성, 필드값의 조회와 조작, static 메소드 호출 및 동기화 등의 

다양한 작업에 부가기능을 적용할 수 있다.

 

AOP 용어에 대해 알아보자.

1. Target

- 부가기능을 부여할 대상 (핵심기능을 담고 있는 모듈)

 

2. Aspect

- 부가기능 모듈을 Aspect라고 부른다. (핵심기능에 부가되어 의미를 갖는 모듈)

- 부가될 기능을 정의한 Advice와 Advice를 어디에 적용할지를 결정하는 PointCut을 함께 갖고 있다.

- 어플리케이션의 핵심적인 기능에서, 부가적인 기능을 분리해서 Aspect라는 모듈로 만들어서 설계하고 개발하는 방법

 

3. Advice 

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

- 타겟 오브젝트에 종속되지 않기 때문에, 부가기능에만 집중할 수 있음

- Aspect가 무엇을 언제 할지를 정의

 

4. PointCut

- 부가기능이 적용될 대상(Method)을 선정하는 방법

- Advice를 적용할 JoinPoint를 선별하는 기능을 정의한 모듈

 

5. JoinPoint

- Advice가 적용될 수 있는 위치

- Spring에서는 메소드 조인포인트만 제공한다.

- 타겟 객체가 구현한 모든 메소드는 조인 포인트가 된다.

 

6. Proxy

- Target을 감싸서 Target의 요청을 대신 받아주는 랩핑 오브젝트.

- 클라이언트에서 Target을 호출하게되면, 타겟이 아닌 타겟을 감싸고 있는 Proxy가 호출되어,

  타겟메소드 실행 전에 선처리, 후처리를 실행한다.

 

7. Introduction

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

 

8. Weaving

- 지정된 객체에 Aspect를 적용해서, 새로운 프록시 객체를 생성하는 과정

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

Spring에서 AOP 적용

@Aspect 어노테이션을 붙여 이 클래스가 Aspect를 나타내는 클래스라는 것을 명시하고

@Component를 통해 빈으로 등록해준다.
@Before, @After, @Around 등의 어노테이션을 통해 타겟 메서드의 Aspect 실행 시점을 지정할 수 있다.

'Spring' 카테고리의 다른 글

[Spring] 객체 지향 설계의 5가지 원칙 (SOLID)  (1) 2023.06.18
[Spring] 스프링배우기전에 꼭 보기  (0) 2023.06.15
[Spring] IoC, DI, DIP  (0) 2023.06.15
[Spring] Spring Framework란  (0) 2023.06.15
[Spring] @RequestParam  (0) 2023.06.12