본문 바로가기

Spring/Spring Boot

SXSSFWorkbook를 사용한 엑셀 생성 및 다운로드

반응형

대용량 데이터 엑셀 파일 처리

기존 문제점

1. 엑셀 자체의 한계 : 데이터 양을 소화 못시키는 경우 발생

2. 엑셀 라이브러리 사용시 느려지는 경우

3. 데이터 조회 후 List에 담아두고 엑셀 파일 생성 작업시 메모리 부족상황 발생

4. 데이터 다운로드시 엑셀 파일 생성 시간 다수 소요 -> 클라이언트에게 표현을 어떻게?

 

Spring Framework + MyBatis 환경 구현 방안

1. 엑셀 파일은 xlsx 를 사용해서 최대한의 데이터를 표현할 수 있도록 합니다.

2. 엑셀 라이브러리는 POI를 사용합니다. POI 에 있는 SXSSFWorkbook은 엑셀 파일 생성시 메모리상에 지정된 숫자의 행만을 유지하고, 초과되는 행은 파일에 적어 메모리 사용량을 줄일 수 있게 해줍니다. 단점은 현재 메모리에 있지 않고 파일에 적혀 버린 행에 대해서는 액세스를 할 수 없습니다. 총계 등을 엑셀 파일 앞단에 적어야할 경우 미리 계산해서 앞에서 적어야만 합니다.

3. MyBatis를 통해서 데이터베이스에서 데이터를 꺼낼 때 한번에 데이터를 꺼내는 fetch 사이즈를 지정하여 메모리 사용량을 줄입니다. 이 방법은 데이터베이스에 따라 동작하지 않거나, 설정하는 값이 달라질 수도 있습니다.

4. 파일이 생성되기까지 화면에 진행막대를 보여주기 위해서 jQuery UI 와 jQuery File Download Plugin 을 사용합니다. 이 진행막대도 진행율을 보여주지는 못합니다. jQuery File Download 플러그인은 쿠키를 사용해서 클라이언트에게 파일생성이 끝나고 다운로드가 시작됨을 알립니다. (https://github.com/johnculviner/jquery.fileDownload)
출처: https://offbyone.tistory.com/70 [쉬고 싶은 개발자]

SXSSFWorkbook workbook = new SXSSFWorkbook(100);
SXSSFSheet sheet = workbook.createSheet();

엑셀 파일 생성을 위한 SXSSFWorkbook 객체 생성(메모리에 유지할 행의 수)

반응형