강의메모 #
스프링 배치 소개 #
탄생 배경 #
- 자바 기반 표준 배치 기술 부재
- 스프링 배치는 SpringSource(현재는 Pivotal)와 Accenture(경영 컨설팅 기업)의 합작품
- Accenture - 배치 아키텍처를 구현하면서 쌓은 기술적인 경험과 노하우
- SpringSource - 깊이 있는 기술적 기반과 스프링의 프로그래밍 모델
배치 핵심 패턴 #
- Read(데이터 조회), Process(데이터 가공), Write(데이터 저장)
배치 시나리오 #
- 배치 프로세스를 주기적으로 커밋
- 동시 다발적인 Job 의 배치 처리, 대용량 병렬 처리
- 실패 후 수동 또는 스케줄링에 의한 재시작
- 의존관계가 있는 step 여러 개를 순차적으로 처리
- 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
- 반복, 재시도, Skip 처리
아키텍처 #
도서 - 스프링배치 완벽가이드 #
1장. 배치와 스프링 #
배치가 필요한 이유 #
-
필요한 모든 정보를 원하는 즉시 받아볼 수는 없다. 배치 처리를 이용하면 실제 처리가 시작되기 전에 필요한 정보를 미리 수집할 수 있다.
-
즉시 처리할 필요가 없는 이벤트를 적정한 시간을 두고 이후 정해진 시간에 처리할 수 있다.
-
자원을 더 효율적으로 활용할 수 있다. 일반적으로 데이터 모델 처리는 두단계로 나뉜다.
- 첫번째 단계. 모델의 생성
- 모델을 생성하려면 대량 데이터를 수학적으로 집중 처리해야하므로 시간이 많이 걸릴 수 있다.
- 스트리밍 시스템이 사용할 데이터 모델을 외부에서 배치 처리르 수행해 생성
- 두번째 단계. 생성된 모델을 놓고, 새로운 데이터를 평가하거나 점수를 매기는 것이다.
- 매우 빠르다.
- 스트리밍 시스템이 해당 결과를 실시간으로 사용하게 하는 것이 합리적
배치 처리의 역사 #
- 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 버전 출시 (스프링부트에서 자바기반 구성을 받아들였다.)
배치가 직면한 과제 #
배치 처리는 사용자가 추가로 개입하지 않아도 특정 완료 지점까지 실행할 수 있다. 배치는 확실한 로그와 피드백용 알림만을 사용해 신속하고 정확하게 에러를 발생하면 된다. 알림으로 어떤 오류는 해결할 수 있기 때문이다.
소프트웨어 아키텍처는 사용성, 유지보수성, 확장성 등 여러 속성을 가지고있다. 배치 처리에서는 이러한 속성들이 기존과는 다른 측면으로 관련되어있다.
- 사용성 배치에는 신경써야할 사용자 인터페이스가 없다. 배치에서 말하는 사용성은 GUI 등과는 관계가 없다. 배치 처리에서 사용성은 코드에 관한 것이다. 즉, 오류 처리 및 유지 보수성과 관련이 있다.
- 공통 컴포넌트를 쉽게 확장해 새로운 기능을 추가할 수 있는가?
- 기존 컴포넌트를 변경할때 시스템 전체에 미치는 영향을 알 수 있도록 단위 테스트가 잘 마련되어 있는가?
- 잡이 실패할때 디버깅에 오랜 시간을 소비하지 않고 언제, 어디서, 왜 실패했는지 알 수 있는가?
-
확장성 배치가 처리할 수 있어야하는 규모는 지금껏 개발해온 웹 애플리케이션 등 보다 몇자리수 이상 큰 경우가 많다.
-
가용성 배치처리는 일반적으로 항상 실행되는 것이 아니다. 필요한 리소스를 언제 사용할 수 있는지 알고있는 상태에서 주어진 시간에 job이 실행되도록 예약한다.
- 필요할때 바로 배치 처리를 수행할 수 있는가?
- 허용된 시간 내에 잡을 수행함으로써 다른 시스템에 영향을 미치지 않게 할 수 있는가?
- 보안 배치 처리에서 보안의 역할은 데이터를 안전하게 저장하는 것이다.
- 민감한 데이터베이스 필드는 암호화돼 있는가?
- 실수로 개인 정보를 로그로 남기지는 않는가?
- 외부 시스템으로의 접근은 어떠한가? 자격증명이 필요하며 적절한 방식으로 보안을 유지하고 있는가?
- 처리중인 데이터는 이미 검사된 데이터이기는 하지만 여전히 규칙을 잘 준수하고 있는가?
왜 자바로 배치를 처리하는가? #
배치 처리 개발에 자바 및 오픈소스를 사용해야하는 이유로, 유지보수성, 유연성, 확장성, 개발 리소스, 지원, 비용
등을 생각할 수 있다.
-
유지보수성 배치 처리 코드는 일반적으로 다른 애플리케이션 코드보다 수명이 훨씬 길다. 그러므로 큰 위험 없이 쉽게 수정할 수 있도록 코드를 작성해야한다. 스프링은 테스트 용이성, 추상화와 같은 몇가지 이점을 얻을 수 있도록 설계됐다. 스프링 프레임워크의 의존성 주입을 통해 객체간 결합을 제거할 수 있고, 강력한 테스트를 구축할 수 있다. 이러한 스프링 프레임워크 기반인 스프링 배치는 트랜잭션 및 커밋횟수와 같은 것들을 제공하고, 처리가 어디까지 실행됐는가라든가 실패시 무슨일을 해야하는지 관리할 필요가 없다. 모두 스프링배치가 알아서 관리해주기 때문에 이러한 기능은 스프링 배치와 자바가 제공하는 유지보수성 측면에서의 강력한 이점이다.
-
유연성 프레임워크가 없다면 환경에 맞춰 일일이 개발해야한다. 애플리케이션 서버, 도커 컨테이너, 클라우드에 배포하고 싶다면 필요에 맞는것을 선택하면 된다. WAR, JAR 등 어떤 것이든 스프링 배치를 사용하면 된다. 유연성의 또다른 측면은 시스템 간 코드를 공유할 수 있는 능력이다. 다른 플랫폼에 종속돼 동작하던 업무 로직을 재사용할 수도 있고, 이미 테스트 및 디버깅된 서비스를 배치 처리에서 동일하게 사용할 수도 있다.
스프링 배치 프레임워크 #
- 일반적인 배치 패턴 및 패러다임을 구현하는 표준 기반 방법
- Accenture사와 스프링소스(SpringSource)사 간의 협업으로 개발
- 데이터 유효성 검증, 출력 포매팅, 복잡한 비즈니스 규칙을 재사용 가능한 방식으로 구현하는 기능, 대규모 데이터셋 처리 기능이 구현돼있다.
애플리케이션 레이어가 최상위에 있는것이 아니라, 다른 두 레이어인 코어 레이어와 인프라스트럭처 레이어를 감싸고 있는 모습이다. why? 개발자가 개발하는 대부분의 코드가 코어 레이어와 함께 동작하는 애플리케이션 레이어이며, 때로는 커스텀 리더(reader), 커스텀 라이터(writer)와 같이 인프라스트럭처의 일부를 만들기도 한다.
- 애플리케이션 레이어
- 배치 처리 구축에 사용되는 모든 사용자 코드 및 구성 포함
- 업무 로직, 서비스, 잡 구조화와 관련된 구성 포함
- 코어 레이어와 상호작용하는데 대부분의 시간을 소비한다.
- 코어 레이어
- 배치 도메인을 정의하는 모든 부분이 포함
- 잡, 스텝 인터페이스, 잡 실행에 사용되는 인터페이스(JobLauncher, JobParameters) 등 포함
- 인프라스트럭처 레이어
- 어떤 처리를 수행하려면 파일, 데이터베이스 등으로부터 읽고 쓸 수 있어야한다. 잡의 실패로 재시도될때 어떤일을 수행할지도 다룰 수 있어야한다.
- 이러한 부분은 공통 인프라스트럭처로 간주된다.
- 어떤 처리를 수행하려면 파일, 데이터베이스 등으로부터 읽고 쓸 수 있어야한다. 잡의 실패로 재시도될때 어떤일을 수행할지도 다룰 수 있어야한다.