[Spring] AOP

Bam·2025년 9월 13일
0

Spring

목록 보기
73/73
post-thumbnail

AOP

AOP관점 지향 프로그래밍 Aspect Oriented Programming을 의미하는 개념입니다. 관점 지향 프로그래밍이란 핵심 기능과 공통 관심사를 분리하여 모듈화 시키는 프로그래밍 기법입니다.

이때 공통 관심사라고 하는 것은 여러 핵심 기능에서 자주/반복적으로 사용되는 보안, 로깅, 트랜잭션, 모니터링 등의 작업을 의미합니다. 이들은 현대 프로그램에서 보조 기능으로서 자주 사용되기 때문에 이들을 잘 분리해서 한 곳에 모아놓으면 사용 및 관리, 유지보수가 쉬워집니다.

또한 분리된 공통 관심사 모듈을 공통 관심사를 선택적으로 삽입할 수 있어 편리하게 이용할 수 있게 됩니다.

즉, 비즈니스 코드는 주 기능만 제공하고 로깅 등의 보조 기능들은 별도의 모듈(Aspect)로부터 가져와서 사용한다라는 것을 의미합니다.

이를 통해 비즈니스 코드를 가진 클래스는 구조가 단순해지고 유지보수가 쉬워지게 됩니다.


스프링 AOP

스프링 프레임워크에서 제공하는 AOP 기능은 프록시 패턴을 이용합니다.

스프링에서 공통 관심사가 될 대상 클래스에는 @Aspect 어노테이션을 붙이고 스프링 컨테이너는 이 어노테이션을 통해 프록시 객체 생성 및 동작을 수행하게 됩니다.

스프링 AOP 용어

스프링 AOP에서 언급되는 용어들은 다음과 같습니다.

용어설명
aspect구현되는 공통 관심사
adviceapsect의 구현체
joinpointadvice가 수행되는 시점
pointcutadvice가 적용되는 대상
targetadvice가 적용되는 클래스
weaving주기능에 적용된 advice

이 용어들을 간단하게라도 알아놓고 다음 과정을 이해해보면 생각보다 간단하다는 것을 알 수 있습니다.

스프링 AOP 실행 과정

간단하게 과정을 정리하면 다음과 같습니다.

  1. 스프링 컨테이너는 어플리케이션 시작 시점에 빈들을 스캔, 이때 @Aspect가 선언된 클래스를 찾고 이 클래스가 적용될 대상(target)들을 식별합니다.

  2. AOP 적용 대상 클래스들은 원본 객체가 아닌 프록시 객체가 컨테이너에 등록

  3. 클라이언트 코드에서 대상 클래스를 호출하면 프록시 객체가 호출을 가로채 pointcut 조건에 해당하는 지 판별합니다. 이때 조건에 해당되는 경우 Advice를 호출합니다.

    Advice에 선언된 호출 시점에 따라 동작이 달라집니다.

    • @Before: 메소드 실행 전에 실행
    • @AfterRetruning: 메소드가 정상적으로 종료된 후 실행
    • @AfterThrowing: 예외 발생 시 실행
    • @Around: 메소드 실행 전후로 실행
  4. Advice 실행 과정에서 proceed()가 호출(또는 프록시 객체 내부에서 원본 객체 호출)되면 실제 대상 객체의 메소드가 실행

  5. 이후 @After~~~의 Advice가 후처리 실행되고 결과를 클라이언트에 반환합니다.

0개의 댓글