[Java와 Spring] Spring AOP

개발log·2024년 4월 2일

자바와 스프링

목록 보기
8/10
post-thumbnail

AOP - 관점 지향 프로그래밍

관점 지향 프로그래밍을 의미

  • Aspect-Oriented Programming의 약자
  • '횡단 관심사'를 분리하는 것에 목적 → 부가기능을 따로 관리하는 것

※ 횡단 관심사 - 애플리케이션에서 코드가 중복되고, 결합도가 높아 다른 로직과 분리할 수 없는 애플리케이션 로직 - 로깅, 보안, 트랜잭션 등


AOP 용어

  • Pointcut - Aspect 적용 위치 지정자
  • JoinPoint - 연결 가능한 지점
  • Advice - 조언, 어떤 조인포인트에서 어떤(언제, 무엇을) 동작을 취할지에 대한 규칙 정의
  • Aspect - Advisor의 집합체
  • Advisor - 조언자, 어떤 조언을 적용할지를 결정하는 역할(어디서, 언제, 무엇을)
  • Target - 부가기능을 부여할 대상

스프링 AOP - 로직 주입

스프링 DI가 의존성에 대한 주입이라면 스프링 AOP는 로직 주입

  • @Aspect - 이 클래스를 AOP에서 사용하겠다.
  • @Before - 대상 메서드 실행 전에 이 메서드를 실행하겠다.
  • 스프링 AOP는 인터페이스(interface) 기반이다.
  • 스프링 AOP는 프록시(proxy) 기반이다.
  • 스프링 AOP는 런타임(runtime) 기반이다.

AOP 동작 과정

1. 대상 객체 생성:

  • 스프링 컨테이너에게 AOP를 적용할 대상 객체(Target)와 해당 객체에 적용할 관점(Aspect)을 설정
  • XML 파일, Java 설정 클래스 등을 통해 수행

2. 프록시 객체 생성:

  • 스프링은 대상 객체를 감싸는 프록시 객체를 생성
  • 프록시 객체는 대상 객체의 메소드 호출을 가로채서 관점에서 정의한 횡단 관심사를 수행할 수 있도록 함

3. 포인트컷 설정:

  • 관점에서 적용할 조인 포인트(메소드 호출, 예외 발생 등)를 결정하는 포인트컷(Pointcut)을 설정
  • 어떤 메소드에 어떤 어드바이스를 적용할지를 결정하는 역할

4. 어드바이스 적용:

  • 스프링은 포인트컷에 의해 결정된 조인 포인트에 관점에서 정의한 어드바이스(Advice)를 적용
  • 어드바이스는 조인 포인트에서 실행될 동작을 정의하며, 메소드 실행 전, 후, 예외 발생 시에 실행될 수 있음

5. 대상 객체 호출:

  • 클라이언트가 대상 객체의 메소드를 호출하면, 프록시 객체가 해당 메소드 호출을 가로채고 관점에서 정의한 어드바이스를 실행
  • 이때 어드바이스에 정의된 횡단 관심사가 수행

장단점

장점:

  • 모듈성 향상 - 횡단 관심사(cross-cutting concern)를 모듈화하여 코드의 모듈성을 향상
    ex) 로깅, 트랜잭션 관리, 보안 등과 같은 횡단 관심사를 별도의 모듈로 분리하여 코드 중복을 감소
  • 유지보수성 향상: AOP는 횡단 관심사를 중앙 집중화하여 관리하기 때문에, 코드의 변경이 필요할 때 해당 관심사를 수정하는 것만으로 여러 모듈에 적용됨

단점:

  • 오버헤드: AOP는 횡단 관심사를 중앙 집중화하여 처리하기 때문에, 런타임 시에 관점(Aspect)을 적용하는 데에 필요한 처리 시간이 증가할 수 있음

  • 복잡성 증가: 각각의 모듈에 관련된 코드가 아니라 횡단 관심사와 관련된 코드가 분산되어 있을 수 있어 코드의 흐름을 이해하기 어려울 수 있음


PSA - 일관성 있는 서비스 추상화

  • PSA (Portable Service Abstraction)
  • 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한 것
profile
나의 개발 저장소

0개의 댓글