홈 › 실무 배치 › 06 / 6

메서드 활용 패턴 (배치 유틸)

섹션 6진행 0 / 6

6. 정리

  • 배치 잡의 뼈대(열기/닫기, 청크, 재시도, 스킵, 시간 측정)는 헬퍼 메서드로 한 번만 쓰고, 잡은 "다른 부분"을 람다로 넘긴다. withReader(path, r -> ...)가 execute-around 패턴의 전형이다.
  • 체크 예외는 람다에 못 들어가므로 throws IOException이 있는 자체 함수형 인터페이스(IOAction)와 io() 래퍼로 UncheckedIOException으로 바꾼다. 람다에서 지연 스트림을 밖으로 돌려주면 닫힌 파일을 읽게 된다.
  • 청크 헬퍼는 새 버퍼를 만들고, 마지막 자투리를 잊지 않는다. timed/retry/processWithSkip은 원래 작업을 감싸는 데코레이터이고 겹치는 순서가 의미를 정한다.
  • 파라미터는 args → record(parse에서 기본값, compact 생성자에서 검증). 결과는 BatchReport 빌더로 누적해 요약 한 줄 + 오류 목록. 잡 실행기는 이름 → Function<JobParams, BatchReport> 맵이다.
  • 언제 죽어도 안전하게: 원자적 쓰기(.tmp + ATOMIC_MOVE), 이미 처리됨 검사로 멱등, finally로 메서드 종료 정리, shutdown hook으로 JVM 종료 정리(짧게). 날짜는 유틸 안이 아니라 파라미터로.

네 레벨의 메서드 패턴 레슨이 여기서 끝납니다. 초급의 "쪼개고 부르기", 중급의 "만들고 돌려주기 설계", 고급의 "함수를 값으로 조합하기", 배치의 "헬퍼로 뼈대 재사용하기"는 모두 같은 질문의 답입니다. 이 코드 조각에 이름을 붙일 수 있는가, 그리고 그것을 어디까지 재사용할 수 있는가.