홈 › 실무 배치 › 03 / 6

Chunk 단위 처리와 OOM 방지

섹션 7진행 0 / 6

7. 정리

  • OOM 은 메모리 부족이 아니라 버릴 수 없는 객체가 힙보다 많을 때 난다. 100만 String ≈ 100 MB, 파싱한 객체는 그 2~3배. -Xmx32m 으로 로컬에서 재현하라.
  • 청크 처리 = N건 읽기 → 가공 → 쓰기 → 참조 해제의 반복. 힙에는 언제나 청크 하나만 있으므로 입력 크기와 무관하게 메모리가 일정하다.
  • 청크 크기는 100~1,000 이 관행. 작으면 I/O 오버헤드, 크면 메모리·롤백 범위·락 시간이 커진다. 계산하고 측정하라.
  • Reader 만 스트리밍이면 소용없다. Writer 가 즉시 내보내고, 남기는 것은 입력 크기와 무관한 집계뿐이어야 한다. DB 는 offset 이 아니라 키셋 페이징.
  • 병렬화는 순서 무관 + 스레드 안전 Writer + 백프레셔(Semaphore) 세 조건이 갖춰질 때만. 진행률은 건수·속도·ETA 를 N 청크마다.

다음 레슨 04. 트랜잭션과 재시작 에서는 청크가 곧 커밋 단위라는 사실에서 출발해, 청크 중간 실패 시 롤백 범위, 체크포인트로 이어서 실행하기, 두 번 실행해도 안전한 멱등성을 순수 자바 트랜잭션 시뮬레이션으로 구현합니다.