빨간색코딩

[스프링배치 완벽가이드] 1장 배치와 스프링 본문

Spring

[스프링배치 완벽가이드] 1장 배치와 스프링

빨간색소년 2021. 8. 18. 00:24

초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금씩 적어보았다. 책은 꼭 사서 보시길 바랍니다..

 

1. 배치 처리는 언제?

  • 배치 처리는 상호 작용이나 중단없이 유한한 양의 데이터를 일괄로 처리하는 것
  • 실시간 처리가 불필요하거나 최선이 아니고, 주기적으로 반복해야할 때
    • 월별 거래명세서
  • 자원의 효율적 사용
    • 데이터과학분야

2. 배치 역사

  • 과거에는 메인프레임 서버에서 코볼로 개별 배치들을 작업하고 수행
  • 2007년 Accenture 의 도메인 지식 + Pivotal 의 스프링 기술을 결합하여 오픈소스 배치를 개발
  • 2008년 3월 : 스프링배치 1.0 출시
  • 2009년 4월 : 스프링배치 2.0
    • jdk 1.5
  • 2014년 : 스프링배치 3.0
    • JSR 352 구현
  • 2017년 : 스프링배치 4.0
    • java config

3. 배치 어플리케이션을 개발할 때의 특성

  • 사용성 : 오류 처리 및 유지보수가 쉬운가?
    • job이 실패했을 때, 디버깅에 오랜시간을 쏟진 않을지?
    • 테스트 용이성 등
  • 확장성 : 배치 어플리케이션은 왠만한 웹어플리케이션보다 대용량을 다룬다.
  • 가용성 : 수행되어야만 하는 시간에 바로 수행이 가능한지?, 다른시스템에 영향은 없는지?

4. 자바(or 스프링) 배치의 이점

  • 유지보수성
    • 배치는 다른 어플리케이션의 코드들보다 수명이 길다.
      • 밖으로 들어나지 않기때문
    • 테스트 용이성, 풍부한 API
  • 유연성
    • JVM 을 이용한 이식성 (기존의 코볼, C++ 등과 비교했을 때)
    • 코드 공유능력 (POJO 재활용 등)
  • 확장성
    • 과거의 메인프레임 방식이나, 커스텀하게 처리하던 방식은 병렬 처리를 하려면 고려할게 많음. 확장성과 안정성이 떨어짐
    • 자바(or스프링) 배치는 단일 처리, 병렬 처리 등이 모두 가능함
  • 개발인력
    • 자바, 스프링 프레임워크를 기반
    • 커뮤니티의 강력한 지원
  • 비용
    • 오픈소스

5. 배치 프레임워크 중 스프링배치를 쓰면 뭐가 좋나?

  • ETL(추출=extract - 변환=transform - 적재=load) 패턴에 적합
    • 청크 기반 처리
    • 다양한 확장 기능
  • 데이터 마이그레이션
    • 보통 1회성으로 대충 만들 가능성이 높으나, 스프링 배치를 사용한다면, 풍부한 지원(커밋수, 롤백 등)
  • 병렬 처리
  • 워크로드 조정
    • Spring Cloud Data Flow 등을 통해 GUI로 태스크 조정 등

6. 스프링 배치의 3가지 레이어

  •  
  • 어플리케이션 : 개발자가 작성한 비즈니스 로직
  • 코어 : 배치 도메인을 정의하는 모든 부분
    • Job, Step 등
  • 인프라스트럭처 : 각종 reader, writer, 템플릿, 헬퍼
    • IO다루기
    • job 실패 시 정책
  • cf) 배치 프레임워크 내에는 스케줄링 기능이 없다.

7. 스프링 배치 job 개요

  • job은 중단이나 상호작용없이 처음부터 끝까지 실행되는 처리
  • job은 여러개의 step 으로 구성
  • 각 step 은 입력과 출력이 있음 (=chunk processing, 하나의 트랜잭션)
    • ItemReader : 입력
    • ItemProcessor : Optional
    • ItemWriter : 출력
  • step이 실패했을 때, 반복실행할 수도 있고 못할수도 있다.
  • job의 flow는 조건부일 수 있음
    • ex) 총 점이 100점이 넘었을 경우에만 특정 step 실행
  • JobLauncher 가 job을 실행핸다
  • 현재 실행중인 job의 메타정보들은 JobRepository 에 저장된다.
    • 일반적으로 RDB 에 기록
  • job의 병렬화
    • 병렬 chunk/step 처리
    • 원격 chunk 처리
    • 파티셔닝
Comments