개발 공부중

[error] Could not initialize class sun.awt.X11GraphicsEnvironment 오류 해결 본문

SPRING BOOT

[error] Could not initialize class sun.awt.X11GraphicsEnvironment 오류 해결

개발자 leelee 2026. 5. 22. 22:10

 

1. 문제상황

spring 을 사용하는 화면들에서만 엑셀 다운로드시 아무 반응이 없었다.

관련 코드 반영한 건 한참 전...

운영만 안되고 개발은 또 됨

 

 

2. 오류확인

브라우저 콘솔 : 500 Internal Server Error

tomcat 로그 : 

Handler dispatch failed; nested exception is
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

 

 

3. 에러 흐름 확인

엑셀 다운로드 클릭
↓
SXSSFWorkbook.createSheet()
↓
Apache POI가 엑셀 시트 생성하면서 기본 글자 너비 계산 시도
↓
서버의 폰트/X11 그래픽 환경 초기화 실패
↓
500 에러

 

 

4. 원인 파악 

Apache POI + SXSSFWorkbook + 폰트 계산 때문에 터진 것

 

찾아보니 apache POI가 엑셀 컬럼 너비를 계산하다가 기본 글자 폭을 계산하는 과정에서 서버의 폰트 정보를 읽으려고 했고,

이 과정에서 Java의 AWT 그래픽 환경이 초기화 됐다.

 

하지만 운영 서버는 일반적으로 GUI 환경이 없는 리눅스 서버이기 때문에 X11GraphicsEnvironment 초기화에 실패했다. 

 

Spring Boot 애플리케이션은 실행 시 내부적으로 java.awt.headless=true 속성을 기본값으로 자동 설정하는데

환경설정이 뭔가 초기화 된 거 같았다.

 

 

5. 해결방법

톰캣을 사용하고 있다면,

tomcat/bin/catalina.sh 파일 제일 위에 아래 코드를 넣어주면 된다. 그리고 톰캣 재기동

 

#!/bin/bash    #맨 윗줄

export CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"    #입력


JVM에게 "이 서버는 모니터 화면이 없는(Headless) 환경이니, 화면 출력 시스템(X11)을 찾지 말고 메모리 상에서 자체적으로 폰트 크기만 계산해라"라고 지시하여 에러를 우회한 것

 


(참고)

vi catalina.sh 		#vi 편집기로 셸 파일 열기
파일 수정 후-> esc -> :wq! -> enter    #vi 편집기 저장

 

 

바로 해결됐다.

Comments