개요
스프링의 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 |