001 Springbatch Start

강의메모 #

스프링 배치 소개 #

탄생 배경 #

  • 자바 기반 표준 배치 기술 부재
  • 스프링 배치는 SpringSource(현재는 Pivotal)와 Accenture(경영 컨설팅 기업)의 합작품
    • Accenture - 배치 아키텍처를 구현하면서 쌓은 기술적인 경험과 노하우
    • SpringSource - 깊이 있는 기술적 기반과 스프링의 프로그래밍 모델

배치 핵심 패턴 #

  • Read(데이터 조회), Process(데이터 가공), Write(데이터 저장)

배치 시나리오 #

  • 배치 프로세스를 주기적으로 커밋
  • 동시 다발적인 Job 의 배치 처리, 대용량 병렬 처리
  • 실패 후 수동 또는 스케줄링에 의한 재시작
  • 의존관계가 있는 step 여러 개를 순차적으로 처리
  • 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
  • 반복, 재시도, Skip 처리

아키텍처 #

img.png

도서 - 스프링배치 완벽가이드 #

1장. 배치와 스프링 #

배치가 필요한 이유 #

  1. 필요한 모든 정보를 원하는 즉시 받아볼 수는 없다. 배치 처리를 이용하면 실제 처리가 시작되기 전에 필요한 정보를 미리 수집할 수 있다.

  2. 즉시 처리할 필요가 없는 이벤트를 적정한 시간을 두고 이후 정해진 시간에 처리할 수 있다.

  3. 자원을 더 효율적으로 활용할 수 있다. 일반적으로 데이터 모델 처리는 두단계로 나뉜다.

  • 첫번째 단계. 모델의 생성
    • 모델을 생성하려면 대량 데이터를 수학적으로 집중 처리해야하므로 시간이 많이 걸릴 수 있다.
    • 스트리밍 시스템이 사용할 데이터 모델을 외부에서 배치 처리르 수행해 생성
  • 두번째 단계. 생성된 모델을 놓고, 새로운 데이터를 평가하거나 점수를 매기는 것이다.
    • 매우 빠르다.
    • 스트리밍 시스템이 해당 결과를 실시간으로 사용하게 하는 것이 합리적

배치 처리의 역사 #

  • 2007년 : Accenture사는 자사의 풍부한 메인프레임 및 배치 처리 경험을 바탕으로 오픈소스 프레임워크를 만듬 (JVM에서 동작하는 배치 처리의 사실상 표준)
  • 2008년 3월 말 : 스프링 배치 1.0.0 출시
  • 209년 4월 : 스프링배치 2.0.0 (지원하는 JDK 버전 1.4 -> 1.5로 교체)
  • 2014년 : 3.0.0 버전 (새로운 자바 배치 표준인 JSR-352 구현)
  • 책 출시일 직전에 4.0.0 버전 출시 (스프링부트에서 자바기반 구성을 받아들였다.)

배치가 직면한 과제 #

배치 처리는 사용자가 추가로 개입하지 않아도 특정 완료 지점까지 실행할 수 있다. 배치는 확실한 로그와 피드백용 알림만을 사용해 신속하고 정확하게 에러를 발생하면 된다. 알림으로 어떤 오류는 해결할 수 있기 때문이다.

소프트웨어 아키텍처는 사용성, 유지보수성, 확장성 등 여러 속성을 가지고있다. 배치 처리에서는 이러한 속성들이 기존과는 다른 측면으로 관련되어있다.

  1. 사용성 배치에는 신경써야할 사용자 인터페이스가 없다. 배치에서 말하는 사용성은 GUI 등과는 관계가 없다. 배치 처리에서 사용성은 코드에 관한 것이다. 즉, 오류 처리 및 유지 보수성과 관련이 있다.
  • 공통 컴포넌트를 쉽게 확장해 새로운 기능을 추가할 수 있는가?
  • 기존 컴포넌트를 변경할때 시스템 전체에 미치는 영향을 알 수 있도록 단위 테스트가 잘 마련되어 있는가?
  • 잡이 실패할때 디버깅에 오랜 시간을 소비하지 않고 언제, 어디서, 왜 실패했는지 알 수 있는가?
  1. 확장성 배치가 처리할 수 있어야하는 규모는 지금껏 개발해온 웹 애플리케이션 등 보다 몇자리수 이상 큰 경우가 많다.

  2. 가용성 배치처리는 일반적으로 항상 실행되는 것이 아니다. 필요한 리소스를 언제 사용할 수 있는지 알고있는 상태에서 주어진 시간에 job이 실행되도록 예약한다.

  • 필요할때 바로 배치 처리를 수행할 수 있는가?
  • 허용된 시간 내에 잡을 수행함으로써 다른 시스템에 영향을 미치지 않게 할 수 있는가?
  1. 보안 배치 처리에서 보안의 역할은 데이터를 안전하게 저장하는 것이다.
  • 민감한 데이터베이스 필드는 암호화돼 있는가?
  • 실수로 개인 정보를 로그로 남기지는 않는가?
  • 외부 시스템으로의 접근은 어떠한가? 자격증명이 필요하며 적절한 방식으로 보안을 유지하고 있는가?
  • 처리중인 데이터는 이미 검사된 데이터이기는 하지만 여전히 규칙을 잘 준수하고 있는가?

왜 자바로 배치를 처리하는가? #

배치 처리 개발에 자바 및 오픈소스를 사용해야하는 이유로, 유지보수성, 유연성, 확장성, 개발 리소스, 지원, 비용 등을 생각할 수 있다.

  1. 유지보수성 배치 처리 코드는 일반적으로 다른 애플리케이션 코드보다 수명이 훨씬 길다. 그러므로 큰 위험 없이 쉽게 수정할 수 있도록 코드를 작성해야한다. 스프링은 테스트 용이성, 추상화와 같은 몇가지 이점을 얻을 수 있도록 설계됐다. 스프링 프레임워크의 의존성 주입을 통해 객체간 결합을 제거할 수 있고, 강력한 테스트를 구축할 수 있다. 이러한 스프링 프레임워크 기반인 스프링 배치는 트랜잭션 및 커밋횟수와 같은 것들을 제공하고, 처리가 어디까지 실행됐는가라든가 실패시 무슨일을 해야하는지 관리할 필요가 없다. 모두 스프링배치가 알아서 관리해주기 때문에 이러한 기능은 스프링 배치와 자바가 제공하는 유지보수성 측면에서의 강력한 이점이다.

  2. 유연성 프레임워크가 없다면 환경에 맞춰 일일이 개발해야한다. 애플리케이션 서버, 도커 컨테이너, 클라우드에 배포하고 싶다면 필요에 맞는것을 선택하면 된다. WAR, JAR 등 어떤 것이든 스프링 배치를 사용하면 된다. 유연성의 또다른 측면은 시스템 간 코드를 공유할 수 있는 능력이다. 다른 플랫폼에 종속돼 동작하던 업무 로직을 재사용할 수도 있고, 이미 테스트 및 디버깅된 서비스를 배치 처리에서 동일하게 사용할 수도 있다.

스프링 배치 프레임워크 #

  • 일반적인 배치 패턴 및 패러다임을 구현하는 표준 기반 방법
  • Accenture사와 스프링소스(SpringSource)사 간의 협업으로 개발
  • 데이터 유효성 검증, 출력 포매팅, 복잡한 비즈니스 규칙을 재사용 가능한 방식으로 구현하는 기능, 대규모 데이터셋 처리 기능이 구현돼있다.

img_1.png

애플리케이션 레이어가 최상위에 있는것이 아니라, 다른 두 레이어인 코어 레이어와 인프라스트럭처 레이어를 감싸고 있는 모습이다. why? 개발자가 개발하는 대부분의 코드가 코어 레이어와 함께 동작하는 애플리케이션 레이어이며, 때로는 커스텀 리더(reader), 커스텀 라이터(writer)와 같이 인프라스트럭처의 일부를 만들기도 한다.

  • 애플리케이션 레이어
    • 배치 처리 구축에 사용되는 모든 사용자 코드 및 구성 포함
    • 업무 로직, 서비스, 잡 구조화와 관련된 구성 포함
    • 코어 레이어와 상호작용하는데 대부분의 시간을 소비한다.
  • 코어 레이어
    • 배치 도메인을 정의하는 모든 부분이 포함
    • 잡, 스텝 인터페이스, 잡 실행에 사용되는 인터페이스(JobLauncher, JobParameters) 등 포함
  • 인프라스트럭처 레이어
    • 어떤 처리를 수행하려면 파일, 데이터베이스 등으로부터 읽고 쓸 수 있어야한다. 잡의 실패로 재시도될때 어떤일을 수행할지도 다룰 수 있어야한다.
      • 이러한 부분은 공통 인프라스트럭처로 간주된다.