Chunk 처리
한 줄 정의
Chunk 처리는 대량 데이터를 한 번에 처리하지 않고 일정 크기의 묶음으로 나누어 읽고 처리하고 저장하는 방식이다.
실무에서 왜 문제 되는가
- 대량 데이터를 한 번에 읽으면 메모리 사용량과 트랜잭션 시간이 커진다.
- 하나의 큰 트랜잭션은 lock 유지 시간이 길고 실패 시 재처리 범위가 크다.
- chunk 크기가 너무 작으면 오버헤드가 커지고 너무 크면 장애 영향이 커진다.
- offset 기반 chunk는 데이터 변경 중 누락이나 중복을 만들 수 있다.
실무 판단 기준
| 상황 | 선택 |
|---|---|
| 데이터가 매우 큼 | chunk 단위 처리 |
| 정렬 기준이 안정적 | keyset 기반 조회 |
| 실패 재처리 필요 | chunk별 상태 저장 |
| 외부 API 호출 포함 | 더 작은 chunk와 재시도 정책 |
자주 나는 실수
- offset pagination으로 변경 중인 데이터를 처리한다.
- 전체 작업을 하나의 트랜잭션으로 묶는다.
- chunk 처리 후 진행 상태를 남기지 않는다.
- chunk 크기를 측정 없이 감으로 정한다.
확인 방법
- 처리 시간, 메모리, DB lock 시간을 chunk 크기별로 비교한다.
- 실패 시 마지막 완료 chunk부터 재시작 가능한지 확인한다.
- 처리 중 데이터 변경이 있어도 누락/중복이 없는지 테스트한다.
핵심 요약
Chunk 처리는 대량 작업을 작은 단위로 나누어 안정성을 높인다.
큰 트랜잭션은 실패 복구와 lock 측면에서 위험하다.
chunk 크기는 처리량, 메모리, 외부 API 비용을 보고 정한다.
진행 상태를 남겨야 실패 후 재처리가 가능하다.
변경 중인 데이터는 offset보다 안정적인 key 기준 처리가 안전하다.
꼬리 질문
- Chunk 크기는 어떤 기준으로 정할 것인가?
- Offset 기반 batch 조회는 왜 위험할 수 있는가?
- Chunk별 트랜잭션은 어떤 장점과 한계가 있는가?