1 분 소요

Swagger란?

로젝트 내 API를 Swagger 설정을 통해 자동으로 문서화해주는 도구로
사람이 일일이 작업할 필요 없이 프로젝트 실행을 통해
코드 내에서 변경사항(return 유형이나 parameter 수 변경 등)이 발생하여도 바로 자동으로 API문서를 만들어주므로 매우 편리한 도구이다.

또한 UI를 통해 쉽게 API 목록 조회와 API 호출을 통한 테스트(Try it out)를 직접 해볼 수 있다.

Swagger 적용하기

1. build.gradle

dependencies{
  
  // Swagger
  implementation 'io.springfox:springfox-boot-starter:3.0.0'
  implementation 'io.springfox:springfox-swagger-ui:3.0.0'

  // Spring Security + JWT
  implementation 'io.jsonwebtoken:jjwt:0.9.1'
  implementation 'org.springframework.boot:spring-boot-starter-security'
  testImplementation 'org.springframework.security:spring-security-test'
}

만약 이런 에러가 발생한다면?

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

1-1. application.yml

application.yml에 아래 코드를 추가하자!

spring:
    mvc:
      pathmatch:
            matching-strategy: ant_path_matcher

2. SwaggerConfig.java

package naem.server;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .useDefaultResponseMessages(true) // Swagger 에서 제공해주는 기본 응답 코드 (200, 401, 403, 404) 등의 노출 여부
                .apiInfo(apiInfo()) // Swagger UI 로 노출할 정보
                .select()
                .apis(RequestHandlerSelectors.basePackage("naem.server.web")) // api 스펙이 작성되어 있는 패키지 (controller)
                .paths(PathSelectors.any()) // apis 에 위치하는 API 중 특정 path 를 선택
                .build();
    }

    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger Test")
                .description("SwaggerConfig")
                .version("0.1")
                .build();
    }

}

문제 상황

여기까지 하고 서버를 띄운 후 http://localhost:8080/swagger-ui/로 접속해보면,
화면이 보이지 않고 please sign in 페이지가 뜬다..

3. SpringSecurityConfiguration.java

package naem.server;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers(
                        "/v3/api-docs",
                        "/swagger*/**").permitAll()
                .anyRequest().authenticated();
    }
}

적용 확인

서버를 띄운 후 http://localhost:8080/swagger-ui/로 접속해보면 swagger-ui 화면을 볼 수 있다🙂
스크린샷 2022-07-12 오전 1 48 16

Ref.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기