์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- Entity
- aws ์ฟ ํฐ
- prod docker-compose
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- ์๋ฐ
- docker-compose kafka
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- docker ps -a
- Kafka
- redis ํ ์คํธ์ฝ๋
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- Codedeploy ์ค๋ฅ
- docker
- JPA
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- redis ์กฐํ
- nGrinder
- private subnet ec2 ๋ก์ปฌ ์ ์
- s3 log ์ ์ฅ
- aws saa ํฉ๊ฒฉ
- AWS Certified Solutions Architect - Associate
- ์คํํ๋ ๋ฏธ์ค
- ๋ค์ค ์ปจํ ์ด๋
- docker compose
- ํ์ดํผ๋ฐ์ด์
- ํ๋ก๊ทธ๋๋จธ์ค
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] Batch ๋ณธ๋ฌธ
[Spring] Batch
๐คRyusun๐ค 2023. 6. 21. 22:06Batch
- ํฐ ๋จ์์ ์์ ์ ์ผ๊ด ์ฒ๋ฆฌ
- ๋๋ถ๋ถ ์ฒ๋ฆฌ๋์ด ๋ง๊ณ ๋น ์ค์๊ฐ์ฑ ์ฒ๋ฆฌ์ ์ฌ์ฉ
- ๋์ฉ๋ ๋ฐ์ดํฐ ๊ณ์ฐ, ์ ์ฐ, ํต๊ณ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ณํ ๋ฑ
- ์ปดํจํฐ ์์์ ์ต๋๋ก ํ์ฉ
- ์ปดํจํฐ ์์ ์ฌ์ฉ์ด ๋ฎ์ ์๊ฐ๋์ ๋ฐฐ์น๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋
- ๋ฐฐ์น๋ง ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ์ง ์๋ ๋ ๋ค๋ฅธ ์ปดํจํฐ ์์์ ์ฌ์ฉํ ์ ์๋ค.
- ์ฌ์ฉ์ ์ํธ์์ฉ์ผ๋ก ์คํ๋๊ธฐ ๋ณด๋จ, ์ค์ผ์ค๋ฌ์ ๊ฐ์ ์์คํ
์ ์ํด ์คํ๋๋ ๋์
- ์๋ฅผ ๋ค๋ฉด ๋งค์ผ ์ค์ 10์์ ๋ฐฐ์น ์คํ, ๋งค์ฃผ ์์์ผ 12์ ๋ง๋ค ์คํ
Job
- Job์ JobLauncher์ ์ํด ์คํ
- Job์ ๋ฐฐ์น์ ์คํ ๋จ์๋ฅผ ์๋ฏธ
- Job์ N๊ฐ์ Step์ ์คํํ ์ ์์ผ๋ฉฐ, ํ๋ฆ(Flow)์ ๊ด๋ฆฌํ ์ ์๋ค.
- ์๋ฅผ ๋ค๋ฉด, A Step ์คํ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ B Step ๋๋ C Step์ ์คํ ์ค์
Step
- Step์ Job์ ์ธ๋ถ ์คํ ๋จ์์ด๋ฉฐ, N๊ฐ๊ฐ ๋ฑ๋ก๋ผ ์คํ๋๋ค.
- Step์ ์คํ ๋จ์๋ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- Chunk ๊ธฐ๋ฐ : ํ๋์ ํฐ ๋ฉ์ด๋ฆฌ๋ฅผ n๊ฐ์ฉ ๋๋ ์ ์คํ
- Task ๊ธฐ๋ฐ : ํ๋์ ์์ ๊ธฐ๋ฐ์ผ๋ก ์คํ
- ๋ฐฐ์น ์คํ์ ์ํ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ํ ์ด๋ธ
- BATCH_JOB_INSTANCE
- Job์ด ์คํ๋๋ฉฐ ์์ฑ๋๋ ์ต์์ ๊ณ์ธต์ ํ ์ด๋ธ
- job_name๊ณผ job_key๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋์ row๊ฐ ์์ฑ๋๋ฉฐ, ๊ฐ์ job_name๊ณผ job_key๊ฐ ์ ์ฅ๋ ์ ์๋ค.
- job_key๋ BATCH_JOB_EXECUTION_PARAMS์ ์ ์ฅ๋๋ Parameter๋ฅผ ๋์ดํด ์ํธํํด ์ ์ฅํ๋ค.
- BATCH_JOB_EXECUTION
- Job์ด ์คํ๋๋ ๋์ ์์/์ข ๋ฃ ์๊ฐ, job ์ํ ๋ฑ์ ๊ด๋ฆฌ
- BATCH_JOB_EXECUTION_PARAMS
- Job์ ์คํํ๊ธฐ ์ํด ์ฃผ์ ๋ parameter ์ ๋ณด ์ ์ฅ
- BATCH_JOB_EXECUTION_CONTEXT
- Job์ด ์คํ๋๋ฉฐ ๊ณต์ ํด์ผํ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํด ์ ์ฅ
- BATCH_STEP_EXECUTION
- Step์ด ์คํ๋๋ ๋์ ํ์ํ ๋ฐ์ดํฐ ๋๋ ์คํ๋ ๊ฒฐ๊ณผ ์ ์ฅ
- BATCH_STEP_EXECUTION_CONTEXT
- Step์ด ์คํ๋๋ฉฐ ๊ณต์ ํด์ผํ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํด ์ ์ฅ
package com.example.temp_deletethis.part1;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration
@Slf4j
public class HelloConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public HelloConfiguration(JobBuilderFactory jobBuilderFactory,
StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Job helloJob() {
return jobBuilderFactory.get("helloJob")
.incrementer(new RunIdIncrementer())
.start(this.helloStep())
.build();
}
@Bean
public Step helloStep() {
return stepBuilderFactory.get("helloStep")
.tasklet((contribution, chunkContext) -> {
log.info("hello spring batch");
return RepeatStatus.FINISHED;
}).build();
}
}
Job์ batch ์ ์คํ๋จ์
Job์ ๋ง๋ค์์๋๋ก JobBuilderFactoryํด๋์ค๋ฅผ ์ ๊ณต์ ํ๋๋ฐ ์ด ํด๋์ค๋ Spring Batch์ค์ ์ ์ํด์ ์ด๋ฏธ bean์ผ๋ก ์์ฑ๋์ด์๊ธฐ๋๋ฌธ์ ์์ฑ์ ์ฃผ์
์ผ๋ก ๋ฐ์์์๋ค.
Job์ ์คํ๋จ์๋ฅผ ๊ตฌ๋ถํ ์ ์๋ Incrementer์ Job์ ์ด๋ฆ, step๋ฅผ ์ค์ ํ๋ค. RunIdIncrementer๋ ์๋ก์ด job์ธ์คํด์ค๋ฅผ ์คํํ๋ค. ์ด ํด๋์ค๋ Job์ด ์คํํ ๋๋ง๋ค ํญ์ ํ๋ผ๋ฏธํฐ id๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ฉฐ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ batch๋ฅผ ์คํํ๋ค๋ฉด ๋งค๋ฒ ์คํํ ๋๋ง๋ค ๋์ผํ ์ธ์คํด์ค๋ฅผ ์คํํ๋ค. job์ ์ด๋ฆ์ spring batch๋ฅผ ์คํํด์ค์ ์๋ key์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋ฆฌ๊ณ start ๋ฉ์๋๋ job์คํ์ ์ต์ด๋ก ์คํ๋ ์คํญ์ ์ค์ ํ๋ ๋ฉ์๋์ด๋ค.
Step์ job์ ์คํ๋จ์์ธ๋ฐ ํ๋์ job์ ํ๊ฐ ์ด์์ step๋ฅผ ๊ฐ์ง์ ์๋ค. step์ tasklet์ด๋ผ๋ ๊ฐ์ฒด๋ก ๋ฐฐ์น๋ฅผ ์ฒ๋ฆฌํ๋ค. step๋ job์ฒ๋ผ ํ๋์ bean์ผ๋ก ๋ง๋ค์ด์ผ ํ๋๋ฐ job๊ณผ step์ spring batch์์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ์์๋ค. stepBuilderFactory๋ ์์ฑ์ ์ฃผ์
์ผ๋ก ๋ฐ๋๋ค. Step๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฆ ์ค์ ์ด ํ์ํ๊ณ tasklet์ด๋ผ๋ step ์คํ ๋จ์๋ฅผ ์ค์ ํด์ผํ๋ค. task๊ธฐ๋ฐ๊ณผ chunk๊ธฐ๋ฐ์ด ์๊ณ ์ด๋ฒ์๋ task๊ธฐ๋ฐ์ผ๋ก ์ค์ ํด๋ณธ๋ค.
์คํ๋ง ๋ฐฐ์น ์ค์
- spring-batch-core/org.springframework/batch/core/* ์ ์์น
- ์คํ๋ง ๋ฐฐ์น๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ ์ด๋ธ
- schema.sql ์ค์
- schema-**.sql์ ์คํ ๊ตฌ๋ถ์ DB ์ข ๋ฅ๋ณ๋ก script๊ฐ ๊ตฌ๋ถ
- spring.batch.initialize-schema config๋ก ๊ตฌ๋ถํ๋ค.
- ALWAYS, EMBEDDED, NEVER๋ก ๊ตฌ๋ถํ๋ค.
- ALWAYS : ํญ์ ์คํ
- EMBEDDED : ๋ด์ฅ DB์ผ ๋๋ง ์คํ
- NEVER : ํญ์ ์คํ ์ํจ
- ๊ธฐ๋ณธ ๊ฐ์ EMBEDDED๋ค.
spring batch์์ ๊ธฐ๋ณธ์ ์ผ๋ก job์ ์คํํ ์์๋ ์ค์ ๊ฐ์ ์ ๊ณตํ๋๋ฐ ์ด ๊ฐ์ ์ค์ ํ์ง์์ผ๋ฉด ๋ชจ๋ batch๊ฐ ์คํ๋๊ธฐ๋๋ฌธ์ application.yml ์์ ์ค์ ๊ฐ์ ์ถ๊ฐํ๋ค.
spring:
batch:
job:
names: ${job.names:NONE}
jdbc:
initialize-schema:
'๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป > ๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Batch] JobInstance, JobParameter, JobExecution, JobScope (0) | 2023.06.23 |
---|---|
[Spring Batch] Tasklet, Chunk (0) | 2023.06.22 |
[Spring] RestTemplate (0) | 2023.05.19 |
[Spring] MockWebServer (0) | 2023.05.17 |
[Spring] Spring Retry (1) | 2023.05.16 |