Apache POI로 Excel 업로드/다운로드
Apache POI 로 Excel 업로드/다운로드
POI 의 객체 모델(Workbook → Sheet → Row → Cell)과 셀 타입의 함정을 이해하고, 업로드된 XLSX 를 행 번호가 붙은 에러 리포트와 함께 검증하고, 스타일·수식·합계가 들어간 리포트를 10만 행이어도 메모리 걱정 없이(SXSSF) 내려주는 코드를 작성할 수 있게 됩니다.
1. 왜 배우는가
실무에서 "엑셀로 주세요"는 거의 모든 시스템의 요구사항입니다. 회원 명단 일괄 등록, 상품 일괄 수정, 월 매출 리포트, 정산 내역 다운로드. 화면에 표가 있으면 그 옆에는 반드시 "엑셀 다운로드" 버튼이 있고, 관리자 페이지에는 "엑셀 업로드"가 있습니다.
이전 레슨에서 XLSX 가 zip 안의 XML 묶음이라는 것과, 순수 JDK 로도 읽고 쓸 수 있다는 것을 확인했습니다. 하지만 굵은 헤더, 천 단위 구분, 날짜 서식, 합계 수식, 병합 셀, 틀 고정, 드롭다운을 XML 로 직접 조립하는 것은 현실적이지 않습니다. 그래서 자바 세계의 사실상 표준인 Apache POI 를 씁니다.
POI 는 강력하지만 함정이 많습니다.
숫자로 저장된 "12345" 와 문자열 "12345" 는 다른 타입이라 getStringCellValue() 가 예외를 던지고, 날짜는 사실 숫자라서 45908.0 으로 읽히고, 사용자가 지운 줄은 null 행으로 남아 NPE 가 나고, 셀마다 스타일을 만들면 64,000 개 한계에 걸려 파일이 열리지 않고, 10만 행을 XSSFWorkbook 으로 만들면 서버가 OOM 으로 죽습니다.
이 문제들은 모두 "POI 가 엑셀을 어떻게 모델링하는가"를 모르기 때문에 생깁니다.
이 레슨은 POI 의 객체 모델과 셀 타입 체계를 먼저 잡고, 그 위에서 실무 네 가지 흐름 — 업로드 검증(에러 리포트 포함), 스타일 있는 다운로드, 대용량 다운로드, 템플릿 제공 — 을 실행 가능한 코드로 구현합니다. 다음 레슨(03 파일 업로드 서버)에서 HTTP 로 받은 파일을 이 검증기에 넘기면 업로드 기능이 완성됩니다.