엑셀 다운로드 기능이 갑자기 안되는 일이 생겨났다
에러 로그를 살펴보니 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
참고
'Spring > Spring' 카테고리의 다른 글
[MSA] Hystrix 와 resilience4j를 통한 circuit breaker (0) | 2023.08.30 |
---|---|
스프링 부트 config 사용법 (0) | 2022.07.12 |
@RequiredArgsConstructor란? (0) | 2022.06.10 |