본문 바로가기

기타/Open Source

엑셀 생성JAVA 라이브러리 JXLS, SXSSF 비교

자바에서 엑셀 다운로드 기능을 위해 자주 사용되는 방식으로 JXLS, SXSSF 방식이 있다.

JXLS 란?

  • JXLS는 JAVA 오픈소스 라이브러리이다.
  • JXLS는 개발자가 미리 만들어 놓은 엑셀 템플릿을 기반으로 데이터를 삽입하여 엑셀 문서를 생성한다.
  • JXLS 라이브러리에서 제공해주는 명령어들을 이용해 엑셀 템플릿 파일을 만들고, 자바에서 엑셀에 삽입할 데이터 모델의 속성명와 엑셀 템플릿 파일 내의 속성명을 일치시켜주면 엑셀에 데이터 모델의 속성들이 반복적으로 쓰여진다.
  • JXLS은 데이터를 메모리에 계속 들고 있기 때문에 엑셀에 삽입할 데이터가 많으면 속도가 점점 저하되고, 서버에서 Out Of Memory 에러(Java heap space)가 발생할 수 있다.

SXSSF 란?

  • SXSSF는 Apache POI 프로젝트에서 제공하는 엑셀 스트리밍 API 중 하나이다.
  • XSSF(Excel Streaming User Model)는 메모리에 저장된 데이터를 사용하여 엑셀 문서를 생성하는 API이고, SXSSF(Streaming User Model for Excel)는 대용량 데이터를 처리할 수 있는 엑셀 스트리밍 API이다.
  • XSSF에서는 메모리에 모든 데이터를 저장하기 때문에, 대용량 데이터를 처리할 경우 Out Of Memory 에러가 발생할 수 있다. JXLS도 데이터를 메모리에 계속 저장하고 있기 때문에, 대용량 데이터의 경우 Out Of Memry 에러가 발생할 수 있다.
  • 반면, SXSSF는 데이터를 더 작은 단위인 레코드 단위로 쪼개어 처리하므로, 대용량 데이터를 처리할 때도 메모리 사용량이 적어서 성능적인 이점이 있다. 또한, SXSSF에서는 Workbook을 생성할 때 메모리 내의 임시 파일을 사용하여 대용량 데이터를 처리하므로, 파일로 저장하기 전에도 데이터가 일부분씩 쓰여지며, 이후에는 임시 파일에서 데이터를 읽어와서 파일에 저장한다.
  • 따라서, SXSSF는 대용량 데이터를 처리할 때 유용하다.
  • SXSSF는 JXLS처럼 엑셀 템플릿을 사용하지 않고, JAVA에서 Workbook, Sheet, Row, Cell 등의 클래스를 이용해 엑셀 형식을 만든다. 따라서, JAVA에서 Excel Row생성, 각 Cell에 값 주입 등을 일일이 해줘야 하는 번거로움이 있다.

JXLS vs SXSSF

  JXLS SXSSF
장점 - 엑셀 템플릿을 이용하기 때문에 복잡한 레이아웃 구현에 용이 - 메모리 사용량을 최소화하여 대용량 엑셀 생성에 용이
- JXLS보다 엑셀 생성 속도가 빠름. 행 10만 개 기준 5배 빠름
단점 - 엑셀 파일 만들 때 데이터가 대용량일 시, Out Of Memory 에러 발생할 수 있음
- SXSSF보다 엑셀 생성 속도가 느림. 행 10만 개 기준 5배 정도 차이남
- 엑셀 템플릿을 사용하지 않아 복잡한 레이아웃 구현에 번거로움이 있음

JXLS는 엑셀 생성 속도는 느리지만, 레이아웃이 복잡한 경우에 용이하고, 데이터 크기가 작을 때 효율적이다

SXSSF는 대용량의 데이터 엑셀 파일을 만들 때, 레이아웃이 간단할 때 효율적이다.

 

내 업무에서는 엑셀 파일 한 개 당 평균적으로 행의 개수가 1개일 정도로 데이터 크기가 적었다. 행의 개수가 1개일 때 JXLS는 엑셀이 만들어지는 속도가 179ms, SXSSF는 107ms로 데이터 양이 많을 때보단 속도 차이가 크지 않았다. 따라서, 엑셀 템플릿을 사용하는 JXLS 라이브러리를 사용했다. 

 

참고 자료

https://ddoriya.tistory.com/entry/JXLS-POI-JAVA%EC%97%90%EC%84%9C-Excel-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B5%AC%ED%98%84-%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%A2%85%EB%A5%98-%EB%B9%84%EA%B5%90

 

JXLS, POI JAVA에서 Excel 사용하는 구현 방법 및 종류 비교

개발을 하다 보면 종종 운영에서 엑셀 다운로드 기능에 대한 요구가 있는데, 이번에 Java에서 엑셀 다운로드를 구현하는 방법에 대해 알아보겠습니다. Java에서 엑셀 다운로드 기능을 위해 자주

ddoriya.tistory.com

https://techblog.woowahan.com/2698/

 

아 엑셀다운로드 개발,,, 쉽고 빠르게 하고 싶다 (feat. 엑셀 다운로드 모듈 개발기) | 우아한형제

{{item.name}} 1. 들어가며 안녕하세요! 정산시스템팀 병아리 개발자 최태현입니다. 최근에 엑셀 다운로드 개발을 편하게 할 수 있는 모듈을 만들게 되었습니다. 제가 엑셀 다운로드 모듈을 만들게

techblog.woowahan.com