Batch - processor, writer

반응형

저번시간에 간단하게 배치가 어떤것인지 그리고 Reader에 대해 짧게 학습을 진행하였다. 간단하게 복습하면 Reader은 어딘가에 쌓여있는 데이터를 읽는 작업을 일컫는다. 하지만 배치의 전 과정을 생각해보면, 단순히 읽는 것으로 끝나지 않는다. 데이터를 읽고, 가공하고, 저장하는 흐름으로 이루어져 있다. 그렇다면, 어째서 이러한 과정을 거칠까? 이유는 생각보다 단순하다.

첫 번째는 데이터의 크기 때문이다. 대량의 데이터를 한 번에 처리하려고 하면 메모리 부담이 커지고, 중간에 실패했을 때 다시 처음부터 실행해야 하는 문제가 발생한다. 그래서 배치는 데이터를 일정 단위로 나누어 끊어서 처리하는 방식을 선택한다.

두 번째는 데이터의 구조가 서로 다르기 때문이다. 어딘가에 쌓여있는 데이터의 구조와 DB에 저장되어 있는 데이터 구조는 대부분 동일하지 않다. 그렇기 때문에 읽어온 데이터를 그대로 저장하는 것이 아니라, 목적에 맞게 변환하는 과정이 필요하다.

이러한 흐름 때문에 배치는 Reader, Processor, Writer라는 구조를 가지게 된다.
이번에는 Processor와 Writer를 진행해볼 예정이다. 작업을 해봤는데 생각보다 크기가 크지 않아 두 개를 나눠서 설명하기보다는 하나의 흐름으로 묶어서 설명하려고 한다.

데이터 가공을 시작해보자.

위에서 데이터 가공을 왜 하는지 간략하게 살펴봤다.
그렇다면 스프링 배치에서는 어떻게 데이터 가공할 수 있을까?

Reader에서 ItemReader라는 것을 본 적이 있다. Reader에서는 분명 implements ItemReader<PriceReadItem> 이렇게 되어 있었다. 그런데 ItemProcessor를 확인해보면 조금 다르다. PriceReadItem뿐만 아니라 PriceData까지 같이 선언되어 있는 것을 확인할 수 있다.

이 부분에서 헷갈릴 수 있는데, 구조는 생각보다 단순하다.
ItemProcessor<PriceReadItem, PriceData>Reader에서 읽어온 PriceReadItem을 받아서,
PriceData 형태로 변환해서 넘긴다는 의미이다. 즉, 입력 타입과 출력 타입이 다르다. 이게 바로 Processor의 핵심이다.

놀랍게도 이게 전부다. 물론 여기에 추가적으로 특정 데이터는 필요 없으니 제거하거나, 서비스에 맞게 값을 가공하거나, 형태를 조금 더 보기 좋게 바꾸는 작업이 들어갈 수도 있다. 하지만 모든 서비스에서 복잡한 가공이 필요한 것은 아니다.

경우에 따라서는 단순히 DTO → Entity처럼 매핑만 수행해도 Processor의 역할은 충분히 끝났다고 봐도 무방하다.
결국 Processor의 본질은 "읽어온 데이터를 다음 단계에서 사용할 수 있는 형태로 바꿔주는 것"이다.

가공한 데이터를 사용해보자

가공한 데이터를 사용하는 방법도 크게 틀리지는 않는다. 

여기서 chunk라는 단위가 등장한다. 하지만 현재 나는 chunk를 사용하지 않고 배치를 실행하고 있다.
그 이유는 단순하다. 배치의 동작을 조금 더 명확하게 이해하기 위해서이다.

chunk를 사용하게 되면 내부적으로 묶어서 처리되기 때문에, 데이터가 어떻게 흘러가는지 직관적으로 파악하기 어렵다고 느꼈다.
그래서 현재는 chunk 없이 하나씩 처리하는 방식으로 동작을 확인하고 있다.

현재 Writer에서는 RDB에 데이터를 저장하고 있다. 레디스에 넣든, 로그로 찍든, 파일로 만들든 그것은 크게 중요하지 않다.
결국 Writer의 역할은 "어딘가에 기록한다"는 점에서 동일하다.

여기서 중요한 포인트는 따로 있다. 바로 chunk 단위로 데이터가 처리된다는 점이다.
이제 한번 실행해보자. 현재는 스케줄링이 아닌, 수동으로 배치를 실행하고 있는 상태이다.

확인을 해보면, 약 230개의 데이터가 추가적으로 쌓이고 있는 것을 확인할 수 있다. 이 과정을 통해 Reader → Processor → Writer까지의 전체 흐름이 정상적으로 동작한다는 것을 확인할 수 있었다. 이렇게 해서 배치의 기본 구성 요소인 Reader, Processor, Writer를 모두 살펴보았다. 하지만 그렇다고 해서 배치에 대한 학습이 끝난 것은 아니다.

다음 단계에서는 배치를 구성하는 핵심 개념인 Job, Step, 그리고 Chunk에 대해 조금 더 자세하게 알아보려고 한다.

반응형

'개발' 카테고리의 다른 글

batch - step,job  (0) 2026.04.10
카프카의 설정은 진짜일까?? - offset(1)  (0) 2026.04.08
Batch- Reader  (0) 2026.04.07
인덱스 정리  (1) 2026.04.06
배치는 언제 사용이 되어질까?  (0) 2026.04.04

댓글

Designed by JB FACTORY