개발은 재밌어야 한다
article thumbnail
반응형

엑셀 다운로드 기능이 갑자기 안되는 일이 생겨났다

에러 로그를 살펴보니 FontConfiguration쪽에서 NPE(NullPointerException)가 발생했다

 

발생로그

더보기

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException

 

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)

....

java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) at java.desktop/java.awt.Font.getFont2D(Font.java:497) at java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2250) at java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469) at java.desktop/java.awt.font.TextLayout.<init>(TextLayout.java:530) at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:285) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117) at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:89) at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:701) at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:693) at

...

java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84) ... 80 more Caused by: java.lang.NullPointerException at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262) at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225) at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107) at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719) at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312) at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35) at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56) ... 85 more

처음에는 createSheet를 보고 sheet를 만들다가 오류가 났나? 했는데 더 내려보니까 NPE이 난 부분이 있길래 찾아보니 데이터독을 적용하면서 Dockerfile을 수정했는데 이때 엑셀 핸들링시에 시스템 폰트가 필요해서 추가한 

 

RUN apk add --no-cache --update ttf-dejavu fontconfig

해당 부분이 누락되었다는 걸 알고 해당 부분을 추가했다

이처럼 Dockerfile에 폰트 설치에 대한 부분을 추가하는 것 아니라 서버에서 fontconfig를 설치해서 사용하는 방법도 있다고 한다. (CentOS 기준)

# fontconfig 디펜던시 설치
sudo yum install fontconfig -y
# 폰트 설치
sudo yum install freetype fontconfig dejavu-sans-fonts -y
# 폰트 캐시 초기화
sudo fc-cache -f -v

 

 

 

 

 

 

 

참고

https://logical-code.tistory.com/191

 

SXSSFWorkbook 생성 시 FontConfiguration에서 NullPointerException이 발생할 때

흔히 대용량 데이터를 엑셀 파일로 내보낼 때, SXSSFWorkbook을 사용합니다. SXSSFWorkbook은 다른 Workbook과는 달리 Streaming api를 사용하기 때문에 대용량 데이터의 경우 보다 적합합니다. 저도 엑셀 다운

logical-code.tistory.com

반응형

'Spring > Spring' 카테고리의 다른 글

[MSA] Hystrix 와 resilience4j를 통한 circuit breaker  (0) 2023.08.30
스프링 부트 config 사용법  (0) 2022.07.12
@RequiredArgsConstructor란?  (0) 2022.06.10
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!