본문 바로가기

강의 내용 정리/Spring DB 1

4-7. 트랜잭션 문제 해결 - 트랜잭션 AOP 이해

지금까지 트랜잭션을 편리하게 처리하기 위해서 트랜잭션추상화도 도입하고, 추가로 반복적인 트랜잭션 로직을해결하기위해 트랜잭션템플릿도 도입했다.

 

 

하지만 서비스 계층에 순수한 비지니스 로직만을 남긴다는 목표는 아직 달성하지 못했다.

 

-> AOP를 활용해 해결해보자.

 

 

 

 

# 프록시 도입 후

 

 

프록시 서비스를 만들어서 그 안에서 실제 서비스를 호출하자.

 

-> 이 프록시는 스프링에서 만들어준다.

 

 

 

MemberServiceV2

스프링이 이런 트랜잭션 관련 코드를 내부적으로 만들어준다. 대략 위와 같이 생긴 프록시 코드를 만들어준다.

 

 

 

1. 클라이언트는 프록시를 호출한다.

2. 프록시 안에서 실제 비지니스로직을 호출 후 성공 시 commit(); 언체크예외 시 rollback(); 한다.

 

 

 

 

 

프록시 도입 전: 서비스에 비즈니스로직과 트랜잭션 처리로직이 함께 섞여있다.
프록시 도입 후: 트랜잭션 프록시가 트랜잭션 처리로직을 모두 가져간다. 그리고 트랜잭션을 시작한 후에 실제 서비스를대신 호출한다. 트랜잭션 프록시 덕분에 서비스계층에는 순수한 비즈니스 로직만 남길 수 있다.

 

 

 

 

 

 

 

# 스프링이 제공하는 트랜잭션 AOP

 

 

1. 스프링이 제공하는 AOP 기능을 사용하면 프록시를 매우 편리하게 적용할 수 있다. @Aspect, @Advice, @Pointcut를 사용해서 트랜잭션 처리용 AOP를 직접 구현할 수 있다.


2. 물론 스프링 AOP를 직접 사용해서 트랜잭션을 처리해도 되지만, 트랜잭션은 매우 중요한 기능이고, 누구나 다 사용하는기능이다. 스프링은 트랜잭션 AOP를 처리하기 위한 모든 기능을 제공한다. 스프링 부트를 사용하면 트랜잭션 AOP를처리하기 위해 필요한 스프링빈 들도 자동으로 등록해준다.


3. 트랜잭션 처리가 필요한 곳에 @Transactional 만 붙여 주면 된다. 스프링의 트랜잭션 AOP는 이 애노테이션을 인식해서트랜잭션 프록시를 적용해준다.

 

 

 

Recent Posts
Popular Posts
Recent Comments