본문 바로가기
Framekwork/SPRING

[Swagger] https 접속 시 해당 서버만 목록에 나오게 하기

by 아이엠제니 2024. 4. 2.

 


 

 

Swagger 는 API를 설계, 빌드, 문서화하고, 이를 사용하는 개발자 및 클라이언트 간의 상호작용을 용이하게 하는 도구임. 주로 웹 API를 개발하고 관리하는 데 사용됨. Swagger는 OpenAPISpecification(OAS)라는 표준 스펙을 따르며, 이를 사용하여 APIㅊ를 설명하고 문서화함

 

 

  1. API 문서화
    • API에 대한 자동화된 문서를 생성할 수 있음. API의 엔드포인트, 요청 및 응답 형식, 매개변수, 인증 방법 등을 자세히 설명함
  2.  API 테스트
    • Swagger UI를 통해 API를 테스트할 수 있음. API 엔드포인트에 대한 요청을 시뮬레이션하고 응답을 확인하는 데 도움이 됨
  3. 코드 생성
    • Swagger 스펙을 기반으로 코드를 자동으로 생성할 수 있음. 이를 통해 여러 프로그래밍 언어 및 프레임워크에서 API를 사용하는 데 도움이 됨
  4. API 관리
    • Swagger를 사용하여 API를 관리하고 모니터링할 수 있음. API 버전 관리, 보안, 사용량 제한 등을 설정할 수 있음

 

 

 

 

 

변경 전
@Configuration
@ConditionalOnProperty(name = "spring.profiles.active")
public class SwaggerConfig {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components())
                .info(new Info()
                        .title("REST API도구")
                        .description("별도의 클라이언트 프로그램 없이, Restful방식의 오픈API를 웹에서 테스트 할 수 있도록 도구와 환경을 제공합니다."));
    }
	@Bean
    public OpenApiCustomiser openApiCustomiser() {
        return openApi -> {
            openApi.addServersItem(new Server().url("https://dev").description("Dev Https Server"));
            openApi.addServersItem(new Server().url("https://stg").description("Stg Https Server"));
            openApi.addServersItem(new Server().url("https://prod").description("Prod Https Server"));
        };
    }
}

`openApiCustomiser` 해당 메서드 없이 swagger를 접속하려면, http만 가능했다.

`SwaggerConfig` 클래스에 `openApiCustomiser` 메서드를 추가하고, https url에 대한 설정을 따로 해준다.

그러면 https url로 접속이 가능하다.

 

 

 

https로 접속을 했기 때문에, Servers 부분에서도 https 로 된 url을 선택해야 한다.

하지만 dev에서는 dev만 보고 싶은데, 위처럼 dev, stg, prod가 모두 나오고 있었다.

 

 

 

 

변경 후
@Configuration
@ConditionalOnProperty(name = "spring.profiles.active")
public class SwaggerConfig {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components())
                .info(new Info()
                        .title("REST API도구")
                        .description("별도의 클라이언트 프로그램 없이, Restful방식의 오픈API를 웹에서 테스트 할 수 있도록 도구와 환경을 제공합니다."));
    }

	@Bean
    @Profile("dev")
    public OpenApiCustomiser openApiCustomiserDev() {
        return openApi -> openApi.addServersItem(new Server().url("https://dev").description("Dev Https Server"));
    }

    @Bean
    @Profile("stg")
    public OpenApiCustomiser openApiCustomiserStg() {
        return openApi -> openApi.addServersItem(new Server().url("https://stg").description("Stg Https Server"));
    }

    @Bean
    @Profile("prod")
    public OpenApiCustomiser openApiCustomiserProd() {
        return openApi -> openApi.addServersItem(new Server().url("https://prod").description("Prod Https Server"));
    }
}

이때는 yml 파일에서 profiles를 설정해주고, 해당 클래스에 @Profile을 설정해주면 된다.

 

클래스에 아래 애노테이션을 추가해주고!

  • @ConditionalOnProperty(name = "spring.profiles.active")

 

각 메서드에는

  • @Profile("dev")
  • @Profile("stg")
  • @Profile("prod")

위 메서드를 추가하면 된다.

 

 

 

그럼 dev swagger를 접속했을 때는 위와 같이 dev만 볼 수 있다.

http 자체를 안 보이게 하고 싶은데, 그것도 다른 방법이 있는지 한 번 찾아보긴 해야할 것 같다.

 

 

 

300x250