AOP?

AOP란, Aspect-Oriented Programming의 약자로 관점 지향 프로그래밍을 의미합니다.
관점 지향 프로그래밍은 횡단 관심사(Cross Cutting Concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임입니다.이를 통해 기능의 코드 핵심부를 어수선하게 채우지 않고도 비즈니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있도록 합니다.

횡단 관심사(또는 흩어진 관심사)를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지라고 할 수 있습니다.

횡단 관심사의 전형적인 예로 로깅을 들 수 있습니다. 로깅 전략이 필연적으로 시스템 상에서 로그되는 모든 부분에 영향을 미치기 때문에, 로깅은 로그가 되는 모든 클래스들과 메서드들을 횡단하게 됩니다.

AOP 주요 개념

  • Aspect : 횡단 관심사를 모듈화한 것. 주로 부가기능을 모듈화 함.
  • Target : Aspect를 적용하는 곳(클래스, 메서드 ...)
  • Advice : 실질적인 부가기능을 담은 구현체
  • JoinPoint : Advice가 적용될 위치(메서드 진입 지점, 생성자 호출 시점 등 다양한 시점에 적용 가능)
  • PointCut : JoinPoint의 상세 스펙을 정의한 것.

Spring AOP 특징

  • 프록시 패턴 기반의 AOP 구현체를 사용합니다. 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위함입니다.
  • 스프링 빈에만 AOP를 적용할 수 있습니다.
  • 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 지원하는 것이 목적입니다.
  • 순수 자바로 구현되었기 때문에 특별한 컴파일 과정이 필요하지 않습니다.

Reference

관점 지향 프로그래밍
[Spring] 스프링 AOP (Spring AOP) 총정리 : 개념, 프록시 기반 AOP, @AOP
[Spring] AOP란? 용어 정리, 사용 방법

profile
I want be a developer🙂

0개의 댓글