로컬에서 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"
}

 

읽어주셔서 감사합니다.

 

레퍼런스 
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기