0. Why Spring Batch
기존 배치 프로그램
[A씨의 배치 개발 일상]
A씨는 배치 개발을 위해 개발을 시작한다. A씨는 DB에 자신있어서 프로시저를 애플리케이션에서 호출해서 쓰고, 스케줄러는 DB 스케줄러를 쓰기로 한다. 기껏 JPA로 DB에 독립적으로 만들어놨는데 프로시저를 호출함으로 써 DB에 다시 종속적으로 포함됬다. 프로시저를 작성하고 DB 스케줄러를 등록하면서 개발을 완료했다. 테스트 과정에서 갑자기 이유없이 배치가 정지되는 상황이 생기고, 비정상적으로 중단된것을 알지 못했다. 확인 결과 한꺼번에 많은 양이 몰려서 발생한 에러였고, A씨는 밤새 비정상 정지되었던 배치를 다시 돌리는 로직을 추가 했으며 A씨는 배치가 돌았는지 쿼리를 실행해보고 확인한다. 현업에서 배치프로그램을 쓰다가 수정요청사항이 와서 A씨의 후임 개발자 B씨가 배치 프로그램을 수정해야 하는 상황이 발생했다. B씨는 소스를 보고 파악하려고 했으나 코드에서 프로시저를 호출하는 부분만 있고, 스케줄은 어떻게 도는지는 소스만 보고 파악을 하지 못한다. 또한 프로시저에 익숙하지 않은 B씨는 유지보수에 애로사항을 겪는다. B씨는 정상적으로 쿼리가 돌았는지 확인하기 위해 쿼리를 받았지만 실서버에서 쿼리를 날려보지 못하고, 로그를 보며 잘 실행되었는지 일일히 확인한다.
실제 본인이 겪은 경험과 주변에서 배치를 사용하면서 겪었던일들을 페르소나를 통해 풀어봤습니다. 이문제들을 Spring Batch와 Spring Admin을 통해서 해결해보도록 하겟습니다.
1. spring batch를 쓰고 프로시저를 제거 -> db 독립적(JPA를 사용한다는 가정)
-> 프로시저를 알지 못해도 유지 보수 가능.
2. spring admin 사용으로 비정상 종료 확인 -> Web based administration interface
3. batch와 스케줄러(Quartz, 티볼리, Control-M )사용으로 소스만 보고 로직 파악
4. 배치를 다시 돌리는 로직을 추가 -> Start/Stop/Restart
5. 한꺼번에 많은 양이 몰려서 발생한 에러 -> Chunk based processing
Features 참고 : http://projects.spring.io/spring-batch/
Batch의 사전적 정의
Batch 는 일괄적으로 처리되는 용어이며 Spring batch는 생산성 향상, POJO 기반 개발 접근법, 그리고 사람들이 Spring Framework에서 알게 된 일반적인 사용 편의성을 기반으로 합니다.
Quartz, 티볼리, Control-M 등과 같은 다양한 엔터프라이즈 스케줄러가 있고, 스프링 배치는 스케줄러를 교체하지 않고 스케줄러와 함께 작동하도록 설계되었습니다. Spring Batch는 로깅 / 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너 뛰기 및 자원 관리를 포함하여 많은 양의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 제공합니다.
복잡하고 대량의 대량 배치 작업은 매우 확장 가능한 방식으로 프레임워크를 활용하여 상당한 양의 정보를 처리할 수 있습니다.
'개발' 카테고리의 다른 글
3. Spring batch domain – job, step (0) | 2018.09.04 |
---|---|
2. Spring Batch Admin (0) | 2018.09.03 |
Strict-Transport-Security 헤더에 관련해서... (0) | 2016.10.20 |
자바 다형성과 추상클래스 (0) | 2016.10.05 |
http url 문법과 리소스 (0) | 2016.09.01 |