개요

스웨거를 사용하고있는데 글로벌 에러 핸들러를 추가하니 NoSuchMethodError가 생겼다.

원인

컴파일 시점이 아닌 런타임 시점에 존재하지 않는 메소드를 호출하는 경우에 발생한다.

대표적인 원인은 버전 충돌이다.

예를 들어 A 의존성에서 B의존성의 B메소드를 호출하기로 약속되어있었는데 A 의존성이 버전업되며 더 이상 B 메소드가 아닌 C메소드를 호출하기로 설계되어있는 것이다.
그럼 런타임 환경에서 C메소드를 찾을 수 없으니 해당 메소드를 찾을 수 없다는 예외가 발생한다.

이 경우에는 스프링 부트 버전이 업그레이드 되며 이전에 스웨거가 호출하던 메소드가 이름이 바뀐 것이다.
생각해보니 이전에 사용했던 스웨거 의존성을 그대로 가져왔고 버전이 2.3.X였는데 최신은 2.8.x여서 발생한 오류였다.