[Spring Batch] Batch Application

minholee_93·2020년 3월 25일
0

Spring Batch

목록 보기
1/4
post-thumbnail

참고 자료 : https://jojoldu.tistory.com/324


이번글에서는 Batch Application에 대해 알아보도록 하겠습니다.

1. Batch Application

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

예를 들어 매일 전날의 대용량 데이터를 집계해 처리해야하는 단발성 비즈니스 로직이 필요하다면, 이를 Batch Application 으로 작성해 수행할 수 있습니다.

만약 이를 Batch Application으로 분리해 수행하지 않고, 실제 서비스를 수행하는 MVC 서버에서 처리하게 된다면 해당 집계처리를 위해 많은양의 CPU, I/O 등의 자원을 소모하게 됩니다.

반면 Batch Application으로 처리한다면 사용자들에게는 쾌적한 서비스를 제공할 수 있습니다. 또한, Batch 로직 수행 중 실패한 부분에서부터 '재 처리'가 가능하다던지 혹은 '동일 파라미터'를 가지는 Batch는 수행하지 못하도록 막는 기능 등을 사용할 수 있습니다.

이러한 Batch Application은 다음과 같은 조건을 만족해야 합니다. 😎

• 대용량 데이터 : 배치 어플리케이션은 대량의 데이터를 추출,전달,계산 하는 등의 처리를 할 수 있어야 합니다.

• 자동화 : 배치 어플리케이션은 심각한 문제 해결을 제외하고는 사용자의 개입 없이 실행될 수 있어야 합니다.

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

• 신뢰성 : 배치 어플리케이션은 무엇이 잘못되었는지를 추적할 수 있어야 합니다. (로깅, 알림)

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

2. Spring Batch

Spring 진영에서는 'Spring Batch' 모듈을 사용해 위와 같은 Batch Applicatoin을 작성할 수 있습니다.

Spring Batch는 Accenture의 배치 노하우 & 기술력과 Spring 프레임워크가 합쳐져 만들어진 모듈입니다.

따라서 Spring Batch는 Spring Framework의 3대 요소인 DI, AOP, 서비스 추상화 등을 사용할 수 있으며, Accenture의 Batch 노하우가 담긴 아키텍처로 구성되어 있습니다.

현재 Spring Batch 4.0 (Spring Boot 2.0)에서 지원하는 Reader/Writer 모듈은 다음과 같습니다. 😎

Reader란 데이터를 읽어오는 모듈이며, Writer는 데이터를 쓰는 모듈이라고 생각할 수 있습니다.

3. Batch Example

실제 기업에서 Batch Application 을 사용하는 사례는 다음과 같습니다.

3-1) 일매출 집계

하루에 수십 수백만건의 거래를 처리하는 커머스의 경우 매일 새벽 전날의 매출을 집계하는 일매출 집계 Batch Application을 수행합니다.

많은 거래가 이루어지는 커머스의 경우에는 하루 거래건이 50~100만까지 나오며, 이와 관련된 데이터는 100만 ~ 200만 row 이상으로 발생하게 됩니다.

따라서 이를 실시간 집계 쿼리로 수행하기에는 시간 및 서버의 부하가 심합니다.

따라서 이를 해결하고자, 매일 새벽 특정시간에 전날의 매출을 집계하는 Batch Application을 수행합니다. 이후 집계된 데이터를 사용자가 매출 집계 데이터를 요청할때 바로 전달함으로써 성능 및 부하 이슈를 해결 할 수 있게 됩니다.

3-2) ERP 연동

매일 특정시간에 재무 ERP로 매출 현황을 전달해야될때 데이터 전송 Batch Appliation을 사용합니다.

이때 전송한 데이터는 검증 및 디버깅 용도로 사용하기위해, 별도의 이력 테이블에 저장해 관리합니다.

위 사례외에도 정해진 시간마다 대용량 데이터의 가공이 필요한 경우에 어디서든 Spring Batch가 사용될 수 있습니다. 👏👏👏

profile
Hello World 😎

0개의 댓글