🧩 AOP

정의

AOPAspect Oriented Programming의 약어로, 공통 기능을 핵심 비즈니스 로직과 분리해 모듈화하는 프로그래밍 방식이다. 여러 곳에 반복되는 기능을 한 곳에서 관리할 수 있게 해준다.

로깅, 보안, 트랜잭션, 성능 측정처럼 여러 로직에 공통으로 들어가는 부가기능을 분리할 때 유용하다.

🧩 목적

image

  • 반복되는 코드를 분리한다
  • 핵심 비즈니스 로직을 깔끔하게 유지한다
  • 공통 기능을 재사용한다
  • 관심사를 분리해 유지보수를 쉽게 만든다

🧩 주요 개념

용어 설명
Aspect 공통 관심사를 모듈화한 단위다
Advice JoinPoint 전후에 실행되는 실제 부가 로직이다
JoinPoint Advice가 적용될 수 있는 지점이다
Pointcut 어떤 JoinPoint에 적용할지 조건을 정한다
Advisor Advice와 Pointcut을 함께 묶은 개념이다
Weaving Pointcut에 따라 Advice를 적용하는 과정이다
Proxy Spring AOP가 부가기능을 적용하기 위해 사용하는 객체다

🧩 적용 방식

Compile Time

  • 컴파일 시점에 부가기능을 적용한다
  • AspectJ에서 주로 사용하는 방식이다

Class Loading Time

  • 클래스 로딩 시점에 부가기능을 적용한다
  • 로더 단계에서 바이트코드를 조작하는 방식이다

Runtime Time

  • Spring AOP가 주로 사용하는 방식이다
  • 실행 중 프록시를 통해 부가기능을 적용한다
  • 메서드 호출 중심으로 동작한다

🧩 Spring AOP의 특징

  • 프록시 기반으로 동작한다
  • 주로 메서드 단위로 적용된다
  • 런타임에 부가기능을 덧붙인다
  • 구현이 비교적 쉽다

⚠️ 주의사항

  • 같은 JoinPoint에 여러 Advice가 적용되면 순서를 고려해야 한다.
  • 내부 메서드 자기 호출은 프록시를 거치지 않아 AOP가 적용되지 않을 수 있다.
  • 클래스/메서드가 프록시 대상인지 확인해야 한다.
  • 세밀한 제어가 필요하면 Pointcut, Advice, @Order를 함께 이해해야 한다.

📌 정리

  • AOP는 공통 기능을 핵심 로직과 분리하는 프로그래밍 방식이다.
  • Spring AOP는 주로 런타임 프록시 방식으로 동작한다.
  • Advice, Pointcut, JoinPoint를 함께 이해하면 구조가 선명해진다.

연결문서

댓글남기기