본문 바로가기

Spring Boot

[Spring Boot] AOP

728x90

AOP(Aspect-Oriented Programming)란?

AOP는 프로그램의 핵심 비즈니스 로직과 공통 관심사를 분리하여 모듈화하는 프로그래밍 패러다임입니다. 공통 관심사는 로깅, 트랜잭션 관리, 보안, 예외 처리 등 여러 모듈에 걸쳐 반복되는 기능을 의미하며, AOP는 이를 Aspect라는 모듈로 분리하여 개발자의 생산성을 높이고 코드 재사용성을 증가시킵니다.

 

 

AOP의 특징

  • 모듈화: 공통 관심사를 Aspect로 분리하여 코드의 모듈성을 높입니다.
  • 재사용성: 하나의 Aspect를 여러 곳에서 재사용할 수 있습니다.
  • 유지보수 용이성: 비즈니스 로직과 공통 관심사를 분리함으로써 코드의 가독성과 유지보수가 용이해집니다.
  • 개발 생산성 향상: 반복되는 코드 작성을 줄이고, 비즈니스 로직에만 집중할 수 있게 도와줍니다.

 

 

AOP의 장점

  • 코드 중복 감소: 공통 관심사를 모듈화하여 코드 중복을 줄입니다.
  • 유지보수 용이: 비즈니스 로직과 공통 기능을 분리하여 수정이 용이합니다.
  • 관심사의 분리: 비즈니스 로직과 보안, 로깅 등의 기능을 분리하여 명확하게 관리할 수 있습니다.
  • 다양한 적용 가능성: 다양한 Join Point에 Aspect를 적용할 수 있어 유연한 설계를 가능하게 합니다.

AOP의 단점

  • 학습 곡선: AOP 개념을 이해하고 적용하는 데 시간이 걸릴 수 있습니다.
  • 디버깅 어려움: AOP는 코드의 흐름을 숨기기 때문에, 디버깅 시에 문제가 발생할 수 있습니다.
  • 성능 문제: 잘못 설계된 Aspect가 성능에 부정적인 영향을 줄 수 있습니다.
  • 구현 복잡성: 복잡한 시스템에서는 AOP 적용이 복잡해질 수 있으며, 여러 Aspect가 충돌할 가능성도 있습니다.

 

AOP의 구성 요소

  • Aspect: 공통 관심사를 모듈화한 코드 조각입니다.
  • Join Point: Aspect가 적용될 수 있는 지점 (예: 메소드 실행, 객체 생성, 예외 발생 등).
  • Advice: Join Point에서 실행될 코드로, 다음과 같은 종류가 있습니다:
    • Before: Join Point 전에 실행.
    • After: Join Point 이후에 실행.
    • After Returning: Join Point가 성공적으로 반환한 후 실행.
    • After Throwing: Join Point에서 예외 발생 후 실행.
    • Around: Join Point를 감싸며 전후 모두에서 실행.
  • Pointcut: 어떤 Join Point에 Advice를 적용할지를 결정하는 표현식.
  • Weaving: Aspect를 코드에 적용하는 과정으로, 컴파일 타임, 로드 타임, 실행 타임에 수행됩니다.

 

 

AOP와 OOP의 차이점

개념 OOP AOP
비즈니스 로직 vs 공통 관심사 로깅 같은 공통 기능이 비즈니스 로직(메소드) 안에 포함됨 로깅을 별도의 Aspect로 분리하여 비즈니스 로직과 공통 기능을 분리
모듈화 모든 기능이 객체 내에 포함되어 모듈화가 낮음 Aspect로 공통 기능을 모듈화하여 여러 비즈니스 로직에 적용 가능
유지보수성 공통 기능 수정 시 여러 객체에서 수정해야 할 수 있음 공통 기능을 Aspect에서 수정하면 모든 비즈니스 로직에 자동 반영
코드 가독성 비즈니스 로직이 복잡해질 수 있으며 가독성이 떨어질 수 있음 비즈니스 로직이 간결해지고 가독성이 높아짐

 

 

 

정리

AOP는 비즈니스 로직과 공통 관심사를 분리하여 소프트웨어 개발의 생산성을 높이고 유지보수를 용이하게 하는 강력한 도구입니다. 그러나 AOP를 사용할 때는 장단점을 고려하여 적절하게 적용하는 것이 중요합니다.

728x90