• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.11.29 16:46 작성 조회수 94

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(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?

답변 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 인턴

2023.12.01

안녕하세요, 인프런 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’ 섹션에서 확인하실 수 있습니다. 추가적인 정보가 필요하시면 해당 문서를 참고하시기 바랍니다.

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

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