인프런 커뮤니티 질문&답변

dohyun_lim님의 프로필 이미지

작성한 질문수

스프링 배치

Chunk Process 아키텍처

트랜잭션 경계 와 트랜잭션 begin에 대한 구분

해결된 질문

작성

·

388

0

안녕하세요 정수원 선생님 질문이 2개 있습니다.

1) "Chunk Process 아키텍처" 첫번째 사진 설명부분 4:26쯤에 트랜잭션 경계와 실제 트랜잭션 begin을 구분하셨는데 이것이 무슨 차이인가요?
아니면 어떻게 받아들여야하는것인가요?

 

2) 또한 코드를 디버깅 걸어서 따라가보니 TaskletStep#doInChunkContext 에서 new TransactionTemplate.execute() 에서 매 chunk마다 트랜잭션이 시작되는것은 확인하였는데
그림에 나온것 처럼 SImpleChunkProvider 다음과정에서 Transaction 시작하는곳을 찾지 못하겠습니다...

 

답변 1

2

정수원님의 프로필 이미지
정수원
지식공유자

1) 트랜잭션 경계라는 의미는 청크 단위로 트랜잭션이 생성되고 종료되기 때문에 청크를 감싸고 있다는 의미에서의 경계라고 보시면 되고 트랜잭션 begin 은 실제 소스코드 레벨에서 트랜잭션이 시작되는 시점과 위치를 의미하신다고 보면 됩니다. 두 가지로 구분했지만 실제로는 동일한 의미로 해석하시면 됩니다.

2) SImpleChunkProvider 에서 ItemReader 의 read() 가 시작됩니다. 즉 여기서부터 실제 트랜잭션이 시작되는 곳이고 마지막으로 ItemWriter 작업이 종료되는 시점에 Commit 이 일어납니다.

즉 소스 코드가 직접 있다는 의미가 아닌 아이템을 읽어드리는 시점에 트랜잭션이 시작된다는 그런 관점에서 이해하시면 됩니다.