Apache POI Library는 코드상에서 excel을 생성이 가능하게 도와주는 library이다.
해당 library를 쓰다보면 엑셀 생성의 핵심인 Workbook을 생성하게 된다.
Workbook 종류는 3가지가 있다.
HSSF는 excel 2007이후로는 지원가능 하지 않아 기존에는 XSSF버전을 사용하고 있었다.
하지만 row수가 수만 ~ 10만건이 넘어가다 보니 OOM이 발생하게 된다.
서버 리소스를 늘려야 고민하던 때에 눈에 띄인 SXSSF
SXSSF는 지정한 row만큼 memory에 올려놓고 생성하다가 지정한 row에 도달하면 임시 XML 파일로 disk에 기록을 하고 memory를 비워주는 streaming이라 생각하면 편하다.
XSSF는 파일생성이 끝나기 전까지 모든 row를 memory위에 올려놓는 것과는 다르게 메모리 절약에 굉장히 효과적이었다.
지정한 row는 기본 500줄이며 희망 시 Workbook 생성 시 지정 가능하다.
public SXSSFWorkbook getWorkbook() {
//인자 값 없이 new SXSSFWorkbook()을 호출하면 기본값 500줄
SXSSFWorkbook workbook = new SXSSFWorkbook(1000);
...
}
public void drawContent(SXSSFSheet sheet) {
for(int i = 0; i < 501; i++) {
Row row = sheet.createRow(i);
Cell cell = row.createCell(0);
cell.setCellValue("value");
if(i < 0) {
continue;
}
//i가 501에서 에러가 난다. > 0번째 index의 row는 이미 메모리에서 없어짐
Row prevRow = sheet.getRow(0);
Cell prevCell = row.getCell(0);
String value = cell.getCellVaue();
}
}
덕분에 좋은 정보 잘 보고 갑니다.
감사합니다.