테스트 환경 공통
- 제외
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>
Plain Text
복사
최초에서 최대까지의 범위를 넓게 잡은 이유는 SXSSF의 경우 캐싱을 하여 사용해서 대용량을 처리할 수 있게 했지만, XSSF의 경우 캐싱을 하지 못해서 모든 데이터를 메모리에 들고 있다. 이 때문에 out of memory가 발생함
HSSF= xls= 2003 년도 이전 엑셀 버전 지원 목적
XSSF= xlsx = 2007 년도 이후 엑셀 버전 지원 목적
SXSSF = xlsx= XSSF의 성능 개선 버전
결과
데이터 모델은 실제로 존재할 수 있고 구현해야 하는 필요성을 바탕으로 제작했습니다. 예로 학사 정보 시스템에서 엑셀 다운로드를 구현해야 한다면 필요한 정보들을 생각하여 만들었습니다.
공통 사용 코드 (데이터 모델 정의)
celper 사용 코드
setUp (데이터 모델)
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
Plain Text
복사
테스트 코드
직접 구현 코드
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분 이상되는 기능은 비기능적 사항 오류)
Plain Text
복사
테스트 코드
ToExcel 사용 코드
Celper, excel-download(배달의 민족) 시간 비교 (SXSSF기준, 단일 테스트)
요약
- 300_000 건
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 0.259 ± 0.004 s/op
JMHTest.excelDownloadLoad avgt 10 0.457 ± 0.008 s/op
- 3_000_000 건
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 2.563 ± 0.038 s/op
JMHTest.excelDownloadLoad avgt 10 4.685 ± 0.205 s/op
- 30_000_000 건
Benchmark Mode Cnt Score Error Units
JMHTest.celperLoad avgt 10 24.790 ± 1.159 s/op
JMHTest.excelDownloadLoad avgt 10 51.192 ± 17.357 s/op
Plain Text
복사
테스트 코드
excel-download 사용 코드