스프링 AOP와 테스트, 자동 설정 원리

  • 스프링 프레임워크의 세 가지 핵심 기술
    • 의존성 주입(DI)
    • 서비스 추상화(portable service abstraction)
    • 관점 지향 프로그래밍(AOP)
  • 여기서는 관점 지향 프로그래밍에 대해서 알아봄

스프링 AOP

  • 관점 지향 프로그래밍(Aspect Oriented Programming)은 객체지향 프로그래밍과는 다른 방식의 프로그래밍 패러다임
  • 프로그래미의 구조를 관점(aspect) 기준으로 공통된 모듈로 분리하는 방법
  • 객체 지향 프로그래밍에서 모듈 단위는 클래스, 관점 지향 프로그래밍에서는 모듈 단위는 관점
  • 객체 지향 프로그래밍과 관점 지향 프로그래밍은 상호 보완적으로 동작
  • 관점은 여러 클래스에 걸쳐 공통으로 실행되는 기능을 모듈로 분리한 것
  • 관점 지향 프로그래밍을 사용하면 의존으로 발생하는 복잡도를 낮출수 있음
    • 직접 메서드를 호출하는 것이 아닌 프레임워크의 도움을 받아 동작
    • 클래스의 코드와 관점의 코드를 완전히 분리 가능
    • 즉 개발자는 명시적으로 관점 객체를 생성하지 않음
  • 클래스 밖에서 관점의 기능이 실행되므로 서로 완전히 분리된 형태, 이를 관심의 분리(separation of concerns)라고 함
    • 분리된 관심은 애플리케이션에서 클래스의 특정 기능이 실행될때 모듈화된 관점의 기능과 같이 실행
    • 관점만 따로 실행될 수 없음
  • 관점 지향 프로그래밍을 위해 고려해야할점
    • 기능의 분류
      • 기능적 요구 사항: 핵심 비즈니스 로직
      • 비기능적 요구 사항: 비즈니스 로직은 아니지만 애플리케이션의 필요한 기능
        • 로깅, 인증/인가, 트랜잭션
    • 공통 기능의 분류
    • 공통 기능의 적용
  • 기능적 요구사항은 객체지향, 비기능적 요구사항은 관점 지향 프로그래밍으로 작성
  • 핵심 관심사과 횡단 관심사

AOP 용어정리

  • 대상객체
  • 관점
  • 어드바이스
  • 포인트컷
  • 조인 포인트
  • 위빙
  • 프록시 객체

스프링 AOP와 프록시 객체

  • 스프링 AOP는 대상 객체를 감싸는 프록시 객체를 동적으로 생성
  • 클라이언트 클래스와 서버 클래스 사이에 프록시 객체가 클라이언트 클래스의 요청을 가로챔
  • 스프링 AOP는 두 가지 방식을 사용하여 위빙을 구현
    • JDK Proxy
    • CGLib

스프링 부트 테스트

스프링 부트 자동설정