• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

트랜잭션 동작 원리 정리

23.12.07 18:52 작성 23.12.07 18:52 수정 조회수 246

1

트랜잭션의 동작 원리에 대해서 정리해봤습니다.

제대로 이해했는지 확인 부탁드립니다! 혹시 잘못 이해하고 있는 부분이 있다면 말씀 부탁드립니다.

 

  1. 서비스 클래스의 메소드에 @Transactional 이 있으면 스프링은 해당 비즈니스 로직을 상속한 AOP 프록시 객체를 생성한 후, 이를 스프링 빈에 등록한다.

  2. 클라이언트가 해당 프록시를 호출한다. (비즈니스 로직 자체를 호출하지 않는다)

  3. 스프링은 스프링 컨테이너에 등록된 트랜잭션 매니저를 획득한다.

  4. 트랜잭션 매니저의 transactionManager.getTransaction()을 호출하여 트랜잭션을 시작한다.

  5. 트랜잭션 매니저는 스프링 컨테이너에 등록된 데이터 소스를 이용하여 커넥션을 생성한다.

  6. 커넥션의 con.setAutoCommit(false) 호출로 수동 커밋 모드로 변환한다.

  7. 생성하고 설정을 끝낸 커넥션을 트랜잭션 동기화 매니저에 보관한다.

  8. 실제 서비스를 호출하면, 서비스의 비즈니스 로직과 리포지토리의 데이터 접근 로직이 수행된다.

  9. 리포지토리의 데이터 접근 로직은 트랜잭션 동기화 매니저에 보관된 커넥션을 획득한 후 DB에 접근하여 SQL을 수행한다.

  10. 비즈니스 로직이 끝나면서 AOP 프록시에서 커밋 또는 롤백을 통해 트랜잭션을 종료한다.

  11. 트랜잭션을 종료함으로써 커넥션은 커넥션 풀에 반납된다.

답변 1

답변을 작성해보세요.

0

David님의 프로필

David

2023.12.07

안녕하세요. 김동민님, 공식 서포터즈 David입니다.

네, 잘 정리하셨습니다.

정리하신 내용 대부분이 트랜잭션 문제 해결 - 트랜잭션 AOP 정리에서 다뤄지고 있으니 참고 부탁드립니다.

감사합니다.

김동민님의 프로필

김동민

질문자

2023.12.08

감사합니다!!