AOP
🧩 AOP
정의
AOP는 Aspect Oriented Programming의 약어로, 공통 기능을 핵심 비즈니스 로직과 분리해 모듈화하는 프로그래밍 방식이다. 여러 곳에 반복되는 기능을 한 곳에서 관리할 수 있게 해준다.
로깅, 보안, 트랜잭션, 성능 측정처럼 여러 로직에 공통으로 들어가는 부가기능을 분리할 때 유용하다.
🧩 목적

- 반복되는 코드를 분리한다
- 핵심 비즈니스 로직을 깔끔하게 유지한다
- 공통 기능을 재사용한다
- 관심사를 분리해 유지보수를 쉽게 만든다
🧩 주요 개념
| 용어 | 설명 |
|---|---|
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를 함께 이해하면 구조가 선명해진다.
댓글남기기