OpenSource/Spring Boot

springboot Swagger 설정

태하팍 2024. 3. 8. 02:07
반응형

swagger란? https://swagger.io/

사용해보니 api개발을 할 때 이해관계자에게 또는 팀원들한테 개발한 api대한 것을 사용해보라고
공유를 할 수 있습니다. 혹은 post방식의 경우 브라우저에서 테스트하기가 힘든데
swagger를 사용하면 용이 합니다.(물론 postman같은 친구들을 사용하기도 합니다.)

주저리로..
아주오래전엔 javadoc이라는걸 사용하기 위해서 메소드위에다가 주석을 적고
javadocs를 만들어서 공유하거나 엑셀에 정리를 하거나 위키에 정리해서 공유를 하곤 했습니다.

이제는 springboot에서 swagger를 설정해서 사용하면 됩니다!

그런데..!!

springboot 3.x이상에서는 아래와 같이 io.springfox-swagger가 동작하지 않습니다.

// swagger setting
implementation 'io.springfox:springfox-swagger2:2.9.2'
implementation 'io.springfox:springfox-swagger-ui:2.9.2'
@Bean
public Docket api(){
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.kakao.www.applicationarchitectureguide"))
            .paths(PathSelectors.any())
            .build();
}

private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("Application Architecture Guide")
            .description("springboot기반 Application Architecture Guide")
            .version("1.0")
            .build();
}

 찾아보니.. https://springdoc.org/migrating-from-springfox.html

에서 Migrating form springfox라는것이 있어서 적용해보았습니다.

 gradle 기준 build.gralde에 아래와 같은 dependency를 추가합니다.

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

 그리고 아래와 같은 내용들은 기본적인 내용보다는 조금 더 디테일하게 잘~사용하려면 학습을 해야합니다.
@Tag, @Parameter, @Schema 등등

저 같은 경우는 SwaggerConfiguration은 config디렉토리를 하나 만들어서 그 아래에 만들었습니다.

import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfiguration {

    @Bean
    public GroupedOpenApi publicApi() {
        String[] paths = {"/v1/**"};
        return GroupedOpenApi.builder()
                .group("springboot-public")
                .pathsToMatch(paths)
                .build();
    }

    @Bean
    public GroupedOpenApi NaverApi() {
        String[] paths = {"/nhn/**"};
        return GroupedOpenApi.builder()
                .group("NaverApi")
                .pathsToMatch(paths)
                .build();
    }
    @Bean
    public GroupedOpenApi gRpcApi() {
        String[] paths = {"/gRPC/**"};
        return GroupedOpenApi.builder()
                .group("gRPC-api")
                .pathsToMatch(paths)
                .build();
    }
}

application.yml

springdoc:
  packages-to-scan: 프로젝트의 패키지를 넣습니다. 요 패키지를 스캔합니다. ex) kr.pe.act.applcation
  default-consumes-media-type: application/json;charset=UTF-8
  default-produces-media-type: application/json;charset=UTF-8
  swagger-ui:
    path: /
    disable-swagger-default-url: true
    display-request-duration: true
    operations-sorter: alpha

접속 : http://localhost:포트번호/swagger-ui/index.html

말그대로 swagger 셋팅을 해보았습니다.
위에서 언급했듯이 좀 더 잘 사용하려면 디테일한 셋팅이 필요합니다.
추가적인 내용이 생기면 업데이트 하도록 하겠습니다:)

즐프하세요~~

반응형