반응형
배치처리 예시
- 쇼핑몰에서 쿠폰이 포함된 이메일
- 아마존과 같은 사이트에서 연관 상품을 추천하느 데이터 고하ㅏㄱ 모델
- 빅데이터 작업을 조정하는 일
- 은행에서 생성되는 거래명세서와 퇴직연금명세서
배치처리하면 좋은 이유
필요한 모든 정보를 원하는 즉시 받아 볼 수는 없다.
- 고객의 마음을 바꿔 주문을 취소할 때, 아직 배송하기 전이라면 훨씬 더 저렴한 비용으로 취소할 수 있다. 고객에게 몇 시간을 더 주면서 배치로 배송을 처러하면 소매업자는 많은 돈을 절약할 수 있다.(주문/거래/배송->정산)
왜 자바로 배치를 처리하는 가?
배치 처리 개발에 자바 및 오픈소를 사용해야 하는 이유 6가지
- 유지 보수성
- 유연성
- 확장성
- 개발 리소스
- 지원
- 비용
스프링 배치 프레임워크 구조
스프링 배치는 레이어(Layer) 구조로 조립된 세 개의 티어(Tier)로 이뤄져 있다.
어플리케이션 레이어 [ 코어 / 인프라스트럭처 레이어 ] |
어플리케이션 레이어
가장 바깥쪽에 위치하며, 배치 처리 구축에 사용되는 '모든 사용자 코드' 및 '구성'이 포함된다. '업무 로직 서비스' 등은 물론 '잡 구조'와 관련된 구성도 포함한다.
가장 최상위에 있는 것이 아니라 코어/인프라스트럭처를 감싸고 있음에 주목하자. (그 이유는 개발자가 개발하는 대부분의 코드가 '코어 레이어'와 함께 동작하는 어플리케이션레어 레이어 이지만 때로는 커스텀 리더(Reader)나 커스텀 라이터(Writer)와 같이 인프라스트럭처의 일부를 만들기도 하기 때문이다.)
이해가 안가지만 대충 어플리케이션 레이어는 코어 레이어랑 많이 노는데 가끔 인프라스트럭처랑도 논다. 이런 느낌
무중단 처리 또는 상시 데이터 처리
스프링 프레임 워크를 사용하면 큐(queue)에서 메시지를 읽은 뒤, 청크 단위로 배치 처리를 수행하는 과정을 끝없이 반복할 수 있다. 따라서 이러한 솔루션을 처음부터 개발하는 복잡한 상황을 이해할 필요 없이(Queue가 알아서해주기 때문에) 대량 데이터 처리량을 늘릴수 있다.
Chunk(청크) 처리란?
Spring Batch에서의 Chunk란 데이터를 덩어리로 작업 할 때 각 커밋 사이에 처리되는 row의 수 이다.
즉, Chunk 지향 처리란 한 번에 하나씩 데이터를 읽어 Chunk라는 덩어리르 만든 뒤, Chunk 단위로 트랜잭션을 다루는 것을 의미한다.
- Reader에서 데이터를 하나 읽어옴
- 읽어온 데이터를 Processor에서 가공
- 가공된 데이터를 별도의 공간에 모은 뒤, Chunk 단위만큼 쌓이게 되면 Writer에 전달하고 Writer는 일괄 저장
즉, Reader와 Processor에서는 1건씩 다뤄지고 Writer에서는 Chunk 단위로 처리된다.
스프링으로 잡 정의하기
- 잡은 중단이나 상호작용 없이 처음부터 끝까지 실행되는 처리이다.
- 잡은 여러 개의 스텝이 모여 이뤄질 수 있다.
- 스텝이 실패했을 때 반복 실행할 수도 있고 못할 수도 있다.
- 잡의 플로우(flow)는 조건부일 수 있다. (예를들어 수익을 계산하는 스텝이 $1,000,000 이상의 수익을 반환할 때만 보너스 계산 스텝을 실행하는 경우)
//AccountTasklet : 커스텀 컨포넌트
@Bean
public AccountTasklet accountTasklet(){
return new AccountTasklet();
}
@Bean
public Job accountJob(){
//AccountTasklet을 감싸는 스텝하나를 생성
Step accountStep =
this.stepBuilderFactory
.get("accountStep")
.task(accountTasklet());
.build();
//스텝을 감싸는 잡을 생성
return this.jobBuilderFactory
.get("accountJob")
.start("accountStep")
.build();
}
AccountTasklet
- 첫 번째 Bean은 AccountTasklet이다. 커스텀 컴포넌트이다. 스텝이 동작하는 동안에 비즈니스 로직을 수행한다. 스프링배치는 AccountTasklet이 완료될 때까지 단일 메서드(execute 메서드)를 반복해서 호출하는데, 이때 각각은 새 트렌잭션으로 호출된다.
- 두 번째 Bean은 스프링 배치 잡이다. 이 Bean 정의 내에서는 팩토리가 제공하는 빌더를 사용해, 조금 전 정의했던 AccountTasklet을 감싸는 스텝하나를 생성한다. 그런 다음에 잡 빌더를 사용해 스텝을 감싸는 잡을 생성한다. 스프링 부트(Spring Boot는 애플리케이션 기동 시에 이 잡을 찾아내 자동으로 실행시킨다.
반응형
'Spring > Spring Batch' 카테고리의 다른 글
스프링배치_완벽가이드_3장_거래명세서 생성 (0) | 2021.07.15 |
---|---|
스프링배치_완벽가이드_2장 스프링 배치 (0) | 2021.07.14 |
Spring Batch - 0 개념 (0) | 2021.01.27 |
Spring Batch - 2 구조 (0) | 2021.01.25 |
Spring Batch - 1 (0) | 2021.01.19 |