작성
·
158
0
질문 드립니다.
processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요?
step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요?
processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?
답변 2
0
processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요?
제네릭 타입으로 선언된 값으로만 가능합니다.
만약 여러타입으로 반환하고 싶다면 반환타입을 Object 로 하면 됩니다. 다만 타입캐스팅이 필요할 수 있습니다.
step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요?
이 부분은 스프링 배치 내부적으로 실행되는 단계이기 때문에 임의적으로 변경할 수 있는 부분은 아닙니다.
write 를 하게 되면 또 ItemReader 로 넘어가서 새로운 청크 객체가 생성되어 데이터를 가져오기 때문에 기존의 객체를 재사용 하기 위해서는 별도의 구현이 필요합니다.
processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?
ItemReader 를 빈으로 생성하든지 아니면 일반 객체로 생성하든지 멀티 스레드 환경이 아니면 크게 문제 될 것은 없습니다.
다만 빈으로 생성한다면 스프링의 여러 기능을 활용할 수 있다는 장점이 있습니다.
옳고 그름의 문제이기 보다는 현 상황에서 스프링의 기능을 활용할 이유가 있다면 빈으로 생성하는 것이 더 낫고 그렇지 않다면 일반 객체로 사용해도 무방합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
스프링 배치에서 프로세서(processor)는 일반적으로 하나의 타입 A를 다른 타입 B로 변환하여 라이터(writer)에 전달합니다. 동시에 여러 타입을 리턴하는 것은 불가능하지만, B 타입 내에서 C 객체를 포함하는 방식으로 구성할 수 있습니다. 즉, B 타입이 복합 타입이거나 C를 포함하는 컨테이너여야 합니다.
라이터(writer)에서 처리가 끝난 후 다른 프로세서(processor)를 호출하고 싶다면, 여러 스텝(step)을 연결하거나 청크 기반 프로세싱에 필요한 로직을 커스텀하게 구현해야 합니다. 또는 프로세싱을 완료한 후 별도의 잡(job)이나 스텝(step)을 실행시키는 플로우(flow)의 구성도 고려할 수 있습니다.
reader.read()
와 같은 방식으로 직접 호출하는 것은 스프링 배치의 일반적인 사용 방식과는 다릅니다. 스프링 배치는 빈(bean)으로 정의된 리더(reader), 프로세서(processor), 라이터(writer)를 통한 선언적인 청크 모델을 사용하는 것을 권장합니다. 이를 통해 각 컴포넌트의 재사용성과 테스트 용이성, 스프링의 DI(Dependency Injection)와 AOP(Aspect-Oriented Programming) 기능을 활용할 수 있습니다.
스프링 배치에 대한 더 자세한 내용은 스프링 부트 레퍼런스 문서의 ‘18.12. Batch Applications’ 섹션에서 확인하실 수 있습니다. 추가적인 정보가 필요하시면 해당 문서를 참고하시기 바랍니다.
질문에 대한 답변이 되었길 바랍니다. 프로그래밍 관련 추가 질문이 있으시면 언제든 문의해 주세요.