[Spring] Spring Batch를 왜 써야하는가??

조시현·2024년 6월 30일
0

SpringBatch(Scheduler)

목록 보기
3/4
post-thumbnail

이전 블로그에서 Spring Scheduler과 Spring Batch에 대해서 알아보았다.

Spring Batch의 간단한 이론에 대해서 공부해 보았지만 Spring Batch를 왜 써야하는지에 대해서 의문점이 들었다.
Spring Batch를 사용하면 대규모 트랜잭션처리에 장점이 있다고 알았는데, 어떤 장점이 있는지에 대해서 알고 가면 더 좋을거 같다는 생각이 들었다.

왜 써야하고 어떤 장점이 있는지 확인해 보자!
( + 어려운 단어는 우측 목차로 확인해주세요.)

효율적인 대규모 처리 능력

청크 기반 처리

대량의 데이터를 효율적으로 처리할 수 있는 청크 단위로 나누어 처리합니다. 이는 메모리 사용을 최적화하고, 더 빠른 처리 속도를 가능하게 합니다.

ex) 청크 크기를 100으로 설정했다면, 각 청크는 100개의 데이터 항목으로 구성됩니다.

  1. 적절한 청크 처리로 오버헤드 감소
    일괄 작업은 여러 항목을 단일 청크로 처리하여, 각 항목에 대해 데이터베이스 트랜잭션을 여닫는 오버헤드를 줄입니다.

  2. 효율적인 리소스 활용
    더 적은 수의 컨텍스트 전환이 필요하므로 중단 없이 더 지속적인 처리 시간이 가능하므로 시스템 리소스(CPU, 메모리, I/O)를 더 잘 활용할 수 있습니다.

  3. I/O 작업의 최소화
    데이터를 항목별로 처리하는 대신 청크 단위로 처리하면, I/O 작업이 줄어들어 시스템의 성능이 향상됩니다. 이는 데이터의 저장과 처리 과정에서 필요한 입출력 작업이 최소화되기 때문입니다.

  4. 제어된 리소스 활용
    데이터의 일부만을 한 번에 처리하기 때문에, 메모리와 같은 리소스가 보다 효과적으로 사용됩니다. 이는 전체적인 시스템 자원 사용의 효율성을 높이는 데 기여합니다.

  5. 로드 밸런싱
    청크를 스레드나 노드에 균등하게 분산하면서 병목 현상을 방지하고 로드 균형을 보장하여 시스템의 확장 능력을 향상시킵니다.

청크를 통해 데이터를 체계적으로 관리하고 처리하는 방식을 개선할 수 있습니다.
청크의 크기를 줄임으로써 메모리 사용량 감소 및 I/O 작업의 최소화 성능을 끌어올릴 수 있고,
청크의 크기 늘리므로써 트랜잭션 오버헤드 효율적인 리소스 활용이 가능해집니다.

이를 통해 사용자가 원하는 더 나은 성능이나 자원 사용의 최적화를 달성할 수 있습니다. 이러한 방식은 개발 프로세스를 더욱 간결하고 효율적으로 만들어 주는 중요한 요소입니다

강력한 트랜잭션 관리

  1. 자동 트랜잭션 롤백
    에러 발생 시 자동으로 롤백되어 데이터의 일관성과 무결성을 보장합니다. 사용자는 복잡한 트랜잭션 관리 로직을 직접 구현할 필요가 없습니다.

  2. 청크 단위의 트랜잭션 관리
    수백, 수천 개의 레코드를 하나의 트랜잭션으로 묶어 처리함으로써 트랜잭션 관리를 최적화합니다. 이렇게 함으로써, 일반적인 @Transactional 사용 시 발생할 수 있는 성능 저하 문제를 효과적으로 방지할 수 있습니다.

  3. 트랜잭션 재시도 및 복구 메커니즘
    실패한 청크에 대한 자동 재시도 기능을 제공합니다. 또한, 사용자가 정의한 특정 예외에 대해 특정 청크의 처리를 건너뛸 수 있는 정책을 설정할 수 있습니다.

  4. 상세한 트랜잭션 로그 관리
    Spring Batch는 처리 중인 청크에 대한 상세한 실행 정보를 로깅할 수 있는 기능을 제공합니다. 이는 어떤 데이터가 처리되었는지에 대한 투명한 모니터링을 가능하게 하며, 문제 발생 시 신속한 진단을 돕습니다.

Spring Batch는 이러한 고급 트랜잭션 관리 기능을 통해 복잡하고 대규모의 데이터 처리 요구 사항을 충족시킬 수 있는 강력한 도구입니다. 이를 통해 안정적이고 효율적인 데이터 처리 솔루션을 제공해줍니다.

세밀한 오류 처리

  • 재시도 및 데이터 스킵 로직으로 일시적 오류나 예외적인 데이터 항목을 유연하게 처리할 수 있어 작업의 안정성을 높입니다.

faultTolerant()를 통해 일괄 처리 단계에서 오류를 처리하기 위한 강력한 메커니즘을 제공합니다.

작업 재시작 가능

  • 작업 중단 시점에서부터 다시 시작할 수 있어 긴 작업과 대규모 데이터 작업의 효율성을 극대화합니다.

restartable()를 통해 ExecutionContext를 통해 실행 도중 실패할 경우 작업 인스턴스를 다시 시작할 수 있습니다.

확장성과 병렬 처리

  • 분산 처리 지원: 멀티 스레딩, 파티셔닝, 원격 청킹 등 다양한 방법으로 확장 가능하며, 서로 다른 시스템 또는 네트워크에 걸쳐 작업을 분산시킬 수 있습니다.

위의 기능을 통한 일괄 작업을 통해 대규모 데이터 세트를 효율적으로 처리하고, 여러 시스템이나 네트워크에 작업 부하를 분산하고, 전반적인 성능과 내결함성을 향상시킬 수 있습니다. 그리고 일괄 처리 작업이 확장 가능하고 탄력적이며 성능에 최적화되도록 보장할 수 있습니다.

Spring Batch가 지원하는 기능

  • 유연한 작업 흐름 제어
    복잡한 조건부 작업 흐름을 지원하며, 다양한 Job과 Step을 유연하게 구성하여 실행할 수 있습니다.

  • 플러그인 아키텍처
    맞춤형 Reader, Processor, Writer 작업을 위해 사용자 정의 구성 요소를 쉽게 통합할 수 있습니다.

  • 강력한 모니터링 및 감사
    실행 지표, 로깅 및 추적을 통해 작업 실행 상태를 실시간으로 모니터링하고, 문제를 진단하며, 감사 트레일을 유지할 수 있습니다.

    Prometheus, Micrometer 또는 사용자 정의 스크립트와 같은 도구를 사용하여 메트릭을 수집할 수 있습니다.

    Grafana 또는 Kibana와 같은 도구를 사용하여 핵심 성과 지표(KPI)를 표시하는 실시간 대시보드를 만들 수 있습니다. 이러한 대시보드를 지표 데이터베이스에 연결하여 실시간 데이터를 가져올 수 있습니다.

  • Spring 생태계와의 완벽한 통합
    Spring Framework와의 높은 호환성을 제공하며, Spring Data, Spring Security와 같은 다른 Spring 프로젝트와도 원활하게 연동됩니다.

💡결론

Spring Batch는 대규모 데이터 처리를 안정적이고 효율적으로 수행해야 하는 모든 프로젝트에 필수적인 도구입니다. 복잡한 데이터 처리 작업을 손쉽게 처리하고, 데이터 처리 성능을 극대화하며, 시스템 확장성을 확보하고 한정된 시스템 자원을 효과적으로 사용하는데 도움을 줄 것입니다.

출처


chatGPT
Geminai
(교차 검증)




단어 설명

청크

일괄 작업에서 함께 처리되는 데이터 처리 단위.

데이터 항목(Item)

하나의 Item은 일반적으로 데이터 처리 파이프라인에서 독립적으로 처리되는 단일 레코드를 지칭합니다. 논리적 데이터 단위.

예시
주문 처리 시나리오에서 Item은 "사람", "음식", "음식점"의 정보를 모두 포함하는 복합 데이터 객체가 될 수 있습니다. 이렇게 통합된 정보는 주문 처리와 같은 비즈니스 로직에서 필요한 모든 관련 데이터를 포함하므로, 이 복합 데이터 객체 자체가 하나의 Item으로 간주됩니다.

데이터 레코드 (Data Record)

데이터베이스 테이블의 행으로, 여러 데이터 항목을 포함한 데이터 엔티티의 인스턴스.

데이터 엔티티 (Data Entity)

데이터베이스 테이블의 행으로, 정보 시스템 내에서 관련된 데이터의 집합을 의미하며, 특정 개념이나 객체.

오버헤드

오버헤드란 작업 자체의 기본 실행 외에 작업을 관리하고 실행하는 데 필요한 추가 컴퓨팅 리소스를 의미합니다. 여기에는 추가 처리 시간, 메모리 사용량 및 작업 실행을 지원하는 데 사용되는 기타 시스템 리소스가 포함될 수 있습니다.

병목 현상

전체 성능과 처리량을 제한하는 시스템의 정체 지점입니다. 이는 특정 구성 요소나 리소스가 다른 구성 요소만큼 빠르게 로드를 처리할 수 없어 지연이 발생하고 효율성이 저하될 때 발생합니다.

파티셔닝

대규모 데이터세트나 작업을 여러 프로세서나 컴퓨팅 노드에서 동시에 처리할 수 있는 더 작고 독립적인 하위 작업이나 파티션으로 나누기 위해 병렬 컴퓨팅에 사용되는 기술입니다.

원격 청킹

데이터 읽기 및 쓰기가 처리와 분리되어 이러한 작업을 여러 노드 또는 시스템에 분산시킬 수 있는 처리 기술입니다.

작업자 노드에 청크 처리를 위임하여 단일 JVM에서 처리하는 로컬 청킹보다 여러 장점을 제공합니다.
마스터 노드는 데이터 읽기 및 청크 분배를 처리하고, 슬레이브 노드는 실제 데이터 처리를 수행합니다.

분할

대규모 데이터세트나 작업을 동시에 처리할 수 있는 더 작고 독립적인 하위 작업으로 나누는 기술.

플러그인

기능을 확장하기 위해 추가하거나 사용자 정의할 수 있는 모듈식 구성 요소를 나타냅니다.

여기서는 커스텀을 편하게 할수 있음을 나타냅니다.

감사 트레일

일괄 작업 실행 중에 수행된 활동 순서를 문서화하는 자세한 로그 및 기록한 것을 의미합니다.

메트릭

Spring Batch에서 배치 작업의 성능과 동작을 추적하는 데 사용되는 정량적 측정값을 나타냅니다.

profile
소프트웨어 관련 고민을 좋아하고 상황에 맞는 답을 함께 찾아가는 과정을 좋아합니다. 😀

0개의 댓글