많은 데이터가 포함된 XML을 파싱하는 데 DOM 파서보다 SAX 파서가 성능상의 이점이 더 있다고 보고 SAX 파서를 테스트 하기 위한 프로젝트
lombok 1.18.20
jdk 8
gradle 6.5.1
- 창업넷 데이터 item 데이터 500개
- 데이터 위치 : ${프로젝트 폴더}/data/data.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<biztitle>한국-터키 창업웨비나</biztitle>
<detailurl>http://www.k-startup.go.kr/common/announcement/announcementDetail.do?mid=30004&bid=701&searchPostSn=136541&searchAncmId=&searchDtlAncmSn=0&searchPrefixCode=BOARD_701_001&searchBusinessSn=0</detailurl>
<enddate>20210628</enddate>
<insertdate>20210623</insertdate>
<organizationname>(재)글로벌청년창업가재단</organizationname>
<postsn>136541</postsn>
<posttarget>전체</posttarget>
<posttargetage>전체</posttargetage>
<posttargetcomage>전체</posttargetcomage>
<startdate>20210623</startdate>
<supporttype>행사·네트워크</supporttype>
<title>한국-터키 기업가정신과 스타트업 생태계
웨비나 참가 모집</title>
<viewcount>37</viewcount>
</item>
<!-- //.. 생략 -->
</items>
<numOfRows>30</numOfRows>
<pageNo>1</pageNo>
<totalCount>11205</totalCount>
</body>
</response>
SAX 파서는 이벤트 방식으로 동작한다 즉 스트림으로 읽으면서 특정 태그 이름과 매치될때 데이터를 처리하면 된다.
구현은 ItemSaxHandler.java를 참고한다.
변칙성이 없고 정형화된 XML 데이터일 경우 SAX 파서가 월등한 성능을 보여준다.
총 500개의 item 태그의 데이터를 자바 객체로 변환하는 데 고작 0.7초 밖에 걸리지 않았다.
실제로 API를 호출해서 데이터를 가져오는 시간도 고려해야 하지만 데이터를 10000개 처리할 경우 14초 정도 걸릴 것으로 예상된다.