[Spring] Spring Boot 3를 위한 RestDocs, openAPI3 버전 업그레이드
스프링부트 버전 2.x 에 restdocs + openapi3 를 이용하여 요청, 응답값을 테스트한 뒤 문서화를 위한 제너레이션을 하고 있었습니다.
문서 테스트 코드는 동일하게 두고 테스트를 돌리면 위와 같이 java.lang.NoClassDefFoundError: org/springframework/restdocs/operation/QueryStringParser 에러가 발생하였습니다.
spring boot 버전업을 했으니 문서화 관련 의존성의 버전들도 짚어볼 필요가 있어보입니다.
스프링부트 3 버전부터는 스프링 프레임워크 6을 사용합니다.
spring-restdocs 3.0.0 버전의 dependecy 정보를 보면 스프링 프레임워크의 의존성이 6으로 올라간 것을 확인할 수 있습니다.
따라서, org.springframework.restdocs:spring-restdocs-webtestclient 버전을 3.0.0으로 올려주었습니다.
이번에는 java.lang.NoSuchMethodError: 'org.springframework.http.HttpStatus org.springframework.restdocs.operation.OperationResponse.getStatus()' 에러가 발생했습니다.
어떤 의존성이 문제인가 보기 위해 마지막 호출 부분이 어디인지 확인해보았습니다.
마지막 호출부분으로 찍힌 ResourceSnippet.kt:81 번째 줄을 확인해보니 com.epages:restdocs-api-spec:0.16.0 이 문제인 것 같았습니다.
restdocs-api-spec 버전들 중 가장 최신 메이저버전에 해당하는 릴리즈노트를 찾아보았습니다.
제목부터가 스프링 부트 3.0 호환성이네요. 마찬가지로 해당 버전으로 업데이트 해주었습니다.
업데이트 하는 김에 마이너버전도 최신껄로 맞추었습니다.
com.epages:restdocs-api-spec 버전을 0.17.1 으로 올려주었습니다.
restdocs-api-spec 버전까지 변경해주니 테스트는 정상으로 통과하였습니다.
그러나 openapi3 명령을 돌리니 이제는 위와 같은 에러가 발생하였습니다.
com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class com.epages.restdocs.apispec.model.RequestModel] value failed for JSON property requestParameters due to missing (therefore NULL) value for creator parameter requestParameters which is a non-nullable type
requestParameters가 not-null인데 null이라고 합니다. RequestModel이 뭔가 바뀐것 같습니다.
com.epages.restdocs.apispec.model 의 RequestModel 입니다.
보다시피 requestParameters가 존재합니다.
테스트 빌드 결과물로 직접 확인해보았습니다. 확인해보니 requestParameters는 없고 파라미터 관련 정보는 queryParameters, formParameters가 있었습니다.
정확한 비교를 위해 스프링 2.x 대에서 사용하던 테스트의 빌드 결과물도 확인해보았습니다.
확인해보니 requestParameters 는 있었고 queryParameters, formParameters는 없었습니다.
왼쪽이 restdocs-api-spec:0.17.1의 RequestModel이고 오른쪽이 0.16.0 버전의 RequestModel입니다.
RequestModel 모델이 변경되어 에러가 발생한 것이 자명해보입니다.
해당기능으로 의심갈만한 의존성은 com.epages:restdocs-api-spec-openapi3-generator 였습니다.
따라서 마찬가지로 해당 버전도 0.17.1 버전으로 맞춰주니 문서화를 위한 yml 파일까지 무사히 얻을 수 있었습니다.
정리
스프링 2.x -> 3.x 으로 버전업을 하면서 restdocs+openapi3 버전 문제가 있어서 버전업을 진행하였습니다.
dependency | as-is version | to-do version |
org.springframework.boot | 2.7.3 | 3.0.0 |
org.springframework.restdocs:spring-restdocs-webtestclient | 2.0.4.RELEASE | 3.0.0 |
com.epages:restdocs-api-spec | 0.16.0 | 0.17.1 |
com.epages:restdocs-api-spec-openapi3-generator | 0.8.2 | 0.17.1 |
변경한 버전업은 위와 같습니다.