Note
[Transactional] Spring이 ThreadLocal을 이용해서 현재 스레드의 DB 자원을 어떻게 연결하는지
Spring은 이런 정보를 관리한다
Thread A
└─ 현재 트랜잭션 관련 자원
└─ DataSource → ConnectionHolder
└─ Connection
중요한 건 Connection 자체를 그냥 변수 하나에 박아두는 게 아니라, 보통 DataSource를 키처럼 사용해서 그 DataSource에 연결된 트랜잭션 자원을 찾는 구조다
아래와 같은 관계를 현재 Thread에 묶어 둔다 그래서 나중에 Repository가 DB 작업을 하려고 할 때 지금 이 Thread에서
이 DataSource용 Connection이 이미 있나? 를 확인하고, 있으면 새 Connection을 또 빌리지 않고 기존 Connection을 재사용할 수 있다
DataSource A → Connection #3
ThreadLocal을 쓰는 이유 : 지금 이 요청을 처리하는 Thread가 어떤 트랜잭션 자원을 사용 중인지 잊지 않기 위해서
추가로, 이 구조 덕분에 REQUIRED가 기존 트랜잭션을 찾을 수 있다
'Note' 카테고리의 다른 글
| [Transaction] TransactionSynchronizationManager 구조 (0) | 2026.10.06 |
|---|---|
| [Transactional] 트랜잭션이 시작됐는데, Connection을 어디다 들고 있지? (0) | 2026.10.06 |
| [Monitoring, Todak-Todag] Application Performance Monitoring (0) | 2026.10.05 |
| [Java] Character (0) | 2026.10.05 |
| [Java] StringBuilder (0) | 2026.10.05 |