프롬프트 AI&OpenAPI&공공데이터를 활용한 웹앱개발자 양성 과정 87일차

서명원·2024년 4월 19일

1. BATCH시 생성되는 테이블들

BATCH_JOB_EXCUTION 실행시마다 쌓임

STATUS: 종료가 정상적으로 됬는가?

BATCH_JOB_EXCUTION_PARAMS
job을 실행할 때 주는 파라미터.

BATCH_JOB_EXCUTION_SEQ -> 시퀀스

BATCH_JOB_INSTANCE -> JOB과 파라미터의 조합

jobBuilderFactory.get("helloWorldJob")
.incrementer(new RunIdIncrementer()) //강제로 매번 다른 id를 실행할 때 파라미터로 부여

2. 배치 공부방법 팁

배치공부 방법. 진행 db를 하나 놓고, 백업 db를 하나 놓은 후에
실행 후 비교 반복.

db 백업 방법

mysqldumb -> mysql db의 백업 파일 생성

DB 백업
mysqldump -u root batch_ex_24_04 > batch_ex_24_04.sql
mysqldump -u root DB명 > 백업파일명.sql
DB 백업본을 다시 복원
mysql -u root batch_ex_24_04_backup < batch_ex_24_04.sql
mysql -u root DB명 < 백업파일명.sql

4. 스코프

Session Scope
세션 유효 기간동안 유효한 빈

싱글톤 -> 스프링부트 앱이 꺼지기 전까지 유효
세션 -> 브라우저당 객체가 한개씩
리퀘스트 -> 요청당 객체가 한개씩. 응답을 하는 시점에서 생명주기 종료
프로토타입 -> 그냥 매번 새로 만듦

Scope 범위

Bean 프로그램 실행시 일단 생성해서 올림
그런데 Scope가 job이면 job 이 실행될 때 생성되고
step이면 step이 실행될 때 생성된다. -> 메모리 낭비가 안된다.

    @Bean
    public Job helloWorldJob() {
        return jobBuilderFactory.get("helloWorldJob")
                .incrementer(new RunIdIncrementer()) //강제로 매번 다른 id를 실행할 때 파라미터로 부여
                .start(helloWorldStep1())
                .next(helloWorldStep2())
                .build();
    }

하나의 job에서 step을 순서대로 실행할 수 있다.

5. 배치중 에러 터졌을 때에 관해서

    @Bean
    @StepScope
    public Tasklet helloWorldTasklet2() {
        return (stepContribution, chunkContext) -> {
            System.out.println("Hello World 2!");

            if(true) {
                throw new Exception("실패 : 핼로우월드 타스클릿 2");
            }

            return RepeatStatus.FINISHED;
        };
    }

배치 실행이 실패할 경우 EXIT_CODE는 FAILED가 된다.

job 하나에 step이 여러개 있을 경우, job이 실패 했을 때 성공한 step도 다시 실행한다.
그런데 이건 비효율적이다.

스프링 배치

  • 성공시 동작
    -> 같은 명령 1번째 실행(성공)은 수행
    -> 같은 명령 2번째 실행(성공)은 무시

  • 실패시 동작
    -> 같은 명령 1번째 실행(step 5개중 마지막 step 실패)는 수행
    -> 같은 명령 2번째 실행에서는 마지막 step만 실행

어? 우리 코드는 왜 성공한 것도 다시 실행중이지?
.incrementer(new RunIdIncrementer()) 매번 새로운 파라미터를 생성하는 코드를 넣었기 때문.
BATCH_JOB_INSTANCE가 매번 새로 생성되버린다.

6. 파라미터에 관해서

run configuration을 통해 job이름을 설정할 수 있음.


파라미터도 여기서 넘기면 된다.

만약 같은 job과 같은 parameter로 실행하면 에러가 발생한다.

@Value("#{jobParameters['name']}")
파라미터 받는 방법.

7. 서점과 의류쇼핑몰의 차이

ebook 서점
-실물 (x)
-상품(번호, 제목, 가격, 출판사, 작가)

의류 쇼핑몰

  • 실물(o)
  • 상품(번호, 이름, 옵션(RED/95, RED/105)
  • 창고
  • 재고
  • 품절
  • 하자(반품)
  • 배송
  • 송장번호
  • 발송날짜, 수신날짜
profile
백엔드 취업을 꿈꾸는 일본어 전공자

0개의 댓글