Spring Integration VS Spring Batch (차이점)

ok0·2022년 11월 29일
0

예금 적금 트래킹

목록 보기
3/7
post-thumbnail

Backend 프로젝트를 진행하다보니, Client의 입장에서 외부 시스템과 지속적인 데이터 싱크가 필요했다. 보통은 특정 시간에 주기적으로 프로그램이 실행되는 Schedule Job을 떠올릴텐데, Spring과 Java 진영에 맡도록 개발을 진행하고 싶었다.

(1) @Schedule(Quartz Scheduler)은 절대 사용하고 싶지 않았다. 일단 거대한 단일 서버를 띄워놓고 싶지 않았고, 필요할 때만 리소스를 사용하는 형태를 원했다. AWS의 Lambda를 이용하거나, Kubernetes 활용을 고려하고 있다.

(2) 처음엔, Spring EventListener를 이용해서 1회성 Job을 실행시키고, 데이터 싱크가 종료되면 Application을 종료(Exit)시키는 단순한 방법을 생각했다.

가령..

@Component
class Worker(...): AbstractWorker() {
  @EventListener(ApplicationReadyEvent::class)
  override fun start() { 
    // method run()은 Abstract Class에 구현, child class에 구현된 method work().
    // job이 종료되면 application exit.
    .. this.run() ..
  }
  
  // 비즈니스 로직 작성.
  override fun work() { ... }
}

잘된다.

오히려 POJOs를 이용해서 모든 코드를 구현해보니, 디버깅도 수월한 면이 있었다.
다만, Spring 진영에서 이미 충분히 검증된 프로젝트를 이용해보고 싶었고, 특히 메시지 패턴을 Spring에 맡게 구현 한 Spring Integration을 사용해보고 싶었다. 이미 훌륭하게 짜여진 코드를 사용한다면, 많은 인사이트를 얻을 수 있지 않을까?


1:1 번역이 아닙니다. 오역이 있을 수 있습니다.

What is the difference between spring-integration and spring-batch projects?

그래서 생긴 궁금증. Spring Integration vs Spring Batch !

Question

spring-batch
spring-integration

Spring 진영에서 제공하는 2가지 프로젝트를 확인했는데, 차이점을 모르겠어요.
spring-batch는 (batch processing, multi-steps jobs, partitionning, statitistcs, exception handling)등을 지원해요.

spring-batch의 예시를 구글에 검색했고, 각기 다른 형태의 Reader와 Writer들을 읽어봤습니다.

spring-integration은 상호 독립적인 Endpoint들의 지속적 통합을 도와주는 편리한 커넥터들의 집합체(Set) 정도로 생각했습니다. (File, Database, Message Queue, Sftp File 등등.) 근데 이건 spring-batch에서도 가능하지 않나요?

spring-batch와 spring-integration의 차이점과 무엇을 사용하면 좋을지 알려주세요.

Answer

임의의 내용을 추가하거나 대폭 수정했습니다.

(1) Spring-Batch는 job을 실행하고, batch-processing 어플리케이션을 작성하는데 사용돼요. Spring-Integration은 lightweight messaging(경량 메시징)을 지원하기 위해서 고수준으로 추상화된 다양한 Adaptor를 제공하고, 이러한 Adaptor들을 이용해서 외부 시스템과 지속적으로 통합을 가능하게 합니다.

(2) 기본적으로, 두개는 전혀 다른 프로젝트에요.
Spring-Integration은 이미 잘 알려진 Enterprise Integration Patterns를 스프링에서 지원하도록 개발되었고, Spring-Batch는 하나의 작업을 작은 단위(submission)으로 분할하여 처리하는 것에 중점을 두고 개발되었어요. 애초에 목적 자체가 전혀 다른 프로젝트인거죠.

가령, Spring-Integration은 Producer/Queue/Consumer의 가장 기본적인 형태로 큐시스템을 운영할 때 사용할 수 있을테고요. Spring-Batchs는 Lambda Architecture의 Batch Layer, Serving Layer를 구성하는데 훨씬 적합해요.

Message Channel

Lambda Architecture(What Is Lambda Architecture?)


Spring Initializr에서 확인해보면, Spring Integration은 Messaging, Spring Batch는 I/O가 태깅되어있다.

profile
백엔드 개발자.

0개의 댓글