본문 바로가기
카테고리 없음

POI Library, HSSF, XSSF, SXSSF

by ghan2 2024. 8. 25.

아파치 POI 라이브러리는 코드상에서 excel을 생성이 가능하게 도와주는 라이브러리이다. 

POI 라이브러리를 보면 엑셀 뿐만 아니라 파워포인트, 워드 등으로도 생성이 가능하게 해주는 것 같다.

 

해당 라이브러리를 사용하면 엑셀 생성의 핵심인 Workbook을 생성하게 된다. 그리고 이 워크북에는 3가지 종류가 있다. 

 

1) HSSF

  • excel 97 ~ 2003 version
  • 최대 65,535까지의 row 생성 가능, 이후 row 생성시 에러 발생
  • 속도 빠름

2) XSSF

  • excel 2007 이상의 version
  • xml 기반으로, 메모리 사용 공간이 HSSF보다 높음
  • row 수 제한 없음
  • 속도 느림

3) SXSSF

  • POI 3.8 beta3 버전부터 지원하는 성능개선 version
  • XSSF의 확장된 형태
  • 대용량 sheet생성시 사용
  • Excel 2007 .xlsx확장자 파일 포맷 지원
  • row수 제한 없음(단, flushRows 필요)
  • 속도 빠름
HSSF는 excel 2007 이후로는 지원이 불가능하여 기존에는 XSSF버전을 사용하고 있었다.
하지만 row 수가 수만 ~ 10만건이 넘어가다 보니 OOM(Out Of Memory)이 발생하게 된다.
서버 리소스를 늘리기 위해 고민하던 때에 눈에 띄인 것이 SXSSF이다.

 

SXSSF는 지정한 row만큼 memory에 올려놓고 생성하다가 지정한 row에 도달하면 임시 XML 파일로 disk에 기록을 하고 memory를 비워주는 streaming이라고 한다. 여기서 스트리밍이라는 개념은 데이터를 한꺼번에 메모리에 올려서 처리하는 대신, 데이터를 조금씩 처리하는 방식을 말한다. SXSSF의 경우, 스트리밍을 통해 엑셀 파일의 행들을 한꺼번에 메모리에 올리지 않고, 슬라이딩 윈도우라는 기법을 사용해 일정한 범위의 행들만 메모리에 저장해 놓고 작업을 한다. 작업이 끝난 행들은 디스크에 기록하고 메모리에서 삭제하므로, 메모리 부담이 줄어들게 된다. 

 

반면, XSSF는 엑셀 파일을 처리할 때 파일의 모든 데이터를 메모리에 로드한다. 이렇게 하면 문서의 모든 행과 셀에 빠르게 접근할 수 있지만, 파일 크기가 크면 메모리 사용량이 급격히 증가하게 된다. 예를 들어, 큰 엑셀 파일을 XSSF로 처리할 경우, 시스템의 메모리가 부족해질 수 있다. 

 

이러한 점에서 발생하는 차이점 중 읽기, 쓰기 방식에 차이가 있다. 

XSSF vs SXSSF 용도 차이

1. XSSF

쓰기: XSSF는 엑셀 파일을 생성하거나 수정할 때, 모든 데이터를 메모리에 로드한 상태에서 작업한다. 이 말은 파일의 모든 행과 셀을 메모리에 올려두고 필요에 따라 수정하거나 새로운 데이터를 추가한다는 뜻이다. 메모리에 모든 데이터를 유지하기 때문에, 파일 크기가 크면 메모리 사용량이 매우 높아질 수 있다.

읽기: XSSF는 전체 엑셀 파일을 메모리에 로드하기 때문에, 파일의 모든 셀과 행에 빠르게 접근할 수 있다. 이 점은 유용하지만 파일이 클수록 메모리 사용량이 많아지고, 이로 인해 성능이 저하될 수 있다. 

2. SXSSF

쓰기: SXSSF는 XSSF와 달리 데이터를 메모리에 한꺼번에 올리지 않고, 슬라이딩 윈도우 방식으로 올리기 때문에 메모리 사용량을 크게 줄일 수 있다. 하지만 기존에 작업한 데이터가 슬라이딩 윈도우에서 벗어나면 더 이상 수정할 수 없고, 디스크에 기록되어 저장한다. 즉, 한번쓴 데이터를 다시 수정하려면, 이미 기록된 파일을 읽어야 한다. 

읽기: SXSSF는 기본적으로 대용량 파일의 쓰기에 최적화된 라이브러리로 설계되었기 때문에, 읽기 작업은 잘 지원하지 않는다. SXSSF로 작성한 파일을 읽으려면, 파일을 디스크에 기록한 후 XSSF로 다시 읽어들여야 한다. 그래서 SXSSF는 읽기 작업보다는 쓰기 작업에 적합하다. 

 

이 때문에, SXSSF는 메모리 제약이 있는 환경에서 대용량 엑셀 파일을 작성할 때 주로 사용하고, XSSF는 메모리 사용량이 문제가 되지 않거나, 파일을 읽고 수정하는 작업이 필요한 경우에 사용한다.

 

 

 


참고

https://velog.io/@wleo04/POI-library-excel-HSSF-XSSF-SXSSF

https://poi.apache.org/components/spreadsheet/

 

POI-HSSF and POI-XSSF/SXSSF - Java API To Access Microsoft Excel Format Files

<!--+ |breadtrail +--> <!--+ |start Menu, mainarea +--> <!--+ |start Menu +--> <!--+ |end Menu +--> <!--+ |start content +--> POI-HSSF and POI-XSSF/SXSSF - Java API To Access Microsoft Excel Format Files Overview Overview HSSF is the POI Project's pure Jav

poi.apache.org