반응형

 

 

배경


 

각 서비스에서 API 명세를 보고싶을 때 각 서비스에서 실행한 포트번호를 들어가서 하나하나 확인을 해야 하는 문제가 생겼다. 

 

게이트웨이에서 각 서비스 포트 번호를 몰라도 확인할 수 있으면 좋겠다 라는 생각에 Swagger를 GateWay에 넣을 생각을 하게 됐다.

 

 

목표


 

모든 서비스에서 Swagger 설정 중복 제거

 

이전 포스팅 글에서 베이스 엔티티를 따로 적용한 프로젝트에서 Swagger 설정 클래스 추가하여 모듈로 구성 

 

 

의존성 추가 


 

공통 모듈 (gabojago-common)

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'

 

각 서비스에서 적용하려고 할 때 spring-boot-starter-web 기반인 tomcat 환경이기 때문에 webmvc-ui를 의존 받아야 합니다.

 

 

구현 클래스 


 

공통 모듈내 클래스 생성

@AutoConfiguration
@OpenAPIDefinition(
    info = @Info(
        title = "Gabojago Common API",
        version = "v1.0",
        description = "공통 Swagger 설정"
    )
)
public class SwaggerAutoConfig {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .addServersItem(new Server().url("/"))
                .info(new io.swagger.v3.oas.models.info.Info()
                        .title("Gabojago API 문서")
                        .version("v1.0")
                        .description("공통 Swagger 자동 구성"));
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOriginPatterns("*")
                        .allowedMethods("*")
                        .allowedHeaders("*")
                        .allowCredentials(true);
            }
        };
    }
}

 

src -> main -> resources -> META-INF -> spring -> org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일 추가 

 

org.springframework.boot.autoconfigure.AutoConfiguration.imports 내부에 밑에 한줄 추가

com.gabojago.swagger.config.SwaggerAutoConfig

 

 

적용 방식


 

각 서비스에서는 gitpack 에 배포한 의존성을 주입받습니다. 

    implementation 'com.github.GBG-Gaboja-Go:gabojago-common:1.0.5'

 

GateWay

springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    enabled: true
    urls:
      - name: user-service
        url: http://localhost:20000/v3/api-docs
      - name: order-service
        url: http://localhost:20001/v3/api-docs

 

 

정리


 

사실 gateway에 swagger를 적용하면서 엄청 많은 에러를 만났다.. CORS 문제부터 기존에 등록되어있던 로드밸런싱 경로랑 겹치는 부분때문에 애를 많이 먹었다.. 

 

CORS문제는 다음 포스팅에서 정리해두겠다.. 

 

728x90
반응형