inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

378

qkrtngus116

작성한 질문수 22

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도 올려보겠습니다..

spring-boot jpa web-api

답변 1

0

구파고

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

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");
    }

}

 

 

0

qkrtngus116

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

0

구파고

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

OAUTH2 질문

0

95

2

카카오토큰관련

0

79

2

auditing

0

76

1

전역에러처리질문

0

114

2

토큰 발급 관련 문의 드립니다.

0

130

2

이 흐름이 맞을까요??

0

126

2

OpenFeign을 어떤 상황에서 어떻게 사용하는지 감이 안옵니다...

0

219

2

도메인형 패키지 구조 질문

0

242

1

application.yml token 선언 시 오류

0

322

1

토큰발행시 500 INTERNAL_SERVER_ERROR

0

157

1

oauth 회원가입 시 필수 추가 정보는 어떤 식으로 받으시나요?

0

287

2

io.jsonwebtoken.security.WeakKeyException 해결방법

0

387

1

리프레시 토큰 사용 관련 문의 건

0

336

1

Xss 에서 WebConfig 오류 발생됩니다.

0

671

1

applycation.yml 의 readTimeout 이 적용이 안됩니다.

0

696

2

강사님 Swagger에 질문드립니다.

0

294

2

kakao token 발급 시 에러

0

729

2

아직 초반부분인데 질문이있습니다.

0

204

1

socialLoginApiService map 주입

0

291

1

전역 에러 처리 메시지 관리

0

608

2

안드로이드 스튜디오와 협업

0

645

2

String accessToken = authorizationHeader.split(" ")[1];은 accessToken이 맞나요?

0

312

1

SocialLoginApiServiceFactory 생성자 관련 질문입니다.

0

256

1

OAuthAttributes 클래스의 toMemberEntity의 파라미터로 memberType이 들어가야하는 이유가 궁금합니다.

0

444

2