본문 바로가기

Workin'/Back-End

[Excel] Spring에서 엑셀을 출력하는 방법

반응형

최근 단위 업무 시스템의 개발을 진행하던 도중, 

Spring(Java)에서 엑셀을 출력하는 방법에 대해 잠시 고민한 적이 있습니다.

 

지나가는 분들에게 조금이나마 고민을 해결할 수 있도록 소소하게 정리해둔 방법을 작성합니다.

 

물론, 여러가지 방법이 있습니다만,

제가 진행했던 프로젝트에서는 복잡한 금액 계산이 이루어진 후,

바로 계산된 내용이 엑셀 파일에 반영되어 출력해야만 하는 형태였기 때문에

Spring(Java)에서 엑셀 파일을 출력하는 방법을 사용해야만 했습니다.

 

실제 프로젝트에서 사용하는 방법은 다음 두 가지였습니다:

1. JXLS를 사용한 템플릿 출력

2. Java POI를 이용한 엑셀 템플릿 생성

 

간단히 소개를 하자면,

 

1. JXLS

- 간단한 엑셀 파일을 작성할 수 있는 자바 라이브러리 (a small Java library to make generation of Excel reports easy)

- 공식 홈페이지 : http://jxls.sourceforge.net 

 

JXLS -

Jxls v2.9.0 is released! With this version we migrated from BitBucket to Github. A list of resolved issues The latest component versions org.jxls:jxls:2.9.0 org.jxls:jxls-poi:2.9.0 Introduction Jxls is a small Java library to make generation of Excel repor

jxls.sourceforge.net

- 가장 최신 버전 : v2.9.0, last published가 2020년 11월 1일에 이루어진 걸 보면 계속해서 업데이트가 이루어지고 있는 라이브러리.

- 라이센스 : 아파치 라이센스 (Apache License 2.0.) 

 

2. Java POI 

 - 마이크로소프트 문서를 위한 자바 API

 - 공식 홈페이지 : http://poi.apache.org/

 

Apache POI - the Java API for Microsoft Documents

Apache POI - the Java API for Microsoft Documents Project News 17 February 2020 - POI 4.1.2 available The Apache POI team is pleased to announce the release of 4.1.2. This release features better chart support in XDDF, various rendering fixes in the Common

poi.apache.org

 - 가장 최신 버전 : v4.1.2, last published가 2020년 9월 3일에 이루어진 걸 보면 계속해서 업데이트가 이루어지고 있는 라이브러리.

 - 라이센스 : 아파치 라이센스 (Apache License 2.0.)

 

..막상 찾아보니 최신 버전을 따지는 게 의미가 없어졌네요. (민망..)

JXLS과 Java POI 모두 다양한 프로젝트에서 사용되고 있으며, 계속해서 업데이트가 이루어지고 있습니다.

라이센스는 동일하게 아파치 라이센스를 사용하고 있습니다.

상업적인 이용에 제한을 두지 않으며, 사용할 경우 소스코드의 공개 의무가 없는 라이센스죠.


이 글을 찾아오신 분들이라면 API와 라이브러리의 차이에 대해 알고 계실 거라고 생각합니다만,

간단하게 정리해보자면,

 

- API (Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

- 라이브러리란 소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 공통으로 사용될 수 있는 특정한 기능(들)을 모듈화한 것이다.

 

즉,

프로그램의 구성요소, 다룰 수 있는 컴포넌트에 가까운 것은 라이브러리,

컴포넌트를 다룰 수 있는 인터페이스를 제공하는 것은 API라고 생각합니다.


 

JXLS과 Java POI의 특징을 작성하면 다음과 같습니다.

JXLS Java POI
- 템플릿 파일을 생성해야함.

- 템플릿 파일에 정해진 문법을 이용하여야만 함.

- 만 건이 넘는 데이터를 출력할 경우 out of memory

- 복잡한 템플릿을 적용해야한다면 사용하면 좋음

- 가벼운 라이브러리라 그런지 시간 소요가 적게 듦

- 포털에서 검색할 경우 검색 결과가 비교적 적은 편
- 템플릿 파일이 없어도 파일을 생성할 수 있음.

- 원하는 형태로 셀을 편집하고 다듬을 수 있음.

- 만 건이 넘어가는 데이터도 출력할 수 있음

- 엑셀 저장이 빈번하게 일어날 경우 사용하면 좋음

- 내부에서 한 줄씩 편집하는 형태이므로 시간 소요가 듦

- 포털에서 검색할 경우 검색 결과가 비교적 많은 편

 

이러한 점들을 비교하며 기술을 적용할 때 고민해야되는 부분이 많은데,

가장 치명적이었던 JXLS의 단점은 Java POI에 비해 검색 결과가 비교적 적은 편이었다는 것.

영문으로 검색을 하더라도 제가 막히는 부분을 쉽게 찾기가 너무 힘들더라구용.

 

개인적으로 결론을 내렸던 건,

 

- JXLS : 출력해야하는 내용물의 형식이 확실하게 정해져 있는 경우

- Java POI : 출력해야하는 내용물의 형태가 복잡하지 않거나, 대용량의 데이터를 출력해야하는 경우

 

로 결론을 지었습니다.

 

저의 경우, 내용물의 형식이 확실하게 정해져있으나 복잡한 서식이 골치가 아픈지라

결국에는 JXLS를 선택해 레포트 출력에 도전했는데...

쉽지는 않더라고요. (^^;)

JXLS 사용하면서 주의? 해야하는 점에 대해 조만간 글을 작성해보겠습니다.

 

고민을 하시는 여러분들의 선택에 도움이 되기를 바랍니다.

반응형

'Workin' > Back-End' 카테고리의 다른 글

[Spring Batch] Logback 설정하기  (0) 2019.11.14
[JEUS] Session Timeout 설정  (0) 2019.02.13