인프런 커뮤니티 질문&답변
트랜잭션 동작 원리 정리
해결된 질문
작성
·
508
·
수정됨
2
트랜잭션의 동작 원리에 대해서 정리해봤습니다.
제대로 이해했는지 확인 부탁드립니다! 혹시 잘못 이해하고 있는 부분이 있다면 말씀 부탁드립니다.
서비스 클래스의 메소드에
@Transactional이 있으면 스프링은 해당 비즈니스 로직을 상속한 AOP 프록시 객체를 생성한 후, 이를 스프링 빈에 등록한다.클라이언트가 해당
프록시를 호출한다. (비즈니스 로직 자체를 호출하지 않는다)스프링은 스프링 컨테이너에 등록된
트랜잭션 매니저를 획득한다.트랜잭션 매니저의
transactionManager.getTransaction()을 호출하여 트랜잭션을 시작한다.트랜잭션 매니저는 스프링 컨테이너에 등록된
데이터 소스를 이용하여커넥션을 생성한다.커넥션의
con.setAutoCommit(false)호출로 수동 커밋 모드로 변환한다.생성하고 설정을 끝낸 커넥션을
트랜잭션 동기화 매니저에 보관한다.실제 서비스를 호출하면, 서비스의 비즈니스 로직과 리포지토리의 데이터 접근 로직이 수행된다.
리포지토리의 데이터 접근 로직은 트랜잭션 동기화 매니저에 보관된 커넥션을 획득한 후 DB에 접근하여 SQL을 수행한다.
비즈니스 로직이 끝나면서 AOP 프록시에서
커밋또는롤백을 통해 트랜잭션을 종료한다.트랜잭션을 종료함으로써 커넥션은 커넥션 풀에 반납된다.
답변 1
0
안녕하세요. 김동민님, 공식 서포터즈 David입니다.
네, 잘 정리하셨습니다.
정리하신 내용 대부분이 트랜잭션 문제 해결 - 트랜잭션 AOP 정리에서 다뤄지고 있으니 참고 부탁드립니다.
감사합니다.






감사합니다!!