WEBBOOK CHAPTER

실무 스프링 배치 6: 37장. FlatFileItemReader를 production 입력으로 키우기

37장. FlatFileItemReader를 production 입력으로 키우기

예제의 작은 CSV는 orderId,sellerId,grossAmount 세 열이지만 운영 입력은 계약 버전, 통화, 세금, 취소·보정 구분이 필요하다. header를 단순히 한 줄 건너뛰지 말고 기대 열과 순서를 검증한다. 선택 열 추가는 구버전 reader가 무시할 수 있는지, 필수 열 변경은 새 schema version으로 분리할지 정한다.

FlatFileItemReaderBuilder에는 고유 name, Resource, encoding, strict mode, line mapper를 명시한다. field mapper에서 금액 범위와 식별자 형식을 확인하되 seller 존재 여부처럼 DB가 필요한 검증은 별 processor 또는 사전 기준정보 snapshot에서 수행한다. 한 항목의 validation 때문에 reader cursor가 외부 상태에 의존하지 않게 한다.

multi-resource 입력은 파일 순서를 고정한다. object storage listing 순서를 믿지 않고 manifest에 URI와 checksum 순서를 기록한다. 파일 경계에서 crash할 때 resource index와 line cursor가 함께 복구되는지 test한다. 새 파일이 실행 중 listing에 나타나도 현재 JobInstance에 섞지 않는다.

문자 인코딩 오류는 replacement character로 조용히 바꾸지 않는다. 수신 단계에서 UTF-8 여부와 newline, BOM, 최대 line length를 검사한다. 한 줄이 수백 MB라면 reader가 memory를 소진하기 전에 quarantine한다.