본문 바로가기

트러블슈팅

Swagger 빌드 문제. Unable to load URL ref: https://opensource.zalando.com/problem/schema.yaml

문제

프로젝트를 Jenkins를 이용해 build 하는 데, 아래와 같은 에러가 났다.

확인을 해보니, Connection timed out과 https://opensource.zalando.com/problem/schema.yaml 을 load할 수 없다는 에러였다.

원인

우선, Connection Out이니 해당 페이지에 접속이 안되거나 네트워크 문제라 생각되었다.

 

접속 문제 확인

https://opensource.zalando.com/problem/schema.yaml 에 들어가니, 접속이 되었다.

 

swagger 분석

해당 URL이 Swagger 어디에서 사용되는 건지 궁금해서 분석하였다.

pom.xml에서 swagger 관련 설정을 찾아보았다.

inputSpec은 입력으로 사용할 OpenAPI 스펙 파일의 경로를 지정한다. api.yml 파일이 스펙 파일 경로인 것을 확인할 수 있다.

importMapping은 불러온 클래스의 매핑을 지정한다. 여기서는 "Problem" 클래스를 "org.zalando.problem.Problem" 패키지에서 불러온다.

api.yml을 살펴보면, component 부분에 'https://opensource.zalando.com/problem/schema.yaml#/Problem' 라고 적혀있었다.

위의 코드는 OpenAPI Specification (OAS) 문서에서 "components" 섹션에 정의된 응답(response) 구성 요소(components)를 보여준다. responses에는 Problem이라는 응답 구성 요소가 정의되어 있다.

 

  • description: 에러가 발생했을 때 발생 원인에 대한 설명을 제공한다.
  • content: 응답 본문(content)에 대한 정보를 정의한다. 여기서는 "application/problem+json" 미디어 유형으로 지정된 JSON 형식의 응답을 정의하고 있다.
  • schema: 응답 본문의 스키마(schema)를 정의한다. 스키마는 데이터 구조와 유효성 규칙을 설명한다. 여기서는 외부 URL("https://opensource.zalando.com/problem/schema.yaml")에 정의된 "Problem" 스키마를 참조하고 있다.

문제 해결

작업할 때, Swagger를 건든 적이 없었고, 해당 URL에 접속이 되므로, Build 시에 네트워크 문제라고 생각했다.

다시 Jenkins에서 build를 시도했고 이번에는 connection time out 에러 없이 빌드 성공하였다.

 

네트워크 에러이므로, 외부에서 불러오고 있는 스키마를 다운 받아서 프로젝트 내에 파일로 가지고 있고, 해당 파일 경로를 사용하면 에러를 방지할 수 있다.