inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 문제 해결 - 트랜잭션 매니저1

DataSourceUtils.getConnection() 질문 있습니다.

435

blackhole124

작성한 질문수 60

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
스크린샷 2023-09-04 오후 8.37.53.png스크린샷 2023-09-04 오후 8.38.00.png강사님께서 설명하신 내용 중에

DataSourceUtils.getConnection()는 트랙잭션 동기화 매니저에서 관리하는 커넥션이 있으면 해당 커넥션을 반환한다고 말씀하셨습니다.

근데 여기서 제가 궁금한 부분은

어떤 커넥션인지 구분하는 부분이 없는데 어떻게 구별해서 커넥션을 반환하는 건가요?

예를 들어, A통장에 대한 트랙잭션을 시작한 뒤에

A통장 커넥션이 트랙잭션 동기화 매니저에 존재할 때,

동시에 B 통장도 트랙잭션을 시작하고

B 통장의 커넥션이 트랙잭션 동기화 매니저에 존재하는 상황에서

데이터 접근 로직에서 트랙잰션 매니저에 접근해서 커넥션을 가져오는 과정에서 어떻게 A 커넥션, B 커넥션을 구분해서 반환하는 건가요??

설명 부탁드립니다.

spring mvc spring-jdbc

답변 1

2

y2gcoder

안녕하세요. blackhole124님, 공식 서포터즈 y2gcoder입니다.

질문을 듣고 좀 더 정확하게 답변을 드리고 싶어 DataSourceUtils의 getConnection() 부터 코드를 타고 들어가 봤습니다.

image

DataSourceUtils의 getConnection()에서 호출하는 doGetConnection()을 들어가보면 내부에서 TransactionSynchronizationManager.getResource()를 이용해서 트랜잭션 리소스를 불러오는 것을 볼 수 있습니다! 해당 메서드를 찾아 보겠습니다.

image

위가 TransactionSynchronizationManager 의 getResource()와 내부 호출하는 doGetResource()의 구현 코드입니다. resources 라는 필드에서 값을 가져오는 것으로 보입니다. resources 라는 필드를 보겠습니다.

image

TransactionSynchronizationManager은 필드들을 전부 ThreadLocal 을 사용해서 관리하고 있는 것을 알 수 있습니다.

이를 바탕으로 질문해주신 것에 대해 대답을 드리자면, 트랜잭션 리소스는 쓰레드별로 생기게 됩니다. 예를 들어 A통장의 이체 요청이 A쓰레드, B통장의 이체 요청이 B쓰레드라고 하면, 트랜잭션들은 각각 쓰레드별로 생겨 각 쓰레드로컬 저장소에 저장됩니다. 그 후 트랜잭션 동기화 매니저에서는 쓰레드별로 저장되어있는 트랜잭션 리소스를 주는 것으로 이해할 수 있습니다.

 

감사합니다.

spring initialiser 어떤걸 선택해야될지 모르겠어요

0

38

2

트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.

0

51

1

jdbc 학습하다 궁금해서 질문드려요

0

84

1

정상이체와 이체중 예외발생 차이

0

70

2

이번 강의부터가 JDBC 직접 사용 맞나요?

0

89

1

순수한 서비스 계층에 대한 의문???

0

82

2

3_4test, 4test 자동 리소스 안됨

0

59

2

데이터베이스 선택 관련 질문.

0

70

2

after 메서드 사용 유무

0

59

2

데이터베이스 접근 및 DB 락

0

57

1

@SpingBootTest, @TestConfiguration

0

57

1

Read Committed 격리 수준 사용 관련 질문

0

50

1

AopCheck Test 부분의 EnhancerBySpring 확인 법??

0

69

2

커리큘럼 관련 질문

0

78

1

서비서 계층 스프링 프레임워크 사용

0

89

1

validation(toMember)의 위치

0

84

2

데이터 계층에서 서비스 로직의 datasource를 인식하는 방법

0

166

2

member 상수 질문

0

124

2

ctrl + F6 이후로 con 인식이 안 됩니다

0

154

2

DrivenManager 와 Connection 반환에 대한 질문입니다!

0

110

1

섹션5 트랜잭션 템플릿관련 질문(이기종 DB)

0

116

1

세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?

0

103

1

트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?

0

98

1

강의 14분쯤 Exception 질문

0

116

2