SpringBoot 3.x 버전 이상 프로젝트에 Swagger 적용 오류 해결 및 springdoc-openapi 적용

반응형
728x90
반응형

오류상황

SpringBoot3.1.2 버전 프로젝트에 Swagger를 적용하려고한다. 

https://devfunny.tistory.com/692

 

SpringBoot + SpringSecurity 프로젝트에 Swagger 3.0 적용하기

이전 버전 Swagger 2.0 적용 방법 https://devfunny.tistory.com/313 SpringBoot에 Swagger을 빠르게 적용해보기 Swagger 요즘 백엔드 개발은 ModelAndView 방식보다는 API 위주의 어플리케이션을 권장하고 있다. API 개발

devfunny.tistory.com

 

▶ 이전에 Swagger3.0을 적용하고 남겨둔 포스팅이 있어서 참고했지만 아래와 같은 오류를 만나게된다.

Type javax.servlet.http.HttpServletRequest not present

 

▶ stackoverflow의 답변은 다음과 같다.

https://stackoverflow.com/questions/71549614/springfox-type-javax-servlet-http-httpservletrequest-not-present

 

Springfox Type javax.servlet.http.HttpServletRequest not present

I'm trying to use SpringFox. Spring Boot version: 'org.springframework.boot:3.0.0-SNAPSHOT' build.gradle dependencies { ... implementation 'io.springfox:springfox-petstore:2.10.5' implementation &

stackoverflow.com

대부분의 답변들은 모두 같은 내용이였다. 요약하자면, SpringBoot 3.0은 JavaEE가 아닌 JakartaEE용으로 빌드되었는데, JakartaEE를 지원하는 SpringFox 릴리스가 없기 때문에 위와 같은 오류가 발생하는 상황이다.

 

해결방안으로는 아래 3가지가 있다.

1) SpringBoot 버전을 이전 버전인 2.7로 다운그레이드한다.

2) 새 버전의 Swagger을 기다려야한다.

3) springdoc-openapi를 사용한다.

 

위 해결방안 중, 제일 적합해보이는 3)번을 적용해보기로했다. 3)번은 SpringBoot3.x 버전 이상부터는 springfox가 아닌 springdoc-openapi-ui 라이브러리를 사용하는 방법이다.

 

 

springdoc-openapi 적용

공식문서의 url은 다음과 같다.

https://springdoc.org/

 

OpenAPI 3 Library for spring-boot

Library for OpenAPI 3 with spring boot projects. Is based on swagger-ui, to display the OpenAPI description.Generates automatically the OpenAPI file.

springdoc.org

springdoc-openapi 라이브러리는 스프링 부트 프로젝트를 사용하여 API 문서 생성을 자동화하는데 도움을 준다. 

 

위 라이브러리는 다음을 지원한다.

  • OpenAPI 3
  • Spring-boot v3 (Java 17 & Jakarta EE 9)
  • JSR-303, specifically for @NotNull, @Min, @Max, and @Size.
  • Swagger-ui
  • OAuth 2
  • GraalVM native images

spring-boot와 swagger-ui 간의 통합을 위해 dependency를 추가한다. 추가하면 swagger-ui가 자동으로 배포된다. 즉, SwaggerConfig.java 파일을 별도 추가 없이도 즉시 적용 가능하다.

<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  <version>2.2.0</version>
</dependency>

한번, 실제 프로젝트에 적용해보자.

 

 

실제 적용

build.gradle.kts
/* swagger */
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")

프로젝트 내에 한가지 셋팅만 추가하면 바로 접속이 가능하다.

 

http://localhost/swagger-ui/index.html

 

반응형

Designed by JB FACTORY