로컬에서 API 호출 시 오류가 발생하지 않는데 AWS 서버에 빌드 후 API 호출 시 500 Error 가 발생하였습니다.
"status": 500, "error": "Internal Server Error", "path": "/api/v1/test
1. 오류원인
스택트레이스의 일부를 발췌 후 확인해보니 커스터마이징한 HttpServletRequestWapper 클래스에서
RequestBody를 파싱할때 사용한 JSONObject 클래스가 원인이었습니다.
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root cause
- java.lang.NoClassDefFoundError: org/springframework/boot/configurationprocessor/json/JSONObject
NoClassDefFoundError 에러는 런타임(실행) 환경에서 해당 클래스를 찾을 수 없는 경우 오류가 발생합니다.
2. 해결책
운영환경에서 제가 사용한 JSONObject 를 찾지 못하는 것으로 판단하여 아래의 표준 클래스로 변경하였습니다.
// 오류 원인
//import org.springframework.boot.configurationprocessor.json.JSONObject;
// 의존성 추가 필수
import org.json.JSONObject;
gradle 기준 의존성 추가는 아래의 링크를 참고하시면 됩니다.
https://mvnrepository.com/artifact/org.json/json
dependencies {
// json
implementation 'org.json:json:20230227'
}
오류 원인을 분석해본 결과
gradle 설정에서 configurationProcessor 클래스를 컴파일에서만 사용하도록 구성되어 있는 것을 확인하였습니다.
로컬과 서버의 자바 버전이 차이가 날 경우 동일한 오류가 발생할 수 있으니 유의해야 할 것 같습니다.
configurations {
compileOnly {
extendsFrom annotationProcessor
}
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
dependencies {
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}
읽어주셔서 감사합니다.
레퍼런스
반응형
최근댓글