# @Transactional
이제야 비로소 서비스계층에 순수한 비지니스로직만 남게 되었다.
# Test
이전의 테스트는 DriverManagerDataSource, PlatformTransactionManager 모두 직접 만들어서 사용하였다.
-> 하지만 이제 스프링이 직접 프록시를 만들어주어야하므로 필요한 것들이 모두 빈으로 등록 되어있어야한다.
-> 이 상태에서 테스트 진행 시 트랜잭션이 적용되지 않는다.
롤백이 되지 않아 테스트에 실패하는 것을 볼 수 있다.
@SpringBootTest
이런 식으로 필요한 모든 것을 빈으로 등록해 주어야 한다.
1. @SpringBootTest: 스프링 AOP를 적용하려면 스프링 컨테이너가 필요하다. 이 애노테이션이 있으면 테스트시 스프링부트를 통해 스프링 컨테이너를 생성한다. 그리고 테스트에서 @Autowired등을 통해 스프링 컨테이너가 관리하는 빈 들을 사용할 수 있다.
2. @TestConfiguration: 테스트 안 에서 내부 설정 클래스를 만들어서 사용하면서 이 에노테이션을 붙이면, 스프링부트가 자동으로 만들어 주는 빈들에 추가로 필요한 스프링 빈들을 등록하고 테스트를 수행할 수 있다.
# 스프링이 만들어준 프록시가 실제 적용되었을까?
확인을 위해 위와같이 로그를 찍어보았다.
프록시가 적용되었다면 memberService는 프록시객체가, memberRepository는 실제 객체가 적용되어야한다.
스프링이 CGLIB으로 생성된 프록시객체를 memberService에 주입해 준 것을 확인 할 수 있다.
(이 프록시 객체에는 트랜잭션을 관리하는 로직 + 실제 비지니스로직을 호출하는 코드로 되어있다.)
꾸준히 다시보자.
1. 221014
2. 221101
'Java, Spring > Spring DB 1' 카테고리의 다른 글
4-10. 스프링 부트의 자동 리소스 등록 (0) | 2022.10.10 |
---|---|
4-9. 트랜잭션 문제 해결 - 트랜잭션 AOP 정리 (0) | 2022.10.09 |
4-7. 트랜잭션 문제 해결 - 트랜잭션 AOP 이해 (0) | 2022.10.09 |
4-6. 트랜잭션 문제 해결 - 트랜잭션 템플릿 (0) | 2022.10.09 |
4-5. 트랜잭션 문제 해결 - 트랜잭션 매니저2 (0) | 2022.10.09 |