Print
카테고리: [ Development ]
조회수: 6671

1. Apache POI란 무엇인가?

POI(Poor Obfuscation Implementation)은 아파치에서 제공하는 MS 오피스 관련 라이브러리입니다. 이 라이브러리를 통해 자바로 MS 오피스 파일을 컨트롤할 수 있게 됩니다.
 
보통은 엑셀을 다루기 위해 많이 사용됩니다.

2. 버전 정보

2-1. POI 3.16 beta 2

2-2. POI 3.17


3. Reader, Writer

내부적으로는 크게 Reader와 Writer가 있습니다.

3-1. Reader

ExcelReader er = new ExcelReader();
List list = er(Emp.class, "/text/empExcel.xls");

CSVReader cr = new CSVReader();
List list = cr(Emp.class", "/text/empExcel.csv");

이 때 List<VO>의 멤버변수 이름과 엑셀 파일의 첫 컬럼 이름이 일치해야 합니다.

3-2. Writer

ExcelWriter ew = new ExcelWriter();
List list = empService.getList();
ew.createSheet(list);
FIle file = ew.write("/text/empExcel.xls", true);

List list = empService.getList();
CSVWriter cw = new CSVWriter();
File file = cw.writer(list, "/text/empExcel.csv", true);


4. Large File Upload

대용량 파일을 업로드할 때 OutOfMemoryError가 발생하는 경우가 많습니다. 이 때는 다음과 같이 엑셀 파일을 Multipart로 업로드 한 후 해당 파일을 XSSF 이벤트 기반 SAX 방식으로 parse하는 동시에 Mybatis Batch로 DB에 저장합니다. 중요한 것은 메모리에 전체 데이터를 담지 않는 것입니다.

4-1. XSSF + SAX (Event API)

org.apache.poi.xssf.eventmodel.XSSFReader의 인스턴스를 사용합니다.


5. Large File Download

스트리밍 방식으로 엑셀을 다운로드합니다. 기본 매커니즘은 JDBC의 ResultSet을 바로 Servlet의 OutputStream으로 보내는 방식입니다. 

5-1. SXSSF (Streaming Usermodel API)

org.apache.poi.xssf.streaming 패키지를 통해 제공합니다.

다음 소스 코드를 살펴보겠습니다.

SXSSFWorkbook wb = new SXSSFWorkbook(100); 

이는 메모리 상에 100 rows를 유지하고, 그 이상의 것은 디스크로 flush하는 것을 의미합니다. 즉,

 

 

이제 Apache POI 사이트를 방문해보자!!