inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

writer에서 다시 processor 호출 질문 드립니다.

204

행복마디

작성한 질문수 2

0

질문 드립니다.

  1. processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요?

  2. step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요?

  3. processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?

spring-boot spring-batch

답변 2

0

정수원

  1. processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요?

제네릭 타입으로 선언된 값으로만 가능합니다.

만약 여러타입으로 반환하고 싶다면 반환타입을 Object 로 하면 됩니다. 다만 타입캐스팅이 필요할 수 있습니다.

 

  1. step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요?

이 부분은 스프링 배치 내부적으로 실행되는 단계이기 때문에 임의적으로 변경할 수 있는 부분은 아닙니다.

write 를 하게 되면 또 ItemReader 로 넘어가서 새로운 청크 객체가 생성되어 데이터를 가져오기 때문에 기존의 객체를 재사용 하기 위해서는 별도의 구현이 필요합니다.

 

  1. processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?

ItemReader 를 빈으로 생성하든지 아니면 일반 객체로 생성하든지 멀티 스레드 환경이 아니면 크게 문제 될 것은 없습니다.

다만 빈으로 생성한다면 스프링의 여러 기능을 활용할 수 있다는 장점이 있습니다.

옳고 그름의 문제이기 보다는 현 상황에서 스프링의 기능을 활용할 이유가 있다면 빈으로 생성하는 것이 더 낫고 그렇지 않다면 일반 객체로 사용해도 무방합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

  1. 스프링 배치에서 프로세서(processor)는 일반적으로 하나의 타입 A를 다른 타입 B로 변환하여 라이터(writer)에 전달합니다. 동시에 여러 타입을 리턴하는 것은 불가능하지만, B 타입 내에서 C 객체를 포함하는 방식으로 구성할 수 있습니다. 즉, B 타입이 복합 타입이거나 C를 포함하는 컨테이너여야 합니다.

  2. 라이터(writer)에서 처리가 끝난 후 다른 프로세서(processor)를 호출하고 싶다면, 여러 스텝(step)을 연결하거나 청크 기반 프로세싱에 필요한 로직을 커스텀하게 구현해야 합니다. 또는 프로세싱을 완료한 후 별도의 잡(job)이나 스텝(step)을 실행시키는 플로우(flow)의 구성도 고려할 수 있습니다.

  3. reader.read()와 같은 방식으로 직접 호출하는 것은 스프링 배치의 일반적인 사용 방식과는 다릅니다. 스프링 배치는 빈(bean)으로 정의된 리더(reader), 프로세서(processor), 라이터(writer)를 통한 선언적인 청크 모델을 사용하는 것을 권장합니다. 이를 통해 각 컴포넌트의 재사용성과 테스트 용이성, 스프링의 DI(Dependency Injection)와 AOP(Aspect-Oriented Programming) 기능을 활용할 수 있습니다.

스프링 배치에 대한 더 자세한 내용은 스프링 부트 레퍼런스 문서의 ‘18.12. Batch Applications’ 섹션에서 확인하실 수 있습니다. 추가적인 정보가 필요하시면 해당 문서를 참고하시기 바랍니다.

스프링 배치 관련 문서 바로가기

질문에 대한 답변이 되었길 바랍니다. 프로그래밍 관련 추가 질문이 있으시면 언제든 문의해 주세요.

스프링 배치 버전 질문

0

122

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

92

1

질문이 있습니다.

0

130

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

125

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

252

1

Batch 성능 질문

0

153

1

ItemReaderAdapter 종료

0

80

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

236

2

retry count 관련 질문

0

172

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

203

2

job 재실행

0

251

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

175

2

jdbcCursorReader, jdbcPagingReader 질문

0

146

1

step muti-thread 질문

0

110

1

itemSteam open update close 질문

0

112

1