XML
- XML parser로 DOM 파서와 SAX(Simple API for XML) 파서를 많이 이용한다.
DOM 파서는 노드를 탐색할 수 있도록 전체 파일을 메모리에 트리 구조로 읽어들인다. 이 경우 성능에 큰 부하가 발생할 수 있어 배치 처리에는 적합하지 않다. 배치에 사용할 것은 SAX 파서이다. SAX는 특정 엘리먼트를 만나면 이벤트를 발생시키는(=순차적으로 읽어가며 파싱하는) 이벤트 기반 파서이다.
스프링 배치에서는 StAX(Streaming API for XML) 파서를 사용한다. SAX 파서와 차이점은 XML 문서 내 각 섹션을 독립적으로 파싱하는 기능을 제공한다는 장점이 있다. 실행을 하면 SAX 파서가 전체 파일을 파싱하는데 비해 StAX를 사용하면 한 번에 처리해야할 아이템을 나타내는 파일 내 각 섹션을 읽을 수 있다.
JSON
스프링 배치는 JSON 처리에 사용할 수 있는 ItemReader를 제공한다. JsonItemReader는 JSON 청크를 읽어서 객체로 파싱한다는 면에서 StaxEventItemReader의 동작 개념과 거의 동일하다.
JsonItemReader가 동작할 때 실제 파싱 작업은 JsonObjectReader 인터페이스의 구현체에게 위임된다.
스프링 배치는 애플리케이션 개발에 즉시 사용할 수 있도록 JsonObjectReader 인터페이스 구현체 두 개를 제공한다. 하나는 Jackson, 다른 하나는 Gson을 파싱 엔진으로 사용한다.
JsonItemReader를 구성하려면 스프링 배치가 제공하는 빌더를 사용한다. 빌더에는 세 가지 의존성이 필요하다.
- 배치를 재시작할 때 사용하는 배치의 이름
- 파싱에 사용할 JsonObjectReader
- 읽어들일 resource
그 외 입력이 반드시 존재해야 하는지를 나타내는 플래그, 상태를 저장해야 하는지를 나타내는 플래그, 현재의 ItemCount가 있다.
ObjectMapper objectMapper = new ObjectMapper();
JacksonJsonObjectReader<Customer> jsonObjectReader
= new JacksonJsonObjectReader<>(Customer.class);
jsonObjectReader.setMapper(objectMapper);
return new JsonItemReaderBuilder<Customer>()
.name("customerFileReader")
.jsonObjectReader(jsonObjectReader)
.resource(inputFile)
.build();
'Spring' 카테고리의 다른 글
when using copy with more than one source file the destination must be a directory and end with a / (aws 빌드 에러) (0) | 2023.07.04 |
---|---|
스프링배치 완벽가이드 - 6장 잡 실행하기 (0) | 2023.06.25 |
스프링배치 완벽가이드 - 4장 잡과 스텝 이해하기 (0) | 2023.06.25 |
웹 애플리케이션 서버 구동 시 일어나는 일 (초기화 - 서블릿 컨테이너/애플리케이션 초기화) (0) | 2023.06.04 |
jar xvf (jar 옵션) (0) | 2023.06.03 |