스프링 배치 소개 ( Spring Batch )

박건태·2023년 10월 26일
0

사내 프로젝트를 보던 중에 Batch를 사용하여 대용량 데이터 변환 및 저장 처리가 되어있는 것을 보고 아직 Batch에 대해 들어보기만 하고 이해가 낮은 나는 Batch에 대해 조사해 보기로 하였다. 아래는 인터넷에 나와있는 글을 정리한 내용이다.


배치 애플리케이션이란?

  • 배치(Batch)는 일괄처리 란 뜻을 갖고 있습니다..

매일 전날의 데이터를 집계 해야한다고 했을때 이 대용량의 데이터 처리를 웹 어플리케이션 (Tomcat + SpringMVC)에서 처리한다면, 해당 서버는 CPU, I/O 등의 자원을 다 써버려서 다른 Request 처리를 못하게 됩니다..

그리고 이 집계 기능은 하루에 1번 수행됩니다..

그렇다면 이를 위해 API를 구성하는 것은 너무 낭비가 아닐까요?
여기서 추가로 데이터가 너무 많아서 처리중에 실패가 나면 어떻게 될까요?

  • 그럴때 그 실패지점에서 다시 실행할 수 있다면 얼마나 좋을까요?

또 다른 상황으로 내가 실행한 집계 함수를 다른 사람이 다시 실행한다고 했을때 데이터가 2배로 늘어나는 상황이 벌어질 수 도 있습니다.

  • 같은 파라미터로 같은 함수를 실행할 경우 이미 실행한 적이 있어 실패하는 기능을 지원한다면 얼마나 좋을까요?

이러한 문제점들을 해결하고 대용량의 데이터를 처리하는 어플리케이션이 바로 배치 어플리케이션 입니다.

그리고 이러한 배치 어플리케이션을 지원하는 것이 스프링 배치 입니다.

  1. 대용량 데이터 - 배치 어플리케이션은 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리를 할 수 있어야 합니다.
  2. 자동화 - 배치 어플리케이션은 심각한 문제 해결을 제외하고는 사용자 개입없이 실행되어야 합니다.
  3. 견고성 - 배치 어플리케이션은 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야 합니다.
  4. 신뢰성 - 배치 어플리케이션은 무엇이 잘못되었는지를 추적할 수 있어야 합니다. (로깅, 알림)
  5. 성능 - 배치 어플리케이션은 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 어플리케이션을 방해하지 않도록 수행되어야 합니다.

Spring Batch?

Spring Batch 프로젝트는 Accenture와 Spring Source의 공동 작업으로 2007년에 탄생했습니다. Accenture는 수년간의 노력으로 그들만의 배치 프레임워크를 만들었고, 그를 통해 얻은 경험을 가지고 있었습니다.
즉, Accenture의 배치 노하우 & 기술력과 Spring 프레임워크가 합쳐져 만들어진 것이 Spring Batch 입니다.

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


Batch vs Quartz?

간혹 Spring Batch와 Spring Quartz를 비교하는 글을 보게 되는데요.
둘은 역할이 완전히 다릅니다.
Quartz는 스케줄러의 역할이지, Batch와 같이 대용량의 데이터 배치 처리에 대한 기능을 지원하지 않습니다.
반대로 Batch 역시 Quartz의 다양한 스케줄 기능을 지원하지 않아서 보통은 Quartz + Batch를 조합해서 사용합니다.
정해진 스케줄마다 Quartz가 Spring Batch를 실행하는 구조라고 보시면 됩니다.


Batch 사례

실제 기업에선 다음과 같은 상황에서 배치 어플리케이션을 사용합니다.

일매출 집계

많은 거래가 이루어지는 커머스 사이트의 경우 하루 거래건이 50만 ~ 100만까지 나옵니다.
이럴 경우 이와 관련된 데이터는 최소 100만 ~ 200만 row이상입니다.
한달이면 5000만 ~ 1억까지 될 수도 있습니다.

이를 실시간 집계 쿼리로 해결하기엔 조회 시간이나 서버 부하가 심합니다.
그래서 매일 새벽에 전날의 매출 집계 데이터를 만들어서 외부 요청이 올 경우 미리 만들어준 집계 데이터를 바로 전달하면 성능과 부하를 모두 잡을 수 있습니다.

ERP 연동

대부분의 서비스에선 ERP를 사용하고 있습니다.
| ERP는 자원 관리 시스템이라고 생각하시면 됩니다.
| 사내 구성원을 비롯해서 매출, 지출 등을 모두 관리하는 소프트웨어 시스템을 얘기합니다.
| ERP 솔루션으로 유명한 것은 SAP가 있습니다.
| https://namu.wiki/w/ERP

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


마무리

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

0개의 댓글