Skip to content

poi sxssf #

Find similar titles

1회 업데이트 됨.

Edit
  • 최초 작성자
    ihcho
  • 최근 업데이트
    hmkim

Structured data

Category
Programming

apache POI #

Java 언어로 마이크로소프트 오피스 파일을 읽고 쓸 수 있는 기능을 가진 라이브러리이다. Java 개발자라면 POI를 이용하여 Excel 문서를 만들고 내려받는 기능을 만드는 데 자주 사용해보았을 것이다. POI의 다양한 구현체를 통하여 엑셀뿐만 아니라 마이크로소프트 오피스 파일 포맷 대부분을 읽고 쓸 수 있다.

XSSF #

POI의 하위 컴포넌트 중 가장 익숙한 구현체이다. xlsx 확장자 파일을 읽고 쓸 수 있는 컴포넌트이다. 엑셀에서 사용할 수 있는 많은 기능들을 Java로 프로그래밍할 수 있다. 하지만 XSSF 포맷은 행 쓰기 할 때 메모리를 비우지 않아 이슈가 있다. 데이터양이 많지 않은 경우는 편하게 사용할 수 있지만, 데이터양이 많아질수록 Out of Memory(일명 OOM) 이슈가 발생할 가능성이 크다.

SXSSF #

XSSF와 유사한 기능을 제공하지만, 파일을 쓰는 방식이 다르다. XSSF는 쓰기 시에 데이터를 메모리에 적재하는 방식인데 이 때문에 쓰려는 데이터양이 많다면 OOM 이슈가 발생한다. SXSSF는 임시 파일을 생성해 중간중간(행 단위로 flush 진행함) 데이터를 처리하기 때문에 메모리가 매우 적게 사용할 수 있다.

SXSSF 쓰기 전용 #

SXSSF는 쓰기 전용이라 빈 행에 getRow 사용할 때 Null Pointer Exception(일명 NPE)을 발생시킬 수 있으니 주의해야 한다. 또한 쓰려는 행이 비어 있지 않은 생태에서도 Exception이 발생한다. 엑셀 다운로드 기능을 개발할 때 Java에서 엑셀 파일의 스타일을 편집할 수도 있지만 스타일이 이미 적용된 엑셀 파일을 불러와 데이터만 쓰는 방식으로 개발을 진행한다. SXSSF 방식은 쓰기 전용이니 기존 스타일을 못 불러올까?

SXSSF 기존 파일 불러오기 #

스타일이 적용된 엑셀 파일을 불러올 때는 XSSF 방식으로 불러온다. 실제 파일을 쓸 때는 SXSSF 방식으로 진행하여 XSS 방식의 장점인 개발의 편의와 SXSSF의 장점인 적은 메모리 사용을 모두 얻을 수 있다.

FileInputStream fis = null;
ServletOutputStream out = null;
XSSFWorkbook wb = null;
SXSSFWorkbook swb = null;
//스타일이 적용된 엑셀 파일 경로
String path = "(Sample)excel.xlsx"; 
try {
        //스타일이 적용된 엑셀 파일을 불러올때는 XSSF 방식
        fis = new FileInputStream(path);
        wb = new XSSFWorkbook(fis);

        // SXSSF 생성, 100행 단위로 임시파일에 데이터를 flush함
        swb = new SXSSFWorkbook(wb, 100);

        // SXSSF 데이터 쓰기 
        ... 생량

        out = response.getOutputStream();
        swb.write(out);
    } catch (IOException e) {
        ... 생략
    }

실제 데이터를 쓰는 방식은 Sheet, Row, Cell을 가져오거나 생성하여 진행한다. XSSF 방식과 유사하므로 생략한다.

참고 출처 #

0.0.1_20231010_1_v71