Swagger를 추가할려고 하니
왠지 잘 안되었다.
Swagger 3를 스프링 부트3 에 적용하려다가 실패했다.
@Configuration을 선언하고 해당 클래스에 자바설정코드도 코딩해 놓았는데 빌드할때 클래스로드가 되지 않았다.
기존 코드는 게시판을 구현한 것이였는데 그중 코드를 RestAPI로 간단히 바꾸어놓았다.
API 클래스에 @RestController 선언해 놓고
기존 컨트롤러 클래스의 자바코드를 약간 RestAPI용으로 약간씩 바꾸어 놓았다.
자바언어로 된 Swagger 설정 파일과 위 변경 사항 그리고 해당 의존성 추가 한 것 외에는 다른 변경상황은 기억나지 않았기 떄문에
1 test completed, 1 failed
Caused by: java.lang.ClassNotFoundException at BuiltinClassLoader.java:641
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/kyj/F_LAB/everycodeacademy/build/reports/tests/test/index.html
빌드 할때 테스트 에러가 났다.
해당 문제 좀 알아보니 테스트 시 에러 확인 하는 웹페이지에 접속해서 에러 확인하니
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1984212d testClass = com.every.everycodeacademy.EverycodeacademyApplicationTests, locations = [], classes = [com.every.everycodeacademy.EverycodeacademyApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@535779e4, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@1f3f02ee, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7b94089b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@4eb386df, org.springframework.boot.test.context.SpringBootTestAnnotation@f5f979ab], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:143)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)
at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
이런 에러가 떳엇다.
좀 알아보니
Spring Boot 테스트를 실행할 때 Spring의 Application Context를 로드하는 데 실패했다는 것을 나타냅니다.
라는 의미라는데
작동 하던 것이고 별로 바꾼 것도 없어서 더 당황스러웠다.
의존성과 충돌과 관련된것이라고 추릴 수 있었는데
내가 사용한 의존성은 SpringFox라는 라이브러리였는데
내가 사용한 버전은 3.x.x대여서 스프링부트3에서는 아직 호환되지 않는다고 하였다.
SpringFox을 사용하려면 2.x.x대를 사용하여야 한다고 하였다.
다운그레이드를 하긴 좀 그래서 좀 알아보니
인터넷에 고마우신 분이 먼저 나와 비슷한 경험을 하시고 해결 하신 경우를 찾을 수 있었다.
https://velog.io/@kjgi73k/Springboot3%EC%97%90-Swagger3%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
Springboot 3.x에 Swagger를 적용시켜보자!
Springboot 3.0.1에서 Swagger 3.0.0을 적용 중 발생하는 에러들을 해결해 보자
velog.io
이 때 처음으로
SpringDoc - webMVC 존재에 대해 인지를 하게 되었고 어 뭐지 라는 생각이 들었다.
이것은 @Configuration 즉 설정파일도 필요하지 않고
의존성과 해당 RestAPI에 애노테이션을 붙여놓으면 된다는 것이였다.
의존성을 변경하고 적용하고 설정파일을 주석 처리 후 애플리케이션을 IDE에서 실행시키니
index화면도 뜨고 Swagger UI 화면인
http://localhost:8080/swagger-ui/index.html으로 접속도 되었다.
SpringDoc은 무엇이길래 OpenAPI3.0도 되지??
SpringFox는 뭐지 라는 생각이 들었다.
예전에 한번 OpenAPI3.0 에 대해 알아본 적이 있었지만
다시 읽어보았다.
Swagger 3.0은 프레임 워크고
프레임워크다 보니 여러 기능이 있는데
그중 하나가 Swagger UI이다.
그리고 Swagger 3.0이 사용하는 API등을 표시 표현하는 규격/표준이
OpenAPI3.0이다.
내가 사용한 SpringDoc은 Swagger UI을 이용해 OpenAPI3.0 표시방법으로 사용자 자바코드 (RestAPI)를 사용자가 눈으로 보기 쉽게 해준다.
SpringFox는 아직 안 알아보았지만 비슷한 것이지 않을까 싶다.
참고 :
https://velog.io/@kjgi73k/Springboot3%EC%97%90-Swagger3%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
'[F-Lab 66해빗 페이백 챌린지 ]' 카테고리의 다른 글
| [F-Lab 페이백 모각코 53일차] (SQL) 데이터 모델과 SQL (0) | 2023.09.09 |
|---|---|
| [F-Lab 페이백 모각코 52일차] (SQL) 데이터 모델링의 이해 (0) | 2023.09.09 |
| [F-Lab 페이백 모각코 50일차] 프로그래머스 콜라 문제 (Java) (0) | 2023.08.04 |
| [F-Lab 페이백 모각코 49일차] 프로그래머스 코딩테스트 푸드 파이트 대회 (Java) (0) | 2023.08.03 |
| [F-Lab 페이백 모각코 48일차] (네트워크) 그림으로 배우는 네트워크 원리 (0) | 2023.08.03 |