인프런 커뮤니티 질문&답변

qkrtngus116님의 프로필 이미지

작성한 질문수

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

API 문서화 (2) - Swagger를 이용한 API 문서화

강사님! 질문입니다. 프로젝트를 진행중인데 빠른 답변 부탁드립니다 ㅠㅠ

23.07.16 11:29 작성

·

310

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

현재 프론트와 백앤드로 나눠서 프로젝트를 진행중입니다. swagger를 강의를 참고하여 적용중인데, 다음과 같이 문서화가 되지 않고있습니다.

@Configuration
@EnableSwagger2
@EnableAsync
@EnableWebMvc
public class SwaggerConfig implements WebMvcConfigurer {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}

@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select() // ApiSelectorBuilder 생성
.apis(RequestHandlerSelectors.basePackage("com.example.petree.domain")) // API 패키지 경로 todo 패키지 경로 수정
.paths(PathSelectors.ant("domain/**/controller/**")) // path 조건에 따라서 API 문서화 todo API 경로 수정
.build()
.apiInfo(apiInfo()) // API 문서에 대한 정보 추가
.useDefaultResponseMessages(false) // swagger에서 제공하는 기본 응답 코드 설명 제거
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()))
;
}

private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API 문서")
.description("API에 대해서 설명해주는 문서입니다.")
.version("1.0")
.build();
}

private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.build();
}

private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
}

private ApiKey apiKey() {
return new ApiKey("Authorization", "Authorization", "header");
}

}

 

위는 저희 프로젝트의 패키지경로입니다. 무엇이 문제인가요..?

 

혹시 몰라 SecurityConfig도 올려보겠습니다..

답변 1

0

구파고님의 프로필 이미지
구파고
지식공유자

2023. 07. 16. 14:52

안녕하세요. 현재 올려주신 코드만으로는 원인 파악이 쉽지가 않네요. 강의에서는 아래 버전을 사용중인데

implementation 'io.springfox:springfox-boot-starter:3.0.0'

올려주신 소스코드를 보니 @EnableSwagger2 를 사용중이신걸로 보여서 강의에서 사용하고 있는 스프링부트 버전과 Swagger 코드를 보고 다시 적용해보시는게 좋을꺼 같습니다.

WebMvcConfigurer와 @EnableAsync, @EnableWebMvc 도 따로 WebConfig 클래스에서 설정해주면 좋을꺼 같네요! SwaggerConfig에서는 swagger관련 설정만 넣어두고요.

버전 수정등을 했을 때도 해결이 안될경우 가능하시다면 메일로 github url이나 코드를 보내주시면 추가적으로 확인해보도록하겠습니다.

@Configuration
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .select() // ApiSelectorBuilder 생성
                .apis(RequestHandlerSelectors.basePackage("com.app.api")) // API 패키지 경로 todo 패키지 경로 수정
                .paths(PathSelectors.ant("/api/**")) // path 조건에 따라서 API 문서화 todo API 경로 수정
                .build()
                .apiInfo(apiInfo()) // API 문서에 대한 정보 추가
                .useDefaultResponseMessages(false) // swagger에서 제공하는 기본 응답 코드 설명 제거
                .securityContexts(Arrays.asList(securityContext()))
                .securitySchemes(Arrays.asList(apiKey()))
                .ignoredParameterTypes(MemberInfo.class)
                ;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API 문서")
                .description("API에 대해서 설명해주는 문서입니다.")
                .version("1.0")
                .build();
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
    }

    private ApiKey apiKey() {
        return new ApiKey("Authorization", "Authorization", "header");
    }

}

 

 

qkrtngus116님의 프로필 이미지
qkrtngus116
질문자

2023. 07. 16. 14:55

메일로 코드를 보내고싶은데 메일주소 알려주실 수 있을까요??

구파고님의 프로필 이미지
구파고
지식공유자

2023. 07. 16. 15:01

bgh7946@gmail.com 이쪽으로 보내주시면됩니다.