[Spring Batch] Spring Batch란?

dev-log·2021년 11월 16일
0

Spring Batch

목록 보기
1/7

1. Batch Application

배치(Batch)는 일괄처리 란 뜻을 가지고 있다.

Batch Application이란 단발성으로 대용량의 데이터를 처리하는 어플리케이션을 의미한다.

매일 전 날의 데이터를 집계해야 하는데 이렇게 큰 데이터를 읽고, 가공하고, 저장하는 것을 Spring MVC에서 모두 처리한다면 해당 서버는 순식간에 CPU, I/O등의 자원을 다 써버려 다른 request를 처리하지 못하게 된다.

반면 Batch Application으로 분리해 처리한다면 위의 문제점을 해결할 수 있다.

Batch Application은 아래와 같은 조건을 만족해야 한다.

Batch Application 조건 4가지

  • 대용량 데이터 - 배치 어플리케이션은 대량의 데이터를 가져오거나,전달하거나, 계산하는 등의 처리를 할 수 있어야 한다.

  • 자동화 - 배치 어플리케이션은 심각한 문제 해결을 제외하고는 사용자 개입 없이 실행되어야 한다.

  • 견고성 - 배치 어플리케이션은 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야 한다.

  • 성능 - 배치 어플리케이션은 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 어플리케이션을 방해하지 않도록 수행되어야 한다.

2. Spring Batch

이러한 Batch Application을 지원하는 것이 Spring에선 Spring Batch이다.

spring batch 프로젝트는 Accenture와 Spring Source의 공동작업으로 2007년에 탄생했다.

즉, Accenture의 배치 노하우 & 기술력과 Spring 프레임워크가 합쳐져 만들어진 것이 Spring Batch이다.

Spring Batch는 Spring의 특성을 그대로 가져왔다.
DI,AOP,서비스 추상화 등 Spirng 프레임워크의 3대 요소를 모두 사용할 수 있으며 Accenture의 Batch 노하우가 담긴 아키텍처를 사용할 수 있다.

Spring Batch 4.0(Spring boot 2.0)에서 지원하는 Reader & Writer는 아래와 같다.

DataSource기술설명
DatabaseJDBC페이징, 커서, 일괄 업데이트 등 사용 가능
DatabaseHibernate페이징, 커서 사용 가능
DatabaseJPA페이징 사용 가능 (현재 버전에선 커서 없음)
FileFlat file지정한 구분자로 파싱 지원
FileXMLXML 파싱 지원

(Reader는 데이터를 읽어오는 모듈, Writer는 데이터를 쓰는 모듈)
iBatis 모듈은 삭제됐다.

3. Spring Batch 사례

배치 어플리케이션을 사용한 사례는 아래와 같다.

일매출 집계

많은 거래가 이루어지는 커머스 사이트의 경우 하루 거래건이 50-100만건까지 나오며 이와 관련된 데이터는 최소 100-200만 row이상이다.

이를 실시간 집계 쿼리로 해결하기엔 조회시간이나 서버 부하가 심하다.
따라서 이를 해결하고자 매일 새벽 전날의 매출을 집계하는 Batch Application을 수행한다.외부 요청이 올 경우 미리 만들어둔 집계 데이터를 바로 전달하면 성능과 부하를 모두 잡을 수 있다.

ERP 연동

대부분의 서비스에선 ERP를 사용하고 있다.

ERP란  자원 관리 시스템으로 사내 구성원을 비롯해서 매출,지출 등을 모두 관리하는 소프트웨어 시스템을 말한다. 

재무팀의 요구사항으로 매일 매출 현황을 ERP로 전달해야 하는 상황에서 Spring Batch가 많이 사용된다.
매일 아침 8시에 ERP에 전달해야할 매출 데이터를 전송해야 한다면 아래와 같은 구조로 구현할 수 있다.

위의 사례들처럼 정해진 시간마다 데이터 가공이 필요한 경우에 어디서든 Spring Batch가 사용될 수 있다.

+ Spring Batch vs Quartz?

Quartz는 스케쥴러의 역할을 한다. Batch와 같이 대용량 데이터 배치 처리에 대한 기능을 지원하지 않는다.
반대로 Batch 역시 Quzrtz의 다양한 스케쥴 기능을 지원하지 않아서 보통은 Quartz + Batch를 조합해서 사용한다.
정해진 스케쥴마다 Quartz가 Spring Batch를 실행하는 구조라고 보면 된다.

Reference

https://jojoldu.tistory.com/324
https://minholee93.tistory.com/entry/Spring-Batch-Batch-Application?category=924031

profile
배운 걸 기록하는 곳입니다.

0개의 댓글