Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mapping
- sqs
- goorm
- 자격증
- codedeploy
- codebuild
- goorm x kakao
- CICD
- spring
- 개발자
- Spring Boot
- bootcamp
- jpa
- aws
- rds
- MSA
- data
- CodeCommit
- s3
- Docker
- backenddeveloper
- 티스토리챌린지
- QueryDSL
- nosql
- orm
- 오블완
- 스터디
- Redis
- serverless
- DynamoDB
Archives
- Today
- Total
gony-dev 님의 블로그
[Redis] Spring batch vs. Scheduler 본문
대기열 처리를 공부하다가 Redis를 이용한 해결 방안을 공부했다.
그런데 이 대기열을 어떤 방식으로 진행할지를 고민하다가 Spring batch와 Scheduler를 발견하고,
이를 자세히 알아보기로 했다.
1. Spring batch
우선 스프링 배치의 '배치'는 사용자와 상호작용 없이 여러 개의 작업을 미리 정해진 순서대로 중단 없이 처리하는 과정을 뜻한다.
그리고 스프링 배치는 대용량 요청을 일괄처리하기 위해 설계된 가벼운 배치 프레임워크이다.
Spring의 특정을 가져와 DI, AOP, 서비스 추상화 등 Spring framework의 구성 요소들을 고대로 사용할 수 있다.
Spring batch의 기능에는 로그 추적, 트랜잭션, 작업 재시작 및 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필요한 것들을 제공하고 있다! 또한 최적화와 분할 작업으로 대용량 일괄 작업을 가능하게 한다.
1. 스프링 배치를 사용해야 하는 경우
- 대용량 데이터를 복잡한 작업으로 처리해야 할 때
- 특정 시점에 Scheduler를 통해 자동화된 작업이 필요할 때
- 대용량 데이터의 작업을 트랜잭션 내에서 처리해야 할 때
2. 스프링 배치의 만족 조건
- 대용량 데이터 | 대량의 데이터에 대한 작업을 할 수 있어야 한다.
- 자동화 | 사용자의 개입 없이 실행되어야 한다.
- 견고함 | 잘못된 데이터를 충돌 없이 해결하여야 한다.
- 신뢰성 | 로깅 추적 및 알림이 되어야 한다.
- 성능 | 지정 시간에 처리를 완료하거나 동시에 실행되는 애플리케이션을 방해하지 않도록 해야한다.
3. 스프링 배치 아키텍쳐
- JobRepository
- 다양한 배치 수행과 관련된 수치 데이터와 Job 상태를 유지 및 관리한다.
- 일반적으로 관계형 DB를 사용하며 스프링 배치 내의 대부분 주요 컴포넌트를 공유한다.
- 실행된 단계, 현 상태 등이 모두 JobRepository에 저장된다.
- Job
- 배치 처리 과정을 하나의 단위로 만들어 표현한 객체이다.
- 여러 Step 인스턴스를 포함하며, Job이 실행될 때 스프링 배치의 많은 컴포넌트는 탄력성을 제공하기 위해 서로 상호작용한다.
- JobLauncher
- Job을 실행하는 역할이다.
- Job의 실행 가능 여부, 실행 방법, 파라미터 유효성 검증 등을 수행한다.
- 직접 다룰 필요는 없는 컴포넌트로 Job 실행 시 각 Step을 실행한다.
- Step
- 가장 일반적으로 상태를 보여주는 단위이다.
- 각 Step은 Job을 구성하는 독립된 작업의 단위이다.
- Step에는 단계 내애서 단일 태스크를 수행하는 Tasklet 방식, 한 번에 하나씩 데이터를 읽어 덩어리를 만들고 Chunk 단위로 트랜잭션을 다루는 Chunk 지향 프로세싱 방식(대량 처리에 유용)까지 총 두 가지 방식이 존재한다.
2. Spring Scheduler
스프링 스케쥴러는 Spring framework에서 제공하는 특정 시간에 등록된 작업을 자동으로 실행시키는 과정이다.
추가적인 의존성이 불필요하며 사용이 쉽고,
1개의 Thread pool을 사용한다.
1. 스프링 스케쥴러 설정 옵션
1. fixedDelay
- 작업이 끝난 시점부터 시간을 카운트하는 옵션
@Scheduled(fixedDelay=1000)
public void fixedDelayScheduler(){
System.out.println("Execute 1000ms later after this work finished");
}
2. fixedRate
- 작업의 시작부터 시간을 카운트하는 옵션
@Scheduled(fixedRate=1000)
public void fixedRateScheduler(){
System.out.println("Execute every 1000ms without waiting this work finished");
}
3. cron 표현
- 앞에서부터 초, 분, 시, 일, 월, 요일 (연도) 순으로 진행
- 특수문자
- * | 모든 값
- ? | 특정 값이 아닌 어떤 값이든 상관 없음
- - | 범위를 지정할 때 사용
- , | 여러 값을 지정할 때 사용
- / | 초기값과 증가치 설정시 사용
- L | 지정할 수 있는 범위의 마지막 값 표시
- W | 가장 가까운 평일을 설정할 때 사용
- # | N번째 특정 요일을 설정할 때 사용
'DBMS' 카테고리의 다른 글
[Redis] Connection Mode-2 (0) | 2024.12.08 |
---|---|
[Redis] Connection Mode-1 (0) | 2024.12.06 |
[Redis] Transaction (0) | 2024.10.15 |