개발자의 길

Springboot swagger를 phaze(dev,prod,real) 별로 활성 비활성 하는 방 본문

4. JAVA

Springboot swagger를 phaze(dev,prod,real) 별로 활성 비활성 하는 방

자르르 2022. 5. 3. 17:17


swagger-ui를 적용하면 아주 편하고 좋다.

 

하지만, 이건 개발서버에서만 노출해야 하고, real(prod)에서는 비노출 하는게 맞다.

 

환경(phaze) 별로 활성/비활성 하는 방법을 3가지 적겠다.

 

셋중 하나를 적용하면 된다.

 

1. 설정파일(application) 설정

application.properties 파일 설정의 경우

	[prod 설정 (application-prod.properties)]

		-> springfox.documentation.enabled=false

	[dev 설정 (application-dev.properties)]
		-> springfox.documentation.enabled=true

application.yml 파일 설정의 경우

	[prod 설정]

    springfox:

       documentation:

           enabled: false

	[dev 설정]

    springfox:

       documentation:

           enabled: false

 

2. 설정파일(application)에서 변수 설정 후, SwaggerConfig 클래스에서 설정

위에 설명한 설정 파일에서 한가지 변수를 설정

swaggerYn=true (dev)

swaggerYn=false (prod)

@Configuration
public class SwaggerConfig  implements EnvironmentAware {
 
    private Environment environment;
 
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.demo.example.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo())
                .enable(Boolean.parseBoolean(environment.getProperty("swaggerYn")));
    }
 
 
    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }
}

물론

@Value("${swaggerYn}")
private String swaggerYn;

으로 프로퍼티 값을 가져와서 사용해도 된다. 이게 더 낫네..

 

3. @Profile 설정

이 설정은 swagger에서 제공한다기 보다는 spring에서 제공하는 어노테이션이다.

위에 SwaggerConfig 파일 위에 설정해주면 된다.

@Profile({"local", "dev"})
@Configuration
public class SwaggerConfig  implements EnvironmentAware {
....
...
}

근대 이 3번 설정에서 prod에서 swagger-ui 호출 url로 접속하면, 이상하게 서버(내장톰캣) 자체가 죽어버리는 현상이 발생한다...



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments