DevBoi

[Spring Batch] 스프링 배치 트랜잭션 관리 청크기반으로 하는 이유 본문

Develop/[Spring Batch]

[Spring Batch] 스프링 배치 트랜잭션 관리 청크기반으로 하는 이유

HiSmith 2022. 4. 11. 12:46
반응형

Spring Batch에서 Chunk란 데이터 덩어리로 작업할때 각 커밋 사이에 처리되는 row수를 얘기한다.

즉, Chunk 지향 처리는 한번에 하나씩 데이터를 읽어, Chunk라는 덩어리를 만들고, Chunk 단위로 트랜잭션을 다루는 것을 의미한다.

 

Chunk 단위로 트랜잭션을 수행하기 때문에, 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 커밋된 트랜잭션 범위까지는 반영이 된다는 것이다.

 

commit - interval : reader - processor가 commit-interval 만큼 반복된 후, 가공된 데이터를 writer에서 bulk처리하는 구조이다.

 

 

청크 지향을 사용해야하는 이유는 뭐지?

 

일반적으로 대용량 데이터를 처리하는 배치 프로세스 특성상, 

대량 데이터를 하나의 트랜잭션으로 처리하기에는 어려움이 있기 떄문에, 대상 데이터를 임의의 Chunk 단위로 트랜잭션 동작을 수행하는 것을 의미한다.

 

commitInterval 단위로 트랜잭션 처리가 일어난다고 보면된다.

물론, 청크지향 프로세싱은 청크단위의 트랜잭션만 제공해주는 것이아니다.

 

1. 내결함성을 위한, 다양한 기능들을 제공한다.

배치 처리 과정중에 단순 데이터 포맷 불일치 등의 문제로, 특이 케이스들을 특정하여 컨트롤 할 수 있다.

(skip,retry, no-rollback 정책 수행도 가능)

 

2. 다양한 ItemReader를 지원한다.

 

3. multi-thread처리를 위한 기능 또한 제공한다.

 

반응형