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..
회사에서 신규 프로젝트로 React + Typescript 를 사용하여 Front를 구성하려고 하였는데, yarn 을 통해서 모듈을 install 하려는 과정에서 아래와 같은 에러가 발생했다.$ yarn create react-app frontend --template typescriptyarn create v1.22.21[1/4] Resolving packages...error Error: self-signed certificate in certificate chain at TLSSocket.onConnectSecure (node:_tls_wrap:1538:34) at TLSSocket.emit (node:events:513:28) at TLSSocket._finishInit (node..
클린코드(CleanCode)를 읽고 간략하게 정리한 글입니다. 14장. 점진적인 개선1. 점진적인 개선의 중요성지속적 개선- 소프트웨어는 한 번에 완벽해질 수 없다.- 꾸준한 점진적 개선이 필요하다.- 작은 변경을 자주 적용하는 방식이 대규모 변경을 한 번에 적용하는 것보다 효과적이다.유지보수성 향상- 코드는 시간이 지남에 따라 변경되고 개선되어야 유지보수성이 높아진다.- 점진적인 개선은 코드를 최신 상태로 유지하는 데 중요하다.2. 개선 방법2-1. 리팩토링정의- 리팩토링은 소프트웨어의 기능을 변경하지 않으면서 코드를 재구성하는 것을 의미한다.목표- 코드를 더 읽기 쉽고 이해하기 쉽게 만들며, 중복을 제거하고, 구조를 개선한다.방법- 작은 단위로 점진적으로 리팩토링한다.- 하나의 작업을 끝내고 테스트를..
클린코드(CleanCode)를 읽고 간략하게 정리한 글입니다.13장. 동시성1. 동시성이 필요한 이유?- 동시성은 결합을 없애는 전략이다.(= 무엇(what)과 언제(when)를 분리하는 전략)- 스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접한데 이로 인해 호출 스택을 살펴보면 프로그램 상태가 곧바로 드러난다.응답 시간 단축: 동시성은 시스템의 응답 시간을 줄여 사용자 경험을 향상시키는 데 중요한 역할을 한다.자원 활용 극대화: 프로세서와 같은 시스템 자원을 효율적으로 활용할 수 있게 한다.설계 단순화: 큰 문제를 작은 문제로 나누어 병렬로 처리할 수 있다.2. 난관// Code 1-1public class X { private int lastIdUsed; public int getNext..