티스토리 뷰

300x250
핵심 요약
이 글에서 바로 이해할 것 AOP가 왜 필요한지, 핵심 용어가 무엇인지 한 번에 정리합니다.
이 글에서 바로 해결할 것 Spring AOP가 프록시 기반으로 어떻게 동작하는지, 왜 self-invocation에서 안 먹는지 설명합니다.
바로 확인할 설정 Advice, Pointcut, Join Point, 프록시 적용 범위를 실무 기준으로 체크합니다.
핵심 결론 Spring AOP는 공통 관심사를 분리하는 도구이지만, 프록시 기반 한계를 모르면 트랜잭션·로깅·권한 처리에서 쉽게 막힙니다.
728x90
한눈에 보는 개념 / 구조
항목 설명 실무 포인트
AOP 로깅, 트랜잭션, 보안처럼 여러 곳에 공통으로 필요한 기능을 핵심 비즈니스 로직과 분리하는 방식입니다. 중복 코드를 줄이고 관심사를 분리할 수 있습니다.
Spring AOP 프록시 객체를 만들어 메서드 호출 전후에 부가 기능을 끼워 넣는 방식입니다. 트랜잭션, @Around 로깅, 권한 체크 구현에서 자주 사용합니다.
핵심 한계 프록시를 거치지 않는 내부 호출에는 Advice가 적용되지 않을 수 있습니다. self-invocation 문제를 이해해야 실무 오류를 줄일 수 있습니다.
클라이언트 호출
 ↓
프록시 객체 진입
 ↓
Advice 실행 (로그, 트랜잭션, 보안 등)
 ↓
실제 타깃 메서드 실행
 ↓
후처리 Advice 실행
 ↓
결과 반환
AOP란 무엇인가? | 왜 Spring에서 중요한가

AOP는 Aspect Oriented Programming의 약자입니다.

쉽게 말하면 비즈니스 로직과 직접 관련은 없지만 여러 기능에 반복해서 들어가는 코드를 따로 분리하는 방식입니다.

예를 들어 주문 생성, 회원 가입, 결제 승인, 게시글 저장 같은 기능은 모두 서로 다른 업무 로직입니다. 하지만 이들 메서드에서 공통으로 필요한 것이 있습니다.

  • 실행 시간 로그
  • 트랜잭션 처리
  • 권한 체크
  • 예외 로깅
  • 공통 감사 기록


이런 코드를 서비스 메서드마다 직접 넣으면 코드가 금방 지저분해집니다. 그래서 Spring은 AOP를 통해 공통 관심사를 한 곳에 모아서 처리하게 도와줍니다.

AOP를 쓰는 이유
  • 중복 코드 제거
  • 비즈니스 로직과 부가 기능 분리
  • 유지보수 쉬움
  • 트랜잭션, 로깅, 보안 적용 일관성 확보
Spring AOP 핵심 용어 | Aspect, Advice, Pointcut, Join Point 쉽게 정리
용어 예시
Aspect 공통 관심사를 모아둔 모듈 로그 처리 Aspect
Advice 실제로 실행되는 부가 기능 코드 메서드 시작 전 로그 출력
Pointcut 어떤 메서드에 Advice를 적용할지 정하는 조건 service 패키지의 모든 public 메서드
Join Point Advice가 들어갈 수 있는 실행 지점 메서드 실행 시점
Proxy 실제 객체 대신 앞단에서 호출을 가로채는 객체 트랜잭션 프록시
Spring AOP는 어떻게 동작할까? | 프록시 기반 구조 이해하기

Spring AOP는 기본적으로 프록시 기반입니다.

즉 실제 서비스 객체를 직접 호출하는 것이 아니라, Spring이 앞에 프록시 객체를 하나 두고 그 프록시가 먼저 호출을 받습니다.

프록시는 메서드 실행 전후에 Advice를 넣은 뒤 실제 타깃 객체를 호출합니다.

이 구조 덕분에 @Transactional, 성능 로그, 권한 체크 같은 기능을 메서드 본문에 직접 넣지 않아도 됩니다.

실무에서 꼭 기억할 점
  • Spring AOP는 바이트코드 자체를 바꾸는 방식이 아니라 프록시를 사용하는 경우가 많습니다.
  • 외부에서 프록시를 통해 호출될 때 Advice가 적용됩니다.
  • 내부 메서드가 자기 자신을 직접 호출하면 프록시를 우회할 수 있습니다.
비교 / 차이 정리 | AOP와 OOP, Spring AOP와 AspectJ 차이
비교 항목 Spring AOP AspectJ
적용 방식 프록시 기반 위빙 기반
대상 범위 주로 Spring Bean 메서드 더 넓은 범위 적용 가능
실무 난이도 비교적 단순하고 Spring 친화적 강력하지만 설정과 이해 난이도 높음
대표 사용 예 트랜잭션, 로깅, 권한 체크 더 세밀한 포인트컷 제어
AOP와 OOP를 헷갈리지 않으려면
  • OOP는 객체 책임 분리 중심입니다.
  • AOP는 여러 객체에 흩어지는 공통 관심사 분리 중심입니다.
  • 둘은 경쟁 관계가 아니라 함께 쓰는 개념입니다.
자주 막히는 포인트 / 문제해결 | Spring AOP가 안 먹는 대표 사례
문제 원인 확인 방법 해결
Advice가 적용되지 않음 프록시를 거치지 않는 내부 호출 같은 클래스 내부에서 this.method() 호출 여부 확인 구조 분리 또는 프록시 경유 호출
@Transactional이 안 먹음 private 메서드, 내부 호출, 프록시 미적용 대상 메서드 접근제어자, 프록시 방식, 실제 호출 흐름 확인 가장 안전한 기준은 프록시를 거치는 외부 호출 구조로 설계하는 것입니다. 실무에서는 보통 public 서비스 메서드 기준으로 잡습니다.
포인트컷이 기대와 다름 패키지 경로, 메서드 시그니처 지정 오류 execution 표현식 재검토 포인트컷 범위 명확히 분리
예상보다 성능 로그가 과다함 포인트컷 범위가 너무 넓음 controller, service, repository 전체 적용 여부 확인 패키지 단위 또는 어노테이션 기준으로 세분화
설정 / 확인 체크리스트
  • @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는 메서드 전후를 모두 제어할 수 있습니다.
  • ProceedingJoinPointproceed()를 호출해야 실제 메서드가 실행됩니다.
  • 패키지 범위를 넓게 잡으면 로그가 과도하게 찍힐 수 있습니다.
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
댓글