Spring Boot AOP(관점지향프로그래밍)

 

Summry

본 문서에서는 AOP(Aspect-Oriented Programming)의 개념을 정리한다.

send me email if you have any questions.


AOP(Aspect-Oriented Programming)

AOP(Aspect-Oriented Programming) 는 OOP를 보완하는 수단으로, 흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법이다.
즉, 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것.

그림1

위의 상황에서 3번 기능을 수정한다면 클래스 A, B, C 모두 수정해주어야 하기 때문에 유지보수성이 떨어진다.

AOP는 각각 기능별 Aspect를 만들고 어느 클래스에 적용할지 입력해준다.

그림2

위의 그림은 각 기능별로 Aspect를 나눈 예이다.
AOP의 핵심은 공통 모듈을 분리시켜 해당 소스코드가 외부의 다른 클래스에서 존재하는 것이다.

Key-word

  • Core Concern(핵심 관심)
    • 각 서비스의 핵심 비즈니스 로직
  • Crosscut Concern(횡단 관심)
    • 공통 모듈
    • ex) 로깅, 보안
  • Aspect
    • 여러 곳에서 쓰이는 코드(공통 부분)를 모듈화한 것
  • Advice
    • Aspect 에서 실질적인 기능에 대한 구현체
  • Target
    • Aspect 가 적용되는 곳
    • ex) class A
  • Pointcut
    • 어디에 적용할지에 대한 것
    • ex) class A의 B라는 메서드
  • Joint point
    • Advice 가 Target 에 적용되는 시점(Crosscut Concern(횡단 관심)을 삽입할 시점)
    • 메서드 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때 등등
  • Proxy
    • Crosscut Concern(횡단 관심)이 Core Concern(핵심 관심)에서 직접 실행되지 않고 Proxy(대리인)을 생성해 실행

AOP 구현 방법

1. XML 기반의 POJO 클래스를 이용한 AOP 구현

  • 부가기능을 제공하는 Advice 클래스를 작성한다.
  • XML 설정 파일에 를 이용해서 애스펙트를 설정한다. (즉, 어드바이스와 포인트컷을 설정함)

2. @Aspect 어노테이션을 이용한 AOP 구현

  • @Aspect 어노테이션을 이용해서 부가기능을 제공하는 Aspect 클래스를 작성한다.
  • 이 때 Aspect 클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함한다.
  • XML 설정 파일에 를 설정한다.

AOP 장점

  • 각 비즈니스 로직마다 중복 코드가 사라진다.
  • 각 비즈니스 로직을 구현하는 개발자는 자기 자신의 비즈니스 코드에만 집중할 수 있어 코드가 간결해지고, 유지보수가 쉬워진다.
  • 재활용성이 더욱 높아진다.

Reference

[Spring] AOP란? - max9106
OOP (객체지향), AOP(관점지향) - 좋은 개발자가 되자
Spring AOP, Aspect 개념 특징, AOP 용어 정리 - effortDev