참고사항
1강, Spring Batch, 개요

2강, Spring Batch, 프로젝트 세팅, 관련 스키마 생성
3강, Spring Batch, helloWorldJob 생성 후 실행
4강, Spring Batch, Configuration 수정, 배치 관련 DB, incrementer 설정
mysqldump -u root SpringBatch_10 | mysql -u root SpringBatch_10_backup
// SpringBatch_10에 있는 테이블을 SpringBatch_10_backup로 insert 하는것.
mysqldump -u root SpringBatch_10 > SpringBatch_10.sql
// SpringBatch_10를 sql파일로 만드는 것
mysql -u root SpringBatch_10_backup < SpringBatch_10.sql
// SpringBatch_10.sql파일을 SpringBatch_10_backup 테이블에 insert 하는 것.
스프링 객체 생명주기
- 싱글톤 스코프: 스프링부트 앱이 꺼지기 전까지 살아있다.
- 세션 스코프 : 브라우저당 1개씩
- 리퀘스트 스코프 : 요청당 객체가 1개씩
- 프로토타입 스코프 : 매번 새로 만듦
5강, SpringBatch, Bean, Job, Step Scope
6강, SpringBatch, Step 한 개 추가
7강, SpringBatch, 2번째 Step이 실패하도록
8강, SpringBatch, 지난 Job에서 실패한 Step만 재시도, 파라미터가 같도록
9강, SpringBatch, withParamJob 추가, 실행 시 program arguments 활용
- program arguments 활용

- 위 사진과 같이 IntelliJ 우측 상단 Run 옆의 화살표 클릭 -> Edit Configurations... 클릭

- Modify options 클릭

- program arguments 클릭

- 빨간박스 안에 --spring.batch.job.names=withParamJob name=Jin age=23 이런식으로 입력해서 Run 해주면 된다.
10강, SpringBatch, 파라미터 전달, Tasklet에서 활용
11강, SpringBatch, name 띄어쓰기, Parameter Type
12강, SpringBatch, 정산 개념, 쇼핑몰 개요
13강, SpringBatch, 샘플회원 4명 생성
14강, SpringBatch, 샘플 상품 2개 등록, 상품 옵션 4개씩 추가
15강, SpringBatch, 장바구니 추가, 동일 회원이 같은 상품을 2번 이상 담으면 기존의 수량을 수정
16강, SpringBatch, 장바구니에 있는 품목을 기반으로 주문 데이터 생성
- @ManyToOne : 다대일 관계
- 다수의 엔티티가 하나의 엔티티에 연결되는 상황에서 필수
- OrderItem(주문항목)은 Order(주문)에 속한다.
- OredeItem이 Order를 참조해야한다.
- @OneToMany : 일대다 관계
17강, SpringBatch, 앞부분 설명 및 도매가, 권장판매가, 소비자가, 노출용 사이즈, 색상
18강, SpringBatch, Cash 개념 도입, member1의 충전, 사용, 사유 기록
19강, SpringBatch, 예치금만으로 결제하기
참고
20강, SpringBatch, 2번 주문 정보 생성, 2번 주문에 대한 환불
21강, SpringBatch, 주문 헬퍼, 주문 총 4개 생성
22강, SpringBatch, productBackupJob 생성, Job 실행 전에 데이터 초기화
- ProductBackUpJobConfig 생성
- entity 생성 -> BackupdeProduct
- 역할 : 현재 상품들에 대한 백업데이터를 생성
- SELECT * FROM backuped_product == SELECT * FROM product
- 최종적으로 정산을 위한 복사를 해야한다. ➡ 정산 테이블 생성
- product + product_option + order + order_items + member
- 한달에 1번 정산, 대량 데이터 처리
- chunks 방식 예시
@Configuration
@RequiredArgsConstructor
@Slf4j
public class RebateOrderItemJobConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final OrderItemRepository orderItemRepository;
private final RebatedOrderItemRepository rebatedOrderItemRepository;
@Bean
public Job rebateOrderItemJob(Step rebateOrderItemJobStep1) {
return jobBuilderFactory.get("rebateOrderItemJob")
.start(rebateOrderItemJobStep1)
.incrementer(new RunIdIncrementer())
.build();
}
@JobScope
@Bean
public Step rebateOrderItemJobStep1(
ItemReader orderItemReader,
ItemProcessor orderItemProcessor,
ItemWriter orderItemWriter) {
return stepBuilderFactory.get("rebateOrderItemJobStep1")
.chunk(1)
.reader(orderItemReader)
.processor(orderItemProcessor)
.writer(orderItemWriter)
.build();
}
@StepScope
@Bean
public RepositoryItemReader orderItemReader() {
return new RepositoryItemReaderBuilder()
.name("orderItemReader")
.repository(orderItemRepository)
.methodName("findAll")
.pageSize(1)
.arguments(Arrays.asList())
.sorts(Collections.singletonMap("id", Sort.Direction.ASC))
.build();
}
@StepScope
@Bean
public ItemProcessor orderItemProcessor() {
return orderItem -> new RebatedOrderItem(orderItem);
}
@StepScope
@Bean
public ItemWriter orderItemWriter() {
return items -> items.forEach(item -> rebatedOrderItemRepository.save(item));
}
}
23강, SpringBatch, Tasklets VS Chunks
24강, SpringBatch, productBackupJob 구현, backup 데이터 생성
25강, SpringBatch, 주문 품목 정산 job 구현
- CalculateOrderItem 생성
- entity 생성 -> CalculateOrderItem
- OrderItem 이랑 CalculaterOrderItem의 관계
- Product와 ProductBackup의 관계와 같다.
26강, SpringBatch, 범위 정산
27강, SpringBatch, between 범위 정산
28강, SpringBatch, 정산 테이블의 외래키 제약 제거
29강, SpringBatch, 상품에 대한 주요 데이터를 정산 테이블의 컬럼으로 추가
30강, SpringBatch, 주문 날짜를 정산 테이블에 추가, 데이터 묶음
31강, SpringBatch, 결제일 추가, 미결제시 정산에 미포함
32강, SpringBatch, 특정 연 월에 해당하는 마지막 날짜 구하기
33강, SpringBatch, 날짜 문자열로 LocalDateTime 만들어 주는 함수
34강, SpringBatch, 정산을 입력받은 연 월에 결제된 건을 기준으로 수행
35강, SpringBatch, 작업 1, 프로젝트 세팅
36강, SpringBatch, 작업 2, initData 기반, JPA 기반, AppConfig 기반
37강, SpringBatch, 작업 3, 스프링 시큐리티, 로그인, 로그아웃, 회원가입 1
38강, SpringBatch, 작업 3, 스프링 시큐리티, 로그인, 로그아웃, 회원가입 2
39강, SpringBatch, 작업 3, 수정 1
40강, SpringBatch, 작업 4, 추가 설명, MemberController 테스트 설명
41강, SpringBatch, 작업 5, 음원 관련 파일 업로드, 테스트
42강, SpringBatch, 작업 5, 음원 관련 페이지, 컨트롤러 테스트
앞으로 시나리오
- A
- 음원 1
- 음원 2 => 노래 1, 20,000 => 상품 1
- 음원 3 => 노래 2, 200,000 => 상품 2
- 음원 4
- B
- 음원 5
- 음원 6 => 노래 3, 10,000 => 상품 3
- 음원 7 => 노래 4, 150,000 => 상품 4
- 음원 8
- 내 음원은 나만 볼 수 있다.
- 내 상품은 남들도 볼 수 있다.
- 본인이 만든 음원을 상품화(내가 만든 상품은 살 수 없다.)
- 내가 만든 상품은 내 장바구니에 담을 수 없다.
- 색상, 사이즈, 갯수 X
- Cash 충전금
- 정산
43강, SpringBatch, 작업 6, 상품 등록, 상품 수정
앞으로 시나리오
- 회원, 음원 -> 상품 -> 장바구니 -> Cash -> 주문
44강, SpringBatch, 작업 7, 장바구니, Cash 도입
45강, SpringBatch, 작업 8, 주문, 환불 기능 구현
46강, SpringBatch, 작업 9, 주문 상세 페이지 구현
47강, SpringBatch, 작업 10, 토스페이먼츠 프론트 연동
48강, SpringBatch, 작업 11, 토스페이먼츠 백엔드 연동
49강, SpringBatch, 작업 12, 백엔드에서 결제 데이터 무결성 체크
50강, SpringBatch, 작업 13, 백엔드에서 무결성 체크 후 문제 없다면 결제 완료 처리
52강, SpringBatch, 작업 15, 충전금 사용 js 작업
53강, SpringBatch, 작업 16, 충전금 사용 js 작업, 충전금과 pg 동시 결제
54강, SpringBatch, 작업 17, 정산 데이터 생성 페이지 추가
55강, SpringBatch, 작업 18, 입력된 연 월에 해당하는 날짜 범위 구하기
56강, SpringBatch, 작업 19, 정산 데이터 생성