본문 바로가기

전체 글

(730)
[Spring Batch] Tasklet vs Chunks 차이 Tasklet은 단계 내에서 단일 테스크를 수행하기 위함입니다. 각 단계는 하나의 정의된 작업만 수행한다. ex. Csv파일에서 행을 읽고, 사람들의 나이를 계산해서, 새로운 파일로 쓰는 배치작업이 있다고 하자 이런식으로 각각의 모듈별로 다 Tasklet을 구현하고, 안에 execute 메소드를 오버라이드 해야한다. Tasklet은 단순하게 처리할 수 있는 장점이 있지만, 대용량을 감당하기엔 부하를 감당할 수 없다. 따라서 Chunk를 통해서 쪼개서 넣을 필요가 있는데 Tasklet으로도 쪼개서 넣을수 있지만 가독성이 많이 떨어진다. Tasklet을 사용한 Task 기반처리 -배치 처리 과정이 비교적 쉬운 경우 쉽게 사용 -대량 처리를 하는 경우 복잡 -하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기 ..
[Spring Batch] 스프링 배치 트랜잭션 관리 청크기반으로 하는 이유 Spring Batch에서 Chunk란 데이터 덩어리로 작업할때 각 커밋 사이에 처리되는 row수를 얘기한다. 즉, Chunk 지향 처리는 한번에 하나씩 데이터를 읽어, Chunk라는 덩어리를 만들고, Chunk 단위로 트랜잭션을 다루는 것을 의미한다. Chunk 단위로 트랜잭션을 수행하기 때문에, 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 커밋된 트랜잭션 범위까지는 반영이 된다는 것이다. commit - interval : reader - processor가 commit-interval 만큼 반복된 후, 가공된 데이터를 writer에서 bulk처리하는 구조이다. 청크 지향을 사용해야하는 이유는 뭐지? 일반적으로 대용량 데이터를 처리하는 배치 프로세스 특성상, 대량 데이터를 하나의 트랜잭션으로 ..
[Spring Batch] MultiThread vs partioning 1. MultiThread 멀티 쓰레드 스탭은, 싱글 쓰레드 스탭보다 조금 더 빠르게 Chunk 단위로 작업을 처리할 가능성이 있다. 멀티 쓰레드 스탭은 TaskExecutorRepeatTemplate을 사용해 처리된다. Job에 해당 하는 Step -> 해당 템플릿을 통해서, Chunk단위로 작업이 처리된다. 1. Job이 처리되고 Step이 처리된다. 2. Step은 TaskExecutorRepeatTemplate을 생성하고, 각 쓰레드 수만큼 Runnable 객체를 만들어 실행한다. 3. 생성된 Runnable은 RepeatCallback을 호출한다. 4.RepeatCallBack함수는 ChunkOrientedTasklet을 수행하고, 독립적으로 ItemReader,ItemProcessor,Item..
[Spring Batch] Chunk란? Chunk란 데이터 덩어리로 작업할때 커밋사이에 작업되는 Row수이다. 즉, Chunk 지향 처리란, 한번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만들고, Chunk단위로 트랜잭션 처리를 하는 것을 의미한다. Chunk 단위로 트랜잭션을 수행하기 때문에, 실패에 대한 롤백도 해당 Chunk 단위로 되고 반영도 Chunk단위로 커밋이 된다. 해당 과 같은 구조로 동작한다. Reader에서 데이터를 읽고, Processor에서 가공하며, Chunk의 단위 별로 작동한다. Reader에서 쓰는 Paging은 데이터 조회에 대한 량이고, Chunk는 , 실제 한 트랜잭션당 반영되는 Row의 수이다. 즉 Reader 와 Processor가 일정 크기의 데이터를 가공하고 보관하여 저장하고 해당 Chunk s..
[Spring Batch] How to FailOver(Retry) Spring Batch에서는 배치에 대한 실패가 발생했을 경우, Retry 관련 기능을 제공해준다. Retry 는 ItemReader에서는 동작하지 않는다. Writer, Processor에서만 동작한다. 따라서 ItemReader에서는 Skip만 지원한다는 것을 알아두자 Step은 기본적으로 Repeatable 템플릿을 사용한다. 하지만 실행될때 Retry Template에 실행을 위임한다. - ItemProcessor ItemProcessor에서 예외가 발생한다. Retry Template은 Repeat Template으로 돌아간다. Reader로 부터 다시 값을 요청하는 것이 아니라, 캐싱해서 가지고 있는 Input chunck를 가지고 와서 1부터 다시 프로세스를 동작한다. skip 과 다르게 실..
[Spring Batch] How to FailOver(Skip) 스프링 배치에서는 중간에 실패시에 많은 전략을 제공해준다. 1. Skip Skip 옵션은 각각의 단위에서 사용이 가능하다. 1. ItemReader 해당 부분에서 skip을 사용하는 경우를 생각해보자 ItemReader에서 Item을 읽다가 Exception이 발생하는 경우, 해당 아이템을 skip으로 넘기고 다음 아이템을 읽는다. 예를 들어, Item2 를 읽다가 Exception이 발생하면, 넘기고 Item3를 읽는다. 2.ItemProcessor 해당 ItemProcessor에서 Exception이 발생한다면, ItemReader로 돌아간다. ItemReader가 캐싱하고 있는 Input Chunk를 다시 받아와서 처음 부터 읽는다 해당 Exception이 발생한 부분을 만나게되면 skip 하고 다..
[Spring Batch] Not Use in Meta Tables 1. in Memory Repository 2. 배치 전용 H2 생성 근데, 둘다 그냥 사용하면 안된다. 사용하면 안되는 이유는 아래와 같다. 1. 배치 정보가, 메모리에 쌓이기 때문에 데이터가 영속적이지 않다. 2. 1번과 같은 사유로, 스키마에 대한 모니터링이 필요하다면 불가하다. 3. 배치 작업 진행동안, 메모리를 점유하게 되므로, 주기적으로 비워주는 작업을 해줘야한다. 그냥 앵간하면, 쓰자
[Spring Batch] Meta Tables Spring Batch의 구조를 살펴봤을떄 Job repostiory라는 것이 있었다. 이 부분에 대한 상세 포스팅을 하겠다. 총 6개의 테이블이 존재한다. BATCH_JOB_INSTANCE BATCH_JOB_EXECUTION BATCH_JOB_EXECUTION_PARAMS BATCH_JOB_EXECUTION_CONTEXT BATCH_STEP_EXECUTION BATCH_STEP_EXECUTION_CONTEXT - 배치 Job의 생성 정보를 담는 테이블이다. - Job의 실행 정보를 담는 테이블이다. Job의 수행여부를 profiling 할 수 있다. - Job 실행시 사용했던 파라미터에 대한 정보를 담아두는 테이블 이다. - 작업중 사용되는 모든 정보가 기록되는 Job의 Context를 저장하기 위한 ..