caffeine-library / pro-spring-5

🌱 전문가를 위한 스프링5를 읽는 스터디
5 stars 0 forks source link

[keyword] 9장 트랜잭션 관리 키워드 정리 #67

Closed JasonYoo1995 closed 2 years ago

JasonYoo1995 commented 2 years ago

주제

9장 트랜잭션 관리를 읽고 중요✨ 하다고 생각하는 키워드와 선택한 이유에 대해서 코멘트로 달아주세요.

연관챕터

66

wooyounggggg commented 2 years ago

스프링 트랜잭션 추상화

책 9.1 ~ 9.2에 의하면, 자바에서 글로벌 트랜잭션을 관리하기 위해 JtaTransactionManager를 사용합니다. JTA 트랜잭션 매니저가 각 분산 자원을 관리하는 리소스 매니저XA 프로토콜을 기반으로 통신하여 각 리소스에 대한 트랜잭션을 적용합니다.

아래의 그림 또는 책의 그림 9-1에서 개략적인 흐름 파악이 가능합니다 😃

위의 그림에서는 문제점이 있는데, 사용하는 리소스의 벤더마다 제각각의 리소스 매니저를 구현해야 한다는 점입니다. 전형적으로 기술과의 결합도가 높아지는 양상이기 때문에, 스프링은 아래와 같이 PlatformTransactionManager를 이용해 트랜잭션을 추상화합니다.

emiling commented 2 years ago

트랜잭션 타입

로컬 트랜잭션

글로벌 트랜잭션

2PC (2 Phase Commit)

image

책에 있는 표현으로는 Coordinator(Transaction Manager, TM), Cohorts(Resource Manager, RM)로 이해하면 좋을 것 같습니다.

1. TM은 ‘트랜잭션 시작’ 이라는 내용을 로그파일에 작성하고, RM에게 트랜잭션에 대한 요청을 보낸다.
2. RM들은 참여하고 있는 디비는 자신의 로그에 트랜잭션을 기재하고 다른 사용자가 접근 못하게 락을 설정하고 작업을 수행한 뒤 커밋할 준비가 되었다고 TM에게 응답한다.
3. TM은 커밋할 준비가 되었다는 메세지를 받고 ‘트랜잭선 종료’를 로그에 기록한 뒤, RM들에게 커밋 하라고 통보한다.
4. RM들은 이 사실을 트랜잭션 로그에 기록한뒤 커밋을 하고 락을 푼다.
5. 만약 커밋하기전에 참여 RM중 문제가 발생하면 TM은 롤백하라고 RM들에게 통보한다.

작업 요청 단계 (Prepare)

반영 단계 (Commit)

IMG_D15D502F5EA1-1


참고 링크

emiling commented 2 years ago

Spring Transaction

https://user-images.githubusercontent.com/30731518/137599090-eb2665d6-95e7-49d1-8923-09b160f4bf75.png

Isolation Level

https://suhwan.dev/2019/06/09/transaction-isolation-level-and-lock/

이 블로그보다 잘 설명할 자신이 없습니다 😅

트랜잭션 레벨