MSA

springboot Gateway swagger 적용 (MSA)

초록색거북이 2024. 6. 14. 10:23
728x90
반응형
SMALL

사용이유?

 

MSA로 환경을 구축하면, 각 서비스마다 서버가 띄어져있을 것입니다.

 

그 서비스마다 Swagger를 설정하고 이를 개별로 확인하는 것은 상당히 비효율적이라고 생각합니다.

 

각 서비스에 도달하기전 Gateway 서비스가 제어를 하는데, 이 Gateway 서비스에 swagger를 적용하면 됩니다.

 

MSA로 어느정도 구축된 환경이라고 생각하고 진행하겠습니다.

 

또한

 

이 환경을 기준으로 설명하겠습니다.

 

- Java 17

- spring boot 3.2.3

- gradle

- yaml

 

 

설정

 

 

1. 의존성 주입

https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webflux-ui

 

위의 링크에서 최신 버전의 의존성 확인이 가능합니다.

이글 기준, 저는 최신버전인 2.5.0 버전을 사용하였습니다.

 

 

 

 

2. yml 설정

springdoc:
  swagger-ui:
    urls[0]:
      name: Account API
      url: http://게이트웨이 주소/api/account/v3/api-docs
    urls[1]:
      name: Advisor API
      url: http://게이트웨이 주소/api/advisor/v3/api-docs
    urls[2]:
      name: MTNW API
      url: http://게이트웨이 주소/api/mtnw/v3/api-docs
    urls[3]:
      name: Payment API
      url: http://게이트웨이 주소/api/payment/v3/api-docs
    urls[4]:
      name: Ticket API
      url: http://게이트웨이 주소/api/v1/ticket/v3/api-docs

 

해당 설정은 swagger에서의 마이크로서비스와 매칭해주는 작업입니다.

 

springdoc:
  swagger-ui:
    use-root-path: true

 

게이트웨이에 위와 같은 설정을 해주면, 게이트웨이 서버에 접속하였을때, 바로 swagger 주소로 안내해줍니다.

 

 

여기까지가 Gateway 서비스 yml에 설정이였습니다.

 

 

3. 마이크로서비스 설정

 

각 서비스에도 gateway에서 설정했던 것처럼 springdoc을 추가해줍니다.

 

https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webflux-ui

(게이트웨이 에서 설정해줬던 버전과 일치하면 좋습니다)

 

springdoc:
  api-docs:
    version: openapi_3_1
    enabled: true
    path: /api/advisor/v3/api-docs
  enable-spring-security: true
  default-consumes-media-type: application/json
  default-produces-media-type: application/json

 

위의 설정은 api-docs 버전 및 사용 여부 설정, security와 타입에 대한 설정입니다.

 

4. 스웨거 설정예시

 

@RequiredArgsConstructor
@Configuration
@OpenAPIDefinition(
        info = @Info(
                title = "advisor API",
                version = "v1",
                description = "advisor API 입니다."
        )
)
public class SwaggerConfig {

    @Bean
    public OpenAPI openAPI() {

        return new OpenAPI()
                .addServersItem(new Server().url("/"));
    }

}

 

위의 코드는 스웨거의 설정입니다.

 

여기서 OpenApi 객체에서 서버의 url을 /로 설정한 이유는 서버를 배포했을때

서버가 https로 설정되어있을경우 swagger를 통해 API 요청 시,
브라우저 정책에 의하여 http, https 통신간 cors같은 문제가 발생할수있기때문에

url을 root경로로 설정 하였습니다.

 

 

5. 스웨거 설정완료 화면

728x90
반응형
LIST