본문 바로가기
Batch(배치)

스프링배치 완벽가이드 1 - 배치와 스프링

by 밝지 2023. 10. 23.
728x90
반응형

배치 처리

  • 상호작용이나 중단 없이 유한한 양의 데이터를 처리하는 것으로 정의한다. 배치 처리가 일단 시작되면 아무런 개입 없이 어떤 형태로든 완료된다.
  • 사용성 - 코드의 오류 처리 및 유지 보수성
    • 공통 컴포넌트를 쉽게 확장해 새로운 기능을 추가할 수 있는가?
    • 기존 컴포넌트를 변경할 때 시스템 전체에 미치는 영향을 알 수 있도록 단위테스트가 잘 마련되어 있는가? 
    • 잡이 실패할 때 디버깅에 오랜 시간을 소비하지 않고 언제, 어디서, 왜 실패했는지 알 수 있는가?
  • 확장성 - 100만 건 이상의 트랜잭션 처리도 OK,
  • 가용성
    • 필요할 때 바로 배치 처리를 수행할 수 있는가?
    • 허용된 시간 내에 잡을 수행함으로써 다른 시스템에 영향을 미치지 않게 할 수 있는가?
  • 보안 - 데이터를 안전하게 저장하는 것
    • 민감한 데이터베이스 필드는 암호화 되어 있는가?
    • 실수로 개인 정보를 로그로 남기지는 않는가? 
    • 외부 시스템으로의 접근은 어떠한가? 
    • 자격증명이 필요하며 적절한 방식으로 보안을 유지하고 있는가?
    • 데이터 유효성 검증은?

 

스프링 배치 프레임워크

  • 스프링 배치에는 다음 기능이 구현되어 있다.
    • 데이터 유효성 검증
    • 출력 포매팅
    • 복잡한 비즈니스 규칙을 재사용 가능한 방식으로 구현하는 기능
    • 대규모 데이터셋 처리 기능
  • 스프링 배치 아키텍처
    • 스프링 배치는 레이어 구조로 조립된 세 개의 티어로 이루어져 있다. 
    • 애플리케이션 레이어 - 배치 처리 구축에 사용되는 사용자 코드 및 구성
    • 코어 레이어 - 배치 도메인을 정의 (Job, Step, JobLauncher, JobParameters)
    • 인프라스트럭처 레이어 - ItemReader, ItemWriter를 비롯해 재시작돠 관련된 무제를 해결할 수 있는 클래스와 인터페이스 제공

출처 - 스프링배치 완벽가이드

  • 잡과 스텝 
    • 개념적으로 스프링 배치 잡 = 상태 기계
    • 각 스텝 = 잡을 구성하는 독립된 작업 단위
      • 태스크릿(tasklet) 기반 스텝
        • 스텝이 중지될 때까지 execute 메서드가 계속 반복해서 수행된다.
        • 초기화, 저장 프로시저 실행, 알림 전송과 같은 잡에서 일반적으로 사용된다.
      • 청크(chunk) 기반 스텝
        • 아이템 기반의 처리에 사용한다.
        • 각 청크 기반 스텝은 ItemReader, ItemProcessor, ItemWriter 세 부분으로 구성될 수 있다.
          • 단, ItemProcessor는 필수는 아니다.

출처 - 스프링배치 완벼가이드

 

  • 잡 실행
    • JobRepository
      • 배치 수행과 관련된 수치 데이터(시작 시간, 종료 시간, 상태, 읽기/쓰기 횟수 등), 잡 상태를 유지 관리 한다.
      • 일반적으로 관계형 데이터베이스를 사용하며 스프링 배치 내의 대부분의 주요 컴포넌트가 공유한다.
    • JobLauncher
      • 잡을 실행하는 역할을 담당한다. (Job.execute 메서드 호출)
      • 잡의 재실행 가능 여부 검증
      • 잡의 실행 방법 (현재 스레드에서 수행할지 스레드 풀을 통해 실행할지 등)
      • 파라미터 유효성 검증 등의 처리를 수행한다.
      • 스프링 부트 환경이라면 스프링 부트가 즉시 잡을 실행하는 기능을 제공하므로 직접 다룰 필요는 없다. 
    • 잡을 실행하면 해당 잡은 각 스텝을 실행한다. 
    • 각 스텝이 실행되면 JobRepository는 현재 상태로 갱신된다.
      • 즉, 실행된 스텝, 현재 상태, 읽은 아이템 및 처리된 아이템 수 등이 JobRepository에 저장된다.
    • JobExecution
      • 스프링 배치 잡의 실제 실행을 의미한다.
      • 잡을 구동할 때마다 매번 새로운 JobExecution을 얻게 된다.
      • 잡을 '처음' 실행하면 새로운 JobInstance 및 JobExecution을 얻는다.
        • 만약 실행 실패 후 다시 실행하면, 실행 파라미터가 동일하므로 새 JobInstance는 얻지 못한다.
        • 대신 새로운 JobExecution은 얻는다. <- 이렇게 JobInstance는 여러개의 JobExecution을 가질 수 있다.
    • StepExecution
      • 스텝의 실제 실행을 나타낸다.

 

병렬화

  • 다중 스레드 스텝
    • 스텝 별로 청크를 나누어서 직렬로? 실행
  • 병렬 스텝
    • 스텝을 병렬로 실행
  • 비동기 ItemProcessor/ItemWriter
  • 원격 청킹
  • 파티셔닝
728x90
반응형