배치 프로세스 개념과 아키텍처
배치 아키텍처 — Reader · Processor · Writer
배치 처리가 온라인 트랜잭션과 어떻게 다른지, 왜 Reader-Processor-Writer 로 나누는지 이해하고, 외부 라이브러리 없이 순수 자바로 Job/Step/Chunk 구조의 미니 배치 프레임워크를 직접 만들 수 있게 됩니다.
1. 왜 배우는가
웹 서비스는 사용자가 버튼을 누를 때마다 요청 하나를 처리합니다. 그런데 회사 시스템의 절반은 사용자가 아무도 없는 새벽에 돌아갑니다. 카드사는 매일 밤 하루치 승인 내역 수천만 건을 모아 정산하고, 통신사는 월초에 가입자 전체의 요금을 계산하며, 쇼핑몰은 매일 아침 어제 구매 이력을 바탕으로 회원 등급을 다시 매깁니다.
이런 작업은 "요청 하나"가 아니라 "데이터 전체"를 대상으로 하며, 사람이 기다리지 않고, 정해진 시간에 자동으로 실행됩니다. 이것이 배치(batch) 처리입니다.
배치는 오래된 기술처럼 보이지만 실무에서 사라지지 않습니다. 오히려 데이터가 커질수록 더 많이 필요합니다. 그리고 배치는 온라인 개발과 다른 종류의 어려움을 가집니다.
100만 건 중 999,999건을 잘 처리하고 마지막 한 건에서 죽으면 어떻게 될까요? 처음부터 다시 돌려야 할까요? 다시 돌리면 이미 처리된 999,999건이 두 번 처리되지는 않을까요? 새벽 3시에 실패한 배치를 아침 9시 전에 복구하려면 어떤 로그가 남아 있어야 할까요? 이런 질문에 답하는 것이 배치 설계입니다.
Spring Batch 같은 프레임워크가 이 문제를 잘 정리해 두었지만, 프레임워크의 설정 방법만 외우면 문제가 생겼을 때 대응하지 못합니다. 이 레슨에서는 프레임워크 없이 순수 JDK 21만으로 배치의 뼈대를 직접 만들어 봅니다. 직접 만들어 보면 Spring Batch 의 ItemReader, Step, JobExecution 같은 용어가 "왜 그렇게 생겼는지" 자연스럽게 보입니다.