목록 보기
백오피스 엑셀 다운로드 속도 개선하기
백엔드

백오피스 엑셀 다운로드 속도 개선하기

트렌비
트렌비
2022년 8월 5일

두줄요약

QueryDSL Projection으로 N+1 쿼리를 제거해 엑셀 다운로드 시간을 크게 줄였습니다. SXSSFWorkbook으로 변경해 대용량 엑셀 생성의 메모리 사용량과 처리 시간도 개선했습니다.

문제 상황

  • 백오피스 구매확정 메뉴의 엑셀 다운로드 중 504 Gateway Timeout 발생
  • 로컬 환경에서 약 1,000건 다운로드에 2분 이상 소요

원인 분석

  • JpaSpecificationExecutor의 findAll 호출 과정에서 발생한 N+1 쿼리
  • 다수 연관관계를 가진 OrderItem 엔티티 조회에 따른 불필요한 객체 탐색과 조인 부담
  • 모든 데이터를 메모리에 적재하는 XSSFWorkbook의 대용량 엑셀 생성 비용

해결 방법

  • JpaSpecificationExecutor 제거 후 QueryDSL 기반 조회와 Projection DTO 적용
  • 엑셀에 필요한 필드만 선택하고 필요한 연관관계만 조인하여 N+1 쿼리 제거
  • XSSFWorkbook 대신 스트리밍 방식의 SXSSFWorkbook 적용

성능/운영 포인트

  • 동일 환경에서 전체 다운로드 시간 2분 40초에서 6초로 감소
  • 엑셀 생성 시간 2초에서 400ms로 감소
  • SXSSFWorkbook의 제한된 메모리 윈도우 사용으로 대용량 데이터 OOM 위험 완화

다음 읽기

#Java 주제를 다룬 다른 회사 글

Java 대용량 엑셀 다운로드 기능 구현

Java 대용량 엑셀 다운로드를 JXLS와 POI 기반으로 구현하는 방법을 소개합니다. JXLS 장애 사례와 POI SXSSF 활용 방안도 함께 다룹니다.

티몬
티몬
백엔드
전체 보기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...