πŸ’» Back-End

[Excel] Springμ—μ„œ 엑셀을 좜λ ₯ν•˜λŠ” 방법

μ˜¬γ„Ή1브 2020. 11. 24. 00:54
λ°˜μ‘ν˜•

졜근 λ‹¨μœ„ 업무 μ‹œμŠ€ν…œμ˜ κ°œλ°œμ„ μ§„ν–‰ν•˜λ˜ 도쀑, 

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 μ‚¬μš©ν•˜λ©΄μ„œ 주의? ν•΄μ•Όν•˜λŠ” 점에 λŒ€ν•΄ μ‘°λ§Œκ°„ 글을 μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

고민을 ν•˜μ‹œλŠ” μ—¬λŸ¬λΆ„λ“€μ˜ 선택에 도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

λ°˜μ‘ν˜•