- 제외
IO작업 제외
celper를 제외한 나머지 모듈 Style 삽입 제외
- 환경
CPU Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz 1.80 GHz
RAM 8.00GB
최초 힙사이즈 -Xms1G
최대 힙사이즈 -Xmx4G
- 횟수
warmup 5회
실제 동작 측정 10회
결과물 산출 (평균동작시간/초)
- 데이터 크기
데이터 사이즈(Row) 10_000 | 100_000 | 1_000_000 순으로 증가하면서 테스트
데이터 사이즈(column) 30 고정
최종 건수 cell (건) = Row X column
**300_000 = 30 X 10_000 (가장 많이 쓸 것으로 예상되는 범위)**
3_000_000 = 30 X 100_000 (일반적으로 가능한 범위)
**30_000_000 = 30 X 1_000_000 (한계치)**
- 테스트 도구
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.21</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.21</version>
<scope>test</scope>
</dependency>
<aside>
💡 최초에서 최대까지의 범위를 넓게 잡은 이유는 SXSSF의 경우 캐싱을 하여 사용해서 대용량을 처리할 수 있게 했지만, XSSF의 경우 캐싱을 하지 못해서 모든 데이터를 메모리에 들고 있다. 이 때문에 out of memory가 발생함
</aside>
<aside>
💡 HSSF= xls= 2003 년도 이전 엑셀 버전 지원 목적
XSSF= xlsx = 2007 년도 이후 엑셀 버전 지원 목적
SXSSF = xlsx= XSSF의 성능 개선 버전
</aside>
<aside> 💡 데이터 모델은 실제로 존재할 수 있고 구현해야 하는 필요성을 바탕으로 제작했습니다. 예로 학사 정보 시스템에서 엑셀 다운로드를 구현해야 한다면 필요한 정보들을 생각하여 만들었습니다.
</aside>
Celper, POI로 직접 구현했을 때 시간 비교 (SXSSF 기준)요약
**- 300_000 건**
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 0.282 ± 0.041 s/op
JMHTest.originalLoad avgt 10 0.220 ± 0.037 s/op
**- 3_000_000 건**
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 2.847 ± 0.408 s/op
JMHTest.originalLoad avgt 10 2.271 ± 0.113 s/op
**- 30_000_000 건**
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 25.089 ± 2.112 s/op
JMHTest.originalLoad avgt 10 25.326 ± 3.385 s/op
테스트 코드
직접 구현 코드
Celper, ToExcel(다우기술, 카카오) 시간 비교 (XSSF기준, 단일 테스트)요약
**- 300_000 건**
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 1.848 ± 0.160 s/op
JMHTest.toExcelLoad avgt 10 2.576 ± 1.192 s/op
**- 3_000_000 건**
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 21.522 ± 3.679 s/op
JMHTest.toExcelLoad avgt 10 28.716 ± 5.791 s/op
**- 30_000_000 건 - (테스트 불가 컴퓨터 성능 한계 및 현실적으로 1분 이상되는 기능은 비기능적 사항 오류)**
테스트 코드
ToExcel 사용 코드
Celper, excel-download(배달의 민족) 시간 비교 (SXSSF기준, 단일 테스트)