IT/Spring
Spring AOP란 무엇인가? | 개념부터 프록시·Advice·실무 예제까지 쉽게 정리
PARK_90
2026. 4. 15. 23:21
300x250
핵심 요약
이 글에서 바로 이해할 것 AOP가 왜 필요한지, 핵심 용어가 무엇인지 한 번에 정리합니다.
이 글에서 바로 해결할 것 Spring AOP가 프록시 기반으로 어떻게 동작하는지, 왜 self-invocation에서 안 먹는지 설명합니다.
바로 확인할 설정 Advice, Pointcut, Join Point, 프록시 적용 범위를 실무 기준으로 체크합니다.
핵심 결론 Spring AOP는 공통 관심사를 분리하는 도구이지만, 프록시 기반 한계를 모르면 트랜잭션·로깅·권한 처리에서 쉽게 막힙니다.
728x90
한눈에 보는 개념 / 구조
클라이언트 호출
↓
프록시 객체 진입
↓
Advice 실행 (로그, 트랜잭션, 보안 등)
↓
실제 타깃 메서드 실행
↓
후처리 Advice 실행
↓
결과 반환
AOP란 무엇인가? | 왜 Spring에서 중요한가
AOP는 Aspect Oriented Programming의 약자입니다.
쉽게 말하면 비즈니스 로직과 직접 관련은 없지만 여러 기능에 반복해서 들어가는 코드를 따로 분리하는 방식입니다.
예를 들어 주문 생성, 회원 가입, 결제 승인, 게시글 저장 같은 기능은 모두 서로 다른 업무 로직입니다. 하지만 이들 메서드에서 공통으로 필요한 것이 있습니다.
- 실행 시간 로그
- 트랜잭션 처리
- 권한 체크
- 예외 로깅
- 공통 감사 기록
이런 코드를 서비스 메서드마다 직접 넣으면 코드가 금방 지저분해집니다. 그래서 Spring은 AOP를 통해 공통 관심사를 한 곳에 모아서 처리하게 도와줍니다.
AOP를 쓰는 이유
- 중복 코드 제거
- 비즈니스 로직과 부가 기능 분리
- 유지보수 쉬움
- 트랜잭션, 로깅, 보안 적용 일관성 확보
Spring AOP 핵심 용어 | Aspect, Advice, Pointcut, Join Point 쉽게 정리
Spring AOP는 어떻게 동작할까? | 프록시 기반 구조 이해하기
Spring AOP는 기본적으로 프록시 기반입니다.
즉 실제 서비스 객체를 직접 호출하는 것이 아니라, Spring이 앞에 프록시 객체를 하나 두고 그 프록시가 먼저 호출을 받습니다.
프록시는 메서드 실행 전후에 Advice를 넣은 뒤 실제 타깃 객체를 호출합니다.
이 구조 덕분에 @Transactional, 성능 로그, 권한 체크 같은 기능을 메서드 본문에 직접 넣지 않아도 됩니다.
실무에서 꼭 기억할 점
- Spring AOP는 바이트코드 자체를 바꾸는 방식이 아니라 프록시를 사용하는 경우가 많습니다.
- 외부에서 프록시를 통해 호출될 때 Advice가 적용됩니다.
- 내부 메서드가 자기 자신을 직접 호출하면 프록시를 우회할 수 있습니다.
비교 / 차이 정리 | AOP와 OOP, Spring AOP와 AspectJ 차이
AOP와 OOP를 헷갈리지 않으려면
- OOP는 객체 책임 분리 중심입니다.
- AOP는 여러 객체에 흩어지는 공통 관심사 분리 중심입니다.
- 둘은 경쟁 관계가 아니라 함께 쓰는 개념입니다.
자주 막히는 포인트 / 문제해결 | Spring AOP가 안 먹는 대표 사례
설정 / 확인 체크리스트
@Aspect,@Component등록 여부 확인- 포인트컷 표현식이 실제 대상 메서드를 정확히 가리키는지 확인
- 프록시를 통한 외부 호출인지 확인
- 트랜잭션, 로그, 권한 체크가 private 메서드 내부 호출에 기대고 있지 않은지 확인
Spring AOP 실무 예제 | 실행 시간 로그 남기기
@Aspect
@Component
public class LogAspect {
@Around("execution(* com.example..service.*.*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
try {
return joinPoint.proceed();
} finally {
long end = System.currentTimeMillis();
System.out.println(joinPoint.getSignature() + " 실행 시간 = " + (end - start) + "ms");
}
}
}
이 예제에서 봐야 할 포인트
@Around는 메서드 전후를 모두 제어할 수 있습니다.ProceedingJoinPoint의proceed()를 호출해야 실제 메서드가 실행됩니다.- 패키지 범위를 넓게 잡으면 로그가 과도하게 찍힐 수 있습니다.
FAQ
- Q. Spring AOP와 @Transactional은 어떤 관계인가요?
→@Transactional도 대표적인 AOP 활용 사례입니다. 프록시가 메서드 호출을 감싸며 트랜잭션을 시작하고 종료합니다. - Q. 내부 메서드 호출에서 AOP가 왜 안 먹나요?
→ 프록시를 통하지 않고 같은 객체 내부에서 직접 호출하기 때문입니다. - Q. Spring AOP만 알면 면접에서 충분한가요?
→ 기본 개념은 충분히 중요하지만, 프록시 기반 동작 원리와 self-invocation 한계까지 설명해야 좋은 평가를 받기 쉽습니다. - Q. Advice 종류는 무엇이 자주 나오나요?
→@Before,@After,@AfterReturning,@AfterThrowing,@Around가 대표적입니다. 실무에서는@Around활용 빈도가 높습니다.
결론
- Spring AOP는 공통 관심사를 비즈니스 로직에서 분리하는 핵심 도구입니다.
- 프록시 기반 동작 구조를 이해해야 트랜잭션, 로깅, 권한 체크 문제를 정확히 설명할 수 있습니다.
- 실무에서는 포인트컷 범위와 내부 호출 한계를 가장 먼저 점검해야 합니다.
Spring AOP는 단순히 부가 기능을 붙이는 기술이 아니라, 프록시 구조를 이해하고 설계에 반영할 때 진짜 실무 도구가 됩니다.
관련 글 링크
※ 제목은 일반 검색 키워드인 "Spring AOP란 무엇인가"를 앞에 두고, 검색 의도가 높은 "개념", "프록시", "Advice", "실무 예제"를 함께 넣어 상위 노출형으로 설계했습니다.
728x90