1. Listener(리스너)1-1) 기본 개념- 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트- 각 단계별로 로그기록을 남기거나 소요된 시간을 계산하거나 실행상태 정보들을 참조 및 조회 가능- 사용하기 위해서는 Listener 를 등록해야 하며 등록은 각 API 설정에서 단계별로 지정 가능1-2) 종류Job- JobExecutionListner -> Job 실행 전후Step- StepExecutionListener -> Step 실행 전후- ChunkListener -> Chunk 실행 전후(Tasklet 실행 전후), 오류 시점- ItemReaderListener -> ItemReader 실행 전후, 오류 시점(But, Item 이 Null 인 경우 호출 안 됨)-..
1. Chunk(청크)1-1) 기본 개념- Chunk 란 여러 개의 Item 을 묶은 하나의 덩어리(블록)- 한번에 하나씩 아이템을 입력 받아 Chunk 단위의 덩어리로 만들고 Chunk 단위로 트랜잭션을 처리함 -> Chunk 단위로 Commit 과 Rollback 이 진행- 일반적으로 대용량 데이터를 한번에 처리하는 것이 아닌 청크 단위로 쪼개어서 더 이상 처리할 데이터가 없을 때까지 반복- Reader 와 Processor 에서는 1번의 수행이 이루어지고, Writer 에서는 Chunk 단위로 수행for (int i =0; i- Chunk VS ChunkChunk- ItemReader 로 읽은 하나의 아이템을 CHunk 에서 정한 개수만큼 반복해서 저장Chunk- ItemReader 로 부터 전달받..
1. JobLauncherpublic interface JobLauncher { public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;} 1-1) 기본 개념- 배치 Job 을 실행시키는 역할- Job 과 JobParameters 를 인자로 받아 배치를 수행하고 끝나면 JobExecution 을 Return- Application 이 구동될 때 JobLauncher Bean 이 자동 생성2. JobBuilderFa..
1. Jobpublic interface Job { String getName(); boolean isRestartable(); void execute(JobExecution execution); @Nullable JobParametersIncrementer getJobParametersIncrementer(); JobParametersValidator getJobParametersValidator();}1-1) 기본 개념- 배치 계층 구조에서 최상위의 개념으로 전체 배치 프로세스를 캡슐화한 Entity - Job Configuration 을 통해 생성되는 객체 단위로 배치 작업을 어떻게 구성하고 실행할 것인지 명세해 놓은 객체- 여러 Step 을 포함하고 있는 컨테이너로 반드시 1개 이상의 Step으로..
1. Meta Schema- Spring Batch 의 실행 및 관리를 위한 목적으로 여러 도메인(Job, Step, JobParameters 등)들에 대한 정보를 저장, 업데이트, 조회 등의 작업을 할 수 있는 스키마 제공- 과거 및 현재의 Batch 실행에 대한 정보(성공, 실패 여부)를 관리함으로서 배치 운영 및 장애와 관련된 대처 가능- DB 와 연동할 경우 필수적으로 메타 테이블이 생성되어야 함(커스텀마이징을 통해 테이블 없이 수행은 가능)- 위 이미지와 같이 6개의 Meta Table 과 3개의 Sequence Table 이 존재2. Meta Schema DB 생성- spring-batch-core 라이브러리 내부에 schema-*.sql 파일의 데이터베이스 종류별 메타 데이터 스키마가 존재수..
이전 글에서 스프링 배치를 처음 접하고 간단하게 정리한 적이 있습니다. [Spring] Spring Batch 정리회사에서 업무를 하나씩 배우고 맡게 되면서, Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다.이전 스케줄링 관련 개발을 할 때는 Crontab, Quartz 등을 사용하였는데, 여기서는 Spring Batchdev-jwblog.tistory.com최근에 스프링배치 장애해결을 위해 강의를 들었는데 이를 간략하게 주로 사용한 부분 위주로 정리하고자 합니다.(이전 글들과 중복된 내용이 있을 수 있습니다.) [Spring] Spring Batch 장애 회고(Feat. ChunkListner 사용하기)작년 하반기 회사에서 발생한 Spring Batch 오류로 인해 긴급 장애 대응이..
작년 하반기 회사에서 발생한 Spring Batch 오류로 인해 긴급 장애 대응이 있었습니다.해당 글에서는 발생한 원인과 조치한 방법에 대해 기록하고자 합니다.1. 장애 발생Spring Batch 특정 Job이 수행 중 내부 로직으로 인해 reader() -> processor() -> writer() 간에 무한으로 반복 수행이 발생하였고, Spring Batch 내부 로직에 따른 BATCH_STEP_EXECUTION 테이블 안에 Select/Update 문이 무한정 발생하였습니다.- 이로 인해 DML 쿼리가 무한정으로 쌓이면서 디스크 용량 과부하가 발생하였고, 긴급 디스크 증설이 진행되었습니다.2. 소스코드- 발생한 Job 은 Chunk 지향 기반 처리로 수행되고, reader() -> processo..
최근에 회사에서 스프링배치를 사용하는 배치업무를 담당하고 있습니다.간략하게 JobParameter를 수정할 내용이 있었는데 이를 추가할 때마다 모든 배치 소스를 수정해야 하는 불편함을 알게 되었습니다.(아래 적용하려다가 괜히 일이 커지긴 했다...) 해당 글에서는 이 JobParameter 를 조금 더 활용하는 법과 별도의 클래스(Class)로 만들어 공통으로 관리하고 빈(Bean)으로 등록해서 사용하는 것을 포스팅해보려고 합니다. 해당 글에서 사용된 소스는 Git 에서 확인하실 수 있습니다.1. 기존 방식- 기존에서는 JobParameter 를 사용하기 위해 아래와 같은 형태로 작성하였습니다.1-1. 샘플코드@Slf4j@Configuration@RequiredArgsConstructorpublic cl..
1. 인덱스(Index) 1-1. 인덱스란? - 데이터를 좀 더 빠르게 찾을 수 있도록 해주는 도구 조금 더 자세히 설명하자면, Disk에서 발생하는 I/O 시간은 Main Memory 에서 발생하는 I/O에 비해 매우 크다. 인덱스를 설정함으로서 DB의 데이터를 검색시 Diks 의 I/O가 빈번히 일어나지 않도록 하는 것이다. - 속성 값을 기준으로 이미 정렬되어 있으며, 그에 해당하는 레코드 주소가 있어 빠르게 데이터 접근이 가능 - 인덱스 검색을 위한 조건은 WHERE 절에 인덱스로 설정된 컬럼명이 나와야 함 1-2. 장/단점 장점 - 검색 속도가 빨라진다. -> (무조건 그런 것은 아니다.) : 인덱싱보다 전체 테이블 검색(Full Scan)이 더 나은 경우 - 적은 처리량으로 결과를 얻을 수 있..
1. JAXB(Java Architecture for XML Binding) - JAXB는 Java Object 를 XML 로 직렬화 해주거나, XML 을 Java Object 로 역직렬화 해주는 Java API 입니다. 마샬링(Marshalling) : Java Object -> XML 언마샬링(UnMarshalling) : XML -> Java Object - 기본적으로 JDK6 ~ 9 버전에는 JAXB 가 내장되어 있어 라이브러리를 따로 추가할 필요가 없습니다.(JDK 11 부터는 Dependency 추가가 필요합니다) - 최근 Object 는 관련해서는 대부분 JSON(JavaScript Object Notation)을 많이 사용하지만, XML 도 종종 사용되고 있습니다. - JSON 을 다룰 때..