🌱 spring/🚛 spring batch
-
Quartz를 이용하여 softDelete한 내용을 실제로 delete 하기🌱 spring/🚛 spring batch 2022. 12. 28. 18:52
이번에는 Quartz를 이용하여 이전 프로젝트에서 사용해봤던 softDelete를 한 데이터에 대해 특정 시간이 지났을 경우 실제로 데이터를 삭제(hard delete)하는 작업을 해보았다. softDelete를 하기 위해 예제로 user entity를 만들어 사용했다. User.java @Entity @Table(name = "user") @Where(clause = "is_deleted = false") @SQLDelete(sql = "UPDATE user SET is_deleted = true WHERE id = ?") @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Getter public class User exte..
-
Quartz2🌱 spring/🚛 spring batch 2022. 12. 22. 18:07
DB 기반의 스케줄러 Quartz는 메모리 기반 스케줄러뿐 아니라 DB 기반의 스케줄러도 지원한다. DB 기반의 스케줄러는 스케줄러 정보를 메모리가 아닌 DB에 저장하기 때문에 다중 서버간 스케줄링이 가능하다! Quartz는 master-slave 형태로 서로간의 통신을 하지않고 단순히 DB 업데이트 정보를 기반으로 각각의 스케줄 인스턴스가 자기가 실행해야하는 Job을 실행한다. Cluster 환경에서 스케줄링이 가능해 Non-Cluster 환경에 비해 여러가지 장점이 존재한다. 고가용성 (HA, High Availability) 한 서버가 셧다운 되도 다른 서버에 의해 Job이 실행된다. 확장성 (Scalability) Quartz 설정된 서버를 구동하면 자동으로 DB에 스케줄 인스턴스로 등록된다. 셧..
-
Quartz (1)🌱 spring/🚛 spring batch 2022. 12. 22. 17:59
Quartz ❓ Job Scheduling 라이브러리 자바로 개발되어 자바 프로그램 어느 것에서도 쉽게 통합해 개발할 수 있다. 수십에서 수천 개의 작업을 실행할 수 있다. 간단한 interval 형식이나 Cron 표현식으로 복잡한 스케줄링도 지원한다. ex) 매 주 토요일 새벽 2시에 실행하는 작업, 매월 마지막 날에 실행하는 작업 등 Cron 표현식 Cron 표현식은 Cron 스케줄러의 정규 표현식이다. 총 7개의 필드로 구성되어 있다. 필드와 특수문자를 조합하여 스케줄링을 조절할 수 있다. * * * * * * * 초 분 시 일 월 요일 년도(생략가능) 특수문자 의미 특수문자 의미 특수문자 의미 * 모든 값 minutes 에 사용시 매분 동작 hours 에 사용시 매시 동작 ? 해당 필드 미사용 -..
-
Spring Batch - ItemProcessor🌱 spring/🚛 spring batch 2022. 12. 16. 15:53
📌 ItemProcessor ItemProcessor는 필수가 아니다 ❗ 데이터를 가공하거나 필터링하는 역할 이는 Writer에서도 구현이 가능하다. 그래도 사용하는 이유는 비즈니스 코드가 섞이는 것을 방지하기 위해서이다. 배치 어플리케이션에서 비즈니스 로직을 추가할 때는 먼저 Processor를 고려해보자❗ ( 읽기 / 처리 / 쓰기 )를 분리할 수 있는 좋은 방법이다. ItemProcessor는 Reader에서 넘겨준 개별 데이터를 가공 및 처리해준다. 사용하는 두 가지 방법 변환 Reader에서 읽은 데이터를 원하는 타입으로 변환해서 Writer에 넘겨 준다. 필터 Reader에서 넘겨준 데이터를 Writer로 넘겨줄 것인지를 결정한다. null 을 반환하면 Writer에 전달되지 않음. 🤷♂️ ..
-
Spring Batch - ItemWriter🌱 spring/🚛 spring batch 2022. 12. 16. 15:45
📌 ItemWriter ItemWriter는 SpringBatch에서 사용하는 출력 기능이다. Spring Batch가 처음 나왔을 때, ItemWritersms ItemReader와 마찬가지로 item을 하나씩 다루었다. 업데이트 이후 부터 ItemWriter는 item 하나를 작성하지 않고 Chunk 단위로 묶인 item List를 다룬다. Reader 의 read()는 Item 하나를 반환하는 반면, Writer의 write()는 인자로 Item List를 받는다. 과정 ItemReader로 통해 각 항목을 개별적으로 읽고 이를 처리하기 위해 ItemProcessor에 전달 이 과정은 chunk의 Item 개수만큼 처리될 때 까지 계속된다. 청크 단위만큼 처리가 완료되면 Writer에 전달되어 Wr..
-
SpringBatch - ItemReader🌱 spring/🚛 spring batch 2022. 12. 16. 15:34
📌 ItemReader Step은 Tasklet 단위로 처리가 된다. Tasklet 중에서 ChunkOrientedTasklet 을 통해 Chunk를 처리한다. 이를 구성하는 3요소로 ItemReader, ItemWriter, ItemProcessor 가 있다. ItemReader 란 Spring Batch의 Chunk Tasklet의 과정 ItemReader는 데이터를 읽어들인다. DB의 데이터만 이야기하는 것이 아니다 File, XML, JSON 등 다른 데이터 소스를 배치 처리의 입력으로 사용할 수 있다. JMS(Java Message Service) 와 같은 다른 유형의 데이터 소스도 지원한다. 또한 Spring Batch에서 지원하지 않는 Reader가 필요한 경우 직접 Reader를 만들어 사..
-
Spring Batch - Chunk 지향 처리🌱 spring/🚛 spring batch 2022. 12. 16. 01:35
📌 Chunk 지향 처리 Chunk 지향 처리는 Spring Batch의 큰 장점 중 하나이다. ❔ Chunk Spring Batch에서 Chunk 란 데이터 덩어리로 작업할 때 각 커밋사이에 처리되는 row의 수이다. 즉, Chunk 지향 처리란 한 번에 하나씩 데이터를 읽어 Chunk 라는 덩어리를 만든 뒤 Chunk 단위로 트랜잭션을 다루는 것이다. Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우 해당 Chunk 만큼만 롤백 이전에 커밋된 트랜잭션 범위까지는 반영이 된다. Reader에서 데이터를 하나 읽어온다 읽어온 데이터를 Processor에서 가공한다. 가공된 데이터들을 별도의 공간에 모은뒤, Chunk 단위만큼 쌓이게 되면 Writer에 전달하고 Writer는 일괄 저장한다. Rea..
-
Spring Batch - Scope🌱 spring/🚛 spring batch 2022. 12. 16. 01:13
⭐ Scope Spring Batch 의 Scope 는 @StepScope, @JobScope 를 이야기 한다. JobParameter 와 Scope Spring Batch의 경우 외부 혹은 내부에서 파라미터를 받아 Batch 컴포넌트에서 사용할 수 있게 지원하고 있다. 이런 파라미터를 Job Parameter라고 한다. ❗Job Parameter를 사용하기 위해서는 항상 Spring Batch 전용 Scope를 선언해야만 한다. 크게 2가지 @StepScope @JobScope 사용법 @Value("#{jobParameters[parameter_name]}") JobScope @Bean public Job scopeJob() { return jobBuilderFactory.get("scopeJob") ..