대용량 데이터 엑셀 파일 처리
기존 문제점
1. 엑셀 자체의 한계 : 데이터 양을 소화 못시키는 경우 발생
2. 엑셀 라이브러리 사용시 느려지는 경우
3. 데이터 조회 후 List에 담아두고 엑셀 파일 생성 작업시 메모리 부족상황 발생
4. 데이터 다운로드시 엑셀 파일 생성 시간 다수 소요 -> 클라이언트에게 표현을 어떻게?
Spring Framework + MyBatis 환경 구현 방안
1. 엑셀 파일은 xlsx 를 사용해서 최대한의 데이터를 표현할 수 있도록 합니다.
2. 엑셀 라이브러리는 POI를 사용합니다. POI 에 있는 SXSSFWorkbook은 엑셀 파일 생성시 메모리상에 지정된 숫자의 행만을 유지하고, 초과되는 행은 파일에 적어 메모리 사용량을 줄일 수 있게 해줍니다. 단점은 현재 메모리에 있지 않고 파일에 적혀 버린 행에 대해서는 액세스를 할 수 없습니다. 총계 등을 엑셀 파일 앞단에 적어야할 경우 미리 계산해서 앞에서 적어야만 합니다.
3. MyBatis를 통해서 데이터베이스에서 데이터를 꺼낼 때 한번에 데이터를 꺼내는 fetch 사이즈를 지정하여 메모리 사용량을 줄입니다. 이 방법은 데이터베이스에 따라 동작하지 않거나, 설정하는 값이 달라질 수도 있습니다.
4. 파일이 생성되기까지 화면에 진행막대를 보여주기 위해서 jQuery UI 와 jQuery File Download Plugin 을 사용합니다. 이 진행막대도 진행율을 보여주지는 못합니다. jQuery File Download 플러그인은 쿠키를 사용해서 클라이언트에게 파일생성이 끝나고 다운로드가 시작됨을 알립니다. (https://github.com/johnculviner/jquery.fileDownload)
출처: https://offbyone.tistory.com/70 [쉬고 싶은 개발자]
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
SXSSFSheet sheet = workbook.createSheet();
엑셀 파일 생성을 위한 SXSSFWorkbook 객체 생성(메모리에 유지할 행의 수)
'Spring > Spring Boot' 카테고리의 다른 글
스프링 Dependency Injection은 어떻게 동작할까? (0) | 2021.03.28 |
---|---|
IoC 컨테이너: MessageSource (1) | 2020.11.25 |
Spring 용어 정리 (0) | 2020.05.06 |
의존성 주입 DI(Dependency Injection) 이해 시켜줘 제발 (0) | 2020.05.06 |
Spring Framework (0) | 2020.05.06 |