본문 바로가기

강의 내용 정리/Spring DB 1

4-8. 트랜잭션 문제 해결 - 트랜잭션 AOP 적용

 

# @Transactional

 

 

 

이제야 비로소 서비스계층에 순수한 비지니스로직만 남게 되었다.

 

 

 

 

# Test

 

MemberServiceV3_2Test

 

이전의 테스트는 DriverManagerDataSource, PlatformTransactionManager 모두 직접 만들어서 사용하였다.

 

-> 하지만 이제 스프링이 직접 프록시를 만들어주어야하므로 필요한 것들이 모두 빈으로 등록 되어있어야한다.

-> 이 상태에서 테스트 진행 시 트랜잭션이 적용되지 않는다.

 

롤백이 되지 않아 테스트에 실패하는 것을 볼 수 있다.

 

 

 

 

 

 

 

@SpringBootTest

 

 

 

이런 식으로 필요한 모든 것을 빈으로 등록해 주어야 한다.

 

 

1. @SpringBootTest: 스프링 AOP를 적용하려면 스프링 컨테이너가 필요하다. 이 애노테이션이 있으면 테스트시 스프링부트를 통해 스프링 컨테이너를 생성한다. 그리고 테스트에서 @Autowired등을 통해 스프링 컨테이너가 관리하는 빈 들을 사용할 수 있다.

 


2. @TestConfiguration: 테스트 안 에서 내부 설정 클래스를 만들어서 사용하면서 이 에노테이션을 붙이면, 스프링부트가 자동으로 만들어 주는 빈들에 추가로 필요한 스프링 빈들을 등록하고 테스트를 수행할 수 있다.

 

 

 

 

 

 

 

 

 

 

# 스프링이 만들어준 프록시가 실제 적용되었을까?

 

 

 

확인을 위해 위와같이 로그를 찍어보았다.

 

프록시가 적용되었다면 memberService는 프록시객체가, memberRepository는 실제 객체가 적용되어야한다.

 

 

 

스프링이 CGLIB으로 생성된 프록시객체를 memberService에 주입해 준 것을 확인 할 수 있다.

(이 프록시 객체에는 트랜잭션을 관리하는 로직 + 실제 비지니스로직을 호출하는 코드로 되어있다.)

 

 

 

 

 

꾸준히 다시보자.

 

1. 221014

2. 221101

Recent Posts
Popular Posts
Recent Comments