2025-11-03 Spring AOP

Ckd gus·2026년 2월 2일

AOP 정리 (블로그용)

AOP란?

AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 객체지향(OOP)을 보완하는 프로그래밍 패러다임이다.
핵심 비즈니스 로직(핵심 관심사)과 여러 곳에 반복되는 공통 기능(횡단 관심사)을 분리해 모듈화한다.


AOP의 핵심 가치

  • 관심의 분리(Separation of Concerns)
    핵심 로직과 부가 기능(로깅, 트랜잭션, 보안 등)을 분리한다.

  • 횡단 관심사(Cross-cutting Concerns)
    여러 클래스/모듈에 걸쳐 반복되는 공통 기능을 말한다.

  • 모듈화(Modularization)
    흩어진 공통 로직을 한 곳(Aspect)에서 관리해 중복을 줄인다.


AOP의 장점

  • 중복 코드 제거 (로깅/권한 체크/트랜잭션 등 반복 제거)
  • 유지보수 효율 향상 (정책 변경 시 한 곳만 수정)
  • 재사용성 극대화 (Aspect 재사용)
  • 변화 수용 용이 (비즈니스 로직에 손대지 않고 부가 기능 교체 가능)

AOP 핵심 용어

  • Aspect
    횡단 관심사를 모듈화한 단위. 일반적으로 Pointcut + Advice 조합으로 이해하면 된다.

  • JoinPoint
    Aspect를 적용할 “후보 지점”.
    (스프링 AOP에서는 실질적으로 “메서드 실행 지점”이 핵심)

  • Pointcut
    JoinPoint 중에서 “어디에 적용할지”를 선택하는 조건식.
    예: execution(* com.example.service.*.*(..))
    com.example.service 패키지 아래 모든 메서드 실행 지점

  • Advice
    실제로 실행되는 부가 로직(코드).
    (Before/After/Around 등 실행 시점에 따라 종류가 갈린다)

  • Target
    Aspect가 적용되는 원본 객체(핵심 비즈니스 로직을 가진 객체)

  • Weaving
    Target에 Aspect를 “엮는” 과정. 결과적으로 프록시 객체가 만들어진다.

  • Proxy
    AOP 적용 결과로 생성되는 객체.
    클라이언트는 보통 Target이 아닌 Proxy를 통해 메서드를 호출하게 된다.


Advice 유형 정리

Advice실행 시점사용 예특징
@Before메서드 실행 전권한 체크, 요청 로깅대상 메서드 실행 자체를 제어하긴 어려움
@AfterReturning정상 종료 후반환값 로깅, 후처리예외 발생 시 실행 안 됨, 반환값 확인 가능
@AfterThrowing예외 발생 시에러 로깅, 알림발생한 예외 정보 확인 가능
@After메서드 종료 후(항상)리소스 정리finally와 유사 (성공/실패 무관)
@Around메서드 전후성능 측정, 트랜잭션 경계가장 강력, 실행 여부/반환값 가공 가능

사용 예제 (기본 로깅 Aspect)

아래 예시는 org.example.aop 패키지의 *Service 클래스의 모든 메서드에 대해
실행 전/후 로그를 남기는 구조다.

@Aspect
@Component
public class LoggerAspect {

    @Pointcut("execution(* org.example.aop.*Service.*(..))")
    public void pc() {}

    @Before("pc()")
    public void logging() {
        System.out.println("로그를 남깁니다.");
    }

    @After("pc()")
    public void loggingAfter() {
        System.out.println("메서드 종료");
    }
}

실무에서 자주 붙는 예시 (감 잡기)

  • 로깅: Controller/Service 진입, 파라미터, 실행 시간
  • 트랜잭션: @Transactional (내부적으로 AOP 기반)
  • 보안: 권한 체크(메서드 레벨), 인증 정보 검사
  • 캐싱: @Cacheable (AOP 기반)
  • 예외 처리/알림: 공통 예외 로깅, 슬랙/메일 알림 트리거

느낀점

Spring Security 들어가기 전에 AOP 기본기를 보는 건 순서가 좋다.
Security도 결국 “요청 전후에 공통 로직을 걸어주는 구조(필터/인터셉터/AOP)”가 많아서,
AOP의 용어(특히 Proxy, Pointcut, Advice)만 정확히 잡아두면 이해 속도가 확 올라간다.

profile
백엔드 공부중입니다.

0개의 댓글