문제점

AWS lambda + Spring Boot 로 세팅시에, jar 를 빌드해서 업로드하면 Class 를 찾지 못한다는 에러가 발생함

ClassNotFoundException’ 또는 ‘NoSuchMethodError’ 오류가 발생

환경

  • AWS Lambda
  • Spring Boot 2.6.4

원인

  • Spring Initializer 를 사용하면, maven build 시에 기본적으로 Spring-boot-maven-plugin 이 세팅됨
    • 이 플러그인이 없이 jar 를 빌드하면, jar 에 의존성이 있는 라이브러리가 같이 빌드되지 않는 문제점이 있다
    • 즉, - main class 와 start class, 컴파일 된 class 의 path, pom.xml 이 의존하고 있는 라이브러리의 경로를 MENIFEST.MF 에 세팅해준다
  • spring-boot-maven-plugin 으로 빌드시, 1.5.9.RELEASE jar file 에는 com, lib, META-INF, and org 디렉토리가 있음
  • Spring Boot 2.0.0 부터는 BOOT-INF, META-INF and org 디렉토리가 있고, 모든 클래스 파일은 BOOT-INF 에 저장됨
  • 클래스 파일이 저장되는 위치가 다르기 때문에, 실제로 class file 을 찾을 수가 없다

해결책

참고