문제 발생
Spring Rest Docs + Swagger를 써보려고 하였다.
어느정도 설정이 다 끝나서 기분 좋게 마무리 하려고 배포 환경에서 실행하는것 처럼 jar 파일로 실행해보았다.
하지만 jar 파일로 빌드 후 java -jar 명령어로 실행하니 아래처럼 Swagger UI에서 openapi3.yaml을 읽지 못하였다.
분명 IDE에서는 몇번을 해봐도 잘 되는데 jar 파일로 실행해보면 openapi3.yaml 파일을 읽지 못하는 현상이 발생하였다.
문제 해결
jar 파일로 패키징 시 static 파일을 jar 파일에 추가해주지 않아서 발생한 문제였다.
jar 파일로 패키징하면 static 경로의 파일들은 jar 파일 내의 /BOOT-INF/classes/static 경로에서 읽는다.
IDE로 실행할 때는 static 파일을 읽을 수 있었지만, jar 파일로 패키징 할 때 openapi3.yaml 파일을 넣어준 적이 없다.
그래서 아래처럼 jar 파일을 만드는 단계인 bootJar 단계에서 openapi3.yaml 파일을 함께 패키징 하도록 설정하였다.
또한 openapi3.yaml 파일이 생성되는 단계인 copyOasToSwagger 다음에 실행되게 하였다.
// build.gradle.kts
tasks {
bootJar {
dependsOn("copyOasToSwagger")
from("build/api-spec") {
into ("BOOT-INF/classes/static/swagger-ui")
}
}
}
또한 swagger-initializer.js 의 url 경로를 아래처럼 수정해주었다.
... 생략
window.ui = SwaggerUIBundle({
url: "/swagger-ui/openapi3.yaml",
dom_id: '#swagger-ui',
... 생략
task 실행 목록을 보면 원하는 순서대로 동작함을 알 수 있다.
Swagger UI 도 잘 동작한다.
'백엔드 > 트러블 슈팅' 카테고리의 다른 글
Spring Boot Actuator의 health check 오류 (0) | 2024.06.04 |
---|---|
The CodeDeploy agent did not find an AppSpec file 에러 (0) | 2024.06.02 |
MySQL 연결 시 "Public Key Retrieval is not allowed" (0) | 2024.05.21 |
CORS 트러블슈팅 - PUT, DELETE 요청 (0) | 2024.05.07 |
배포 서버에 HTTPS적용 시 스웨거 CORS 에러 (0) | 2024.05.04 |