본문 바로가기

Spring/토비의 스프링 3.1

6장. AOP


개요

스프링의 3대 기반 기술 : IoC/DI, 서비스 추상화, AOP

  • AOP : 가장 이해하기 힘든 난해한 용어와 개념을 가진 기술

AOP에 대한 이해

  • 등장배경
  • 스프링에 도입한 이유
  • AOP의 장점

가장 인기있는 AOP 적용 대상

  • 선언적 트랜잭션

목차 실화야?

목차

6.1 트랜잭션 코드의 분리

6.1.1 메소드 분리

6.1.2 DI를 이용한 클래스의 분리

  • DI 적용을 이용한 트랜잭션 분리
  • UserService 인터페이스 도입
  • 분리된 트랜잭션 기능
  • 트랜잭션 적용을 위한 DI 설정
  • 트랜잭션 분리에 따른 테스트 수정

6.2 고립된 단위 테스트

6.2.1 복잡한 의존관계 속의 테스트

6.2.2 테스트 대상 오브젝트 고립시키기

  • 테스트를 위한 UserServiceImpl 고립
  • 고립된 단위 테스트 활용
  • UserDao 목 오브젝트
  • 테스트 수행 성능의 향상

6.2.3 단위 테스트와 통합 테스트

6.2.4 목 프레임워크

  • Mockito 프레임워크

6.3 다이내믹 프록시와 팩토리 빈

6.3.1 프록시와 프록시 패턴, 데코레이션 패턴

  • 데코레이터 패턴
  • 프록시 패턴

6.3.2 다이내믹 프록시

  • 프록시의 구성과 프록시 작성의 문제점
  • 리플렉션
  • 프록시 클래스
  • 다이내믹 프록시 적용
  • 다이내믹 프록시의 확장

6.3.3 다이내믹 프록시를 이용한 트랜잭션 부가기능

  • 트랜잭션 InvocationHandler
  • TransactionHandler와 다이내믹 프록시를 이용하는 테스트

6.3.4 다이내믹 프록시를 위한 팩토리 빈

  • 팩토리 빈
  • 팩토리 빈의 설정 방법
  • 다이내믹 프록시를 만들어주는 팩토리 빈
  • 트랜잭션 프록시 팩토리 빈
  • 트랜잭션 프록시 팩토리 빈 테스트

6.3.5 프록시 팩토리 빈 방식의 장점과 한계

  • 프록시 팩토리 빈의 재사용
  • 프록시 팩토리 빈 방식의 장점
  • 프록시 팩토리 빈의 한계

6.4 스프링의 프록시 팩토리 빈

6.4.1 ProxyFactoryBean

  • 어드바이스: 타깃이 필요 없는 순수한 부가기능
  • 포인트컷: 부가기능 적용 대상 메소드 선정 방법

6.4.2 ProxyFactoryBean 적용

  • TransactionAdvice
  • 스프링 XML 설정파일
  • 테스트
  • 어드바이스와 포인트컷의 재사용

6.5 스프링 AOP

6.5.1 자동 프록시 생성

  • 중복 문제의 접근 방법
  • 빈 후처리기를 이용한 자동 프록시 생성기
  • 확장된 포인트컷
  • 포인트컷 테스트

6.5.2 DefaultAdvisorAutoProxyCreator의 적용

  • 클래스 필터를 적용한 포인트컷 작성
  • 어드바이저를 이용하는 자동 프록시 생성기 등록
  • 포인트컷 등록
  • 어드바이스와 어드바이저
  • ProxyFactoryBean 제거와 서비스 빈의 원상복구
  • 자동 프록시 생성기를 사용하는 테스트
  • 자동생성 프록시 확인

6.5.3 포인트컷 표현식을 이용한 포인트컷

  • 포인트컷 표현식
  • 포인트컷 표현식 문법
  • 포인트컷 표현식 테스트
  • 포인트컷 표현식을 이용하는 포인트컷 적용
  • 타입 패턴과 클래스 이름 패턴

6.5.4 AOP란 무엇인가?

  • 트랜잭션 서비스 추상화
  • 프록시와 데코레이터 패턴
  • 다이내믹 프록시와 프록시 빈 팩토리 빈
  • 자동 프록시 생성 방법과 포인트 컷
  • 부가기능의 모듈화
  • AOP: 애스팩트 지향 프로그래밍

6.5.5 AOP 적용기술

  • 프록시를 이용한 AOP
  • 바이트코드 생성과 조작을 통한 AOP

6.5.6 AOP 용어

6.5.7 AOP 네임스페이스

  • AOP 네임스페이스
  • 어드바이저 내장 포인트컷

6.6 트랜잭션 속성

6.6.1 트랜잭션 정의

  • 트랜잭션 전파
  • 격리수준
  • 제한시간
  • 읽기전용

6.6.2 트랜잭션 인터셉터와 트랜잭션 속성

  • TransactionInterceptor
  • 메소드 이름 패턴을 이용한 트랜잭션 속성 지정
  • tx 네임스페이스를 이용한 설정 방법

6.6.3 포인트컷과 트랜잭션 속성의 적용 전략

  • 트랜잭션 포인트컷 표현식은 타입 패턴이나 빈 이름을 이용한다.
  • 공통된 메소드 이름 규칙을 통해 최소한의 트랜잭션 어드바이스와 속성을 정의한다.
  • 프록시 방식 AOP는 같은 타깃 오브젝트 내의 메소드를 호출할 때는 적용되지 않는다.

6.6.4 트랜잭션 속성 적용

  • 트랜잭션 경계설정의 일원화
  • 서비스 빈에 적용되는 포인트컷 표현식 등록
  • 트랜잭션 속성을 가진 트랜잭션 어드바이스 등록
  • 트랜잭션 속성 테스트

6.7 애노테이션 트랜잭션 속성과 포인트컷

6.7.1 트랜잭션 애노테이션

  • @Transactional
  • 트랜잭션 속성을 이용하는 포인트컷
  • 대체 정책
  • 트랜잭션 애노테이션 사용을 위한 설정

6.7.2 트랜잭션 애노테이션 적용

6.8 트랜잭션 지원 테스트

6.8.1 선언적 트랜잭션과 트랜잭션 전파 속성

6.8.2 트랜잭션 동기화와 테스트

  • 트랜잭션 매니저와 트랜잭션 동기화
  • 트랜잭션 매니저를 이용한 테스트용 트랜잭션 제어
  • 트랜잭션 동기화 검증
  • 콜백 테스트

6.8.3 테스트를 위한 트랜잭션 애노테이션

  • @Transactional
  • @Rollback
  • @TransactionConfiguration
  • NotTransactional과 Propagation.NEVER
  • 효과적인 DB 테스트

6.9 정리


' Spring > 토비의 스프링 3.1' 카테고리의 다른 글

6.2 고립된 단위 테스트  (0) 2019.02.12
6.1 트랜잭션 코드의 분리  (0) 2019.02.07
5.5 정리  (0) 2019.02.07
5.4 메일 서비스 추상화  (0) 2019.02.07
5.3 서비스 추상화와 단일 책임 원칙  (0) 2019.02.06