토비의 스프링 정리
토비의 스프링 - 6.9 6장 정리
ksb-dev
2022. 10. 20. 22:27
6.9.1 정리
- 트랜잭션 경계설정 코드를 분리해서 별도의 클래스로 만들고, 비즈니스 로직 클래스와 동일한 인터페이스를 구현하면 DI의 확장 기능을 이용해 트랜잭션 부가기능을 만들 수 있음
- 트랜잭션처럼 환경과 외부 리소스에 영향을 받는 코드를 분리하면 비즈니스 로직에만 충실한 테스트를 만들 수 있음
- 목 오브젝트를 이용하면 쉽게 고립된 테스트를 만들 수 있음
- DI를 이용한 트랜잭션 분리는 데코레이터 패턴과 프록시 패턴으로 이해될 수 있음
- 번거로운 프록시 클래스 작성은 JDK 다이내믹 프록시를 이용하면 간단히 만들 수 있음
- 다이내믹 프록시는 스태틱 팩토리 메소드를 사용하기 때문에 빈 등록하기 번거로움. 팩토리 빈을 사용하면 되고, 스프링은 자동 프록시 생성 기술에 대한 추상화 서비스를 제공하는 프록시 팩토리 빈을 제공하고 있음
- 프록시 팩토리 빈의 설정이 반복되는 문제를 어드바이스와 포인트컷으로 해결. 자동 프록시 생성기는 어드바이스를 제공하는 프록시를 스프링 컨테이너 초기화 시점에 자동으로 만들어 줌
- 포인트컷은 AspectJ 포인트컷 표현식을 사용하면 편리함
- AOP는 OOP만으로 모듈화하기 힘든 부가기능을 효과적으로 모듈화하도록 도와주는 기술임
- 스프링은 AOP 설정과 트랜잭션 속성을 지정하는 전용 태그를 제공함
- AOP를 이용해 트랜잭션 속성 지정을 하는 방법에는 포인트컷 표현식, 메소드 이름 패턴, @Transactional 애노테이션을 사용하는 방식이 있음
- @Transactional을 이용한 트랜잭셩 속성을 테스트에 적용하면 쉽게 DB를 사용하는 코드의 테스트를 만들 수 있음