본문 바로가기
Spring

스프링배치 완벽가이드 - 7장 ItemReader

by 밝지 2023. 7. 3.
728x90
반응형

 

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();

 

 

 

 

728x90
반응형