Issue
PR
Changes
수정된 문서
Merge
머지 완료되었습니다.
분석
Issuer가 두 가지 상반된 문서 내용에 대한 해결 방안을 이미 제안했음에도 불구하고, PR을 제출하는 입장에서는 코드 레벨에서 더 명확한 확인이 필요하다고 생각했습니다. 구체적으로, ItemWriteListener
의 afterWrite
메서드가 트랜잭션 커밋 전에 실행되는지, 아니면 커밋 후에 실행되는지에 대한 검증이 중요하다고 판단되었습니다.
ChunkOrientedTasklet
클래스 내에서 process
메서드가 호출됩니다. chunkProcessor
로는 간단한 구현체인 SimpleChunkProcessor
클래스의 코드를 살펴보도록 하겠습니다.
beforeWrite
, writeItems
, doAfterWrite
세가지 메서드가 순차적으로 호출됨을 알 수 있습니다. doAfterWrite
내부의 메서드를 살펴보면 아래와 같이 listener
의 afterWrite
메서드를 호출합니다.
그렇다면 트랜잭션 단위는 뭐야?
스프링 배치에서 트랜잭션의 기본 단위는 '청크'입니다. 이는 정해진 양의 데이터를 읽고 처리한 후 쓰기까지의 전체 과정이 하나의 트랜잭션으로 관리된다는 것을 의미합니다.
이와 관련해 이번 PR 작업을 위한 리서치 과정에서 흥미로운 추가 정보를 발견했습니다. 바로 ChunkListener
의 afterChunk
메소드는 ItemWriteListener
의 afterWrite
와 다르게 트랜잭션이 실제로 커밋된 후에 실행된다는 사실입니다.
느낀점
스프링 배치 프로젝트의 규모가 크고 아직 배울 것이 많아, 간단한 문서 기여조차도 많은 시간과 노력이 필요했습니다. 그러나 이 과정을 통해 얻은 지식과 경험은 그 노력보다 훨씬 가치가 있는 것 같습니다.
앞으로도 더 열심히 기여하며 성장하겠습니다!