inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

swagger api 리스트 갱신 방법 궁금합니다.

630

dawon.hyun

작성한 질문수 1

0

gateway에 swagger 설치해서 api 리스트를 체크하고 있습니다.

라우트 정보를 config 서버에서 관리하도록 변경해서 gateway 재시작 없이 /actuator/refresh로 라우트 정보가 갱신되는 것은 성공했습니다.

그런데 gateway에 있는 swagger에 definition 목록에서는 추가된 라우트 정보가 반영되지는 않더군요.

apidoc 라우트 빈 등록하는 부분에 @RefreshScope를 적용해봐도 그대로라서 gateway 재시작 없이 반영할 수 있는 방법이 있을까요?

@Configuration
public class OpenApiDocConfig {

	@RefreshScope
	@Bean
	@Lazy(false)
	public List<GroupedOpenApi> apis(SwaggerUiConfigParameters swaggerUiConfigParameters, RouteDefinitionLocator locator) {

		List<GroupedOpenApi> groups = new ArrayList<>();
		List<RouteDefinition> definitions = locator.getRouteDefinitions().log("OpenApiDocConfig").collectList().block();

		Optional.ofNullable(definitions)
			.map(Collection::stream)
			.orElseGet(Stream::empty)
			.filter(routeDefinition -> routeDefinition.getId().matches(".*-service"))
			.forEach(routeDefinition -> {
				String name = routeDefinition.getId();
				swaggerUiConfigParameters.addGroup(name);
				GroupedOpenApi.builder().pathsToMatch("/" + name + "/**").group(name).build();
			});

		return groups;

	}

}

 

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

Gateway에 있는 Swagger에 Definition 목록이 갱신되지 않는 문제에 대해 여쭤봐주셨는데요. Gateway를 재시작하지 않고 추가된 라우트 정보를 반영하는 방법이 궁금하신 거죠?

현재 코드를 보면, OpenApiDocConfig 클래스에서 @RefreshScope 어노테이션이 적용되어 있는데요, 이로 인해 스프링 클라우드 컨피그 서버로부터 변동 사항을 가져옵니다. 그런데, 현재 코드에서는 갱신된 라우트 정보를 리스트에 추가하는 부분이 빠져있어서 반영되지 않는 것 같아요.

아래 코드 부분을 수정하면 갱신된 라우트 정보를 반영할 수 있을 겁니다.

...
.forEach(routeDefinition -> {
    String name = routeDefinition.getId();
    swaggerUiConfigParameters.addGroup(name);
    GroupedOpenApi group = GroupedOpenApi.builder().pathsToMatch("/" + name + "/**").group(name).build();
    groups.add(group); // 빠진 코드 추가
});
...

위와 같이 수정한 후에 다시 실행해보시고 Swagger에 Definition 목록이 잘 갱신되는지 확인해보세요.

추가적인 도움이 필요하시면 언제든지 물어보세요. 좋은 결과 있길 바래요!

케이테스트 서버 운영 방법

2

53

1

맥유저 입장의 고려해주세요

2

83

1

수업 잘 들었습니다.

2

26

2

실행과정 질문입니다.

2

27

1