끄적이는 중...

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가 기존 트랜잭션을 찾을 수 있다

관련글