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