상세 컨텐츠

본문 제목

AOP (Aspect-Oriented Programming)

스프링

by R4MeN 2024. 6. 16. 22:52

본문

개요

  • AOP: 관점 지향 프로그래밍(Aspect-Oriented Programming)의 약자로, 애플리케이션의 핵심 기능과 부가적인 관심사를 분리하여 모듈화하는 프로그래밍 패러다임
  • 목적: 코드의 중복을 줄이고, 부가적인 관심사(로깅, 보안, 트랜잭션 관리 등)를 쉽게 관리하고 유지보수할 수 있도록 함

주요 개념

  1. Aspect (관점): 애플리케이션의 부가적인 관심사(횡단 관심사, cross-cutting concern)를 모듈화한 것. 예를 들어, 로깅, 보안, 트랜잭션 관리 등이 있음.
  2. Join Point (조인 포인트): Aspect가 적용될 수 있는 애플리케이션 실행 지점. 메서드 호출, 예외 발생 등 다양한 지점이 있음.
  3. Advice (어드바이스): 특정 조인 포인트에서 수행되는 작업. AOP에서 실제로 수행되는 코드로, 다양한 타입이 있음:
    • Before: 메서드 실행 전에 실행됨
    • After: 메서드 실행 후에 실행됨
    • After Returning: 메서드가 정상적으로 반환된 후에 실행됨
    • After Throwing: 메서드 실행 중 예외가 발생한 후에 실행됨
    • Around: 메서드 실행 전후에 실행되며, 메서드 실행을 제어할 수 있음
  4. Pointcut (포인트컷): 하나 이상의 조인 포인트를 정의하고 필터링하는 표현식. 어떤 조인 포인트에 어드바이스가 적용될지를 결정함.
  5. Weaving (위빙): 어드바이스를 실제 코드에 적용하는 과정. 컴파일 타임, 로드 타임, 런타임에 위빙이 이루어질 수 있음.

장점

  • 코드 모듈화: 공통적인 부가 기능을 한 곳에 모아서 관리할 수 있어 코드의 중복을 줄이고, 유지보수성을 향상시킴
  • 분리된 관심사 관리: 핵심 비즈니스 로직과 부가적인 관심사를 분리하여 코드의 가독성과 관리성을 높임
  • 유연성: 다양한 어드바이스 타입을 통해 메서드 실행 전후 또는 예외 발생 시점에 원하는 로직을 유연하게 적용 가능

한계점

  • 복잡성: AOP를 처음 접하는 개발자에게는 개념과 사용법이 다소 복잡할 수 있음
  • 디버깅 어려움: 위빙된 코드로 인해 디버깅이 어려울 수 있음
  • 오버헤드: 런타임 위빙의 경우 성능 오버헤드가 발생할 수 있음

Spring AOP

  • Aspect 정의: 로깅 기능을 Aspect로 정의하여 특정 메서드 실행 전후에 로깅을 수행
  • Pointcut 설정: 서비스 레이어의 모든 메서드를 대상으로 포인트컷을 설정
  • Advice 적용: 메서드 실행 전에 로깅 메시지를 출력하는 Before 어드바이스와, 메서드 실행 후에 로깅 메시지를 출력하는 After 어드바이스를 적용
  • Weaving: Spring 컨텍스트가 초기화될 때 위빙이 이루어져, 서비스 메서드가 호출될 때마다 로깅 Aspect가 적용됨

요약

  • AOP는 핵심 로직과 부가적인 관심사를 분리하여 코드의 모듈화를 돕는 프로그래밍 패러다임임
  • 주요 개념으로는 Aspect, Join Point, Advice, Pointcut, Weaving이 있으며, 이를 통해 부가적인 기능을 독립적으로 관리하고 적용 가능
  • Spring AOP는 이러한 AOP 개념을 쉽게 적용할 수 있도록 지원하며, 로깅, 보안, 트랜잭션 관리 등의 공통 기능을 구현하는 데 유용함

'스프링' 카테고리의 다른 글

Try-With-Resources  (0) 2024.07.01
DBC Driver Manager  (0) 2024.07.01
Given-When-Then 패턴  (0) 2024.06.13
Logout API  (0) 2024.06.07
CascadeType  (0) 2024.06.07

관련글 더보기