본문 바로가기

세미나

Spring Boot 프로젝트에 Swagger 적용하기 (+인증)

728x90

안녕하세요. 유저인사이트 박태양입니다.
이번 시간에는 Spring Boot 프로젝트에 Swagger를 적용하는 방법을 알아보겠습니다.

Swagger는 API 개발 및 문서화를 도와주는 오픈소스 프레임워크입니다.
여러분이 생성한 API를 자동으로 문서화 해주고, 웹 페이지를 통해 편리하게 호출할 수 있습니다.

 



실습 버전 정보는 아래와 같습니다.
Spring Boot : 2.7.9
Java : 11 (JDK 11.0.2)
Swagger : 3.0.0

Swagger 사용을 위해 pom.xml에 아래 디펜던시를 추가해줍니다.

SpringFox는 Spring 기반으로 개발된 API를 자동으로 문서화 해주는 역할을 합니다.

 

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>


Swagger 관련 설정을 담당할 Config 파일을 생성합니다.

 

@Configuration
public class SwaggerConfig {

  public static final String AUTHORIZATION_HEADER = "Authorization";

  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2).securityContexts(
            Arrays.asList(securityContext())).securitySchemes(Arrays.asList(apiKey())).select()
        .apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();
  }

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

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

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

 

securityContexts : API 작업에 사용할 기본 인증 방식 목록

securitySchemes : 스웨거에서 사용할 API 인증 방식 목록

apis : API 컨트롤러 패키지 경로

paths : 패키지 내 API 경로

 

간단한 테스트를 위해 컨트롤러를 추가합니다.

 

@RestController(value = "/user")
public class UserController {

  @GetMapping
  public List<String> list() {
    return Arrays.asList("Junho Park, Jinyong Park");
  }
}

 

Spring Boot 2.6 부터 pathmatch 기본값이 변경되었습니다. (AntPathMatcher -> PathPatternParser)

PathPattern에서는 ** 형식이 마지막에서만 사용 가능합니다.

예) /pages/{**} (가능) /pages/{**}/details (불가능)

그래서 application.yml에서 아래와 같은 설정 값 추가가 필요합니다.

 

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

 

앱 실행 후 http://localhost:8080/swagger-ui/ 로 접속하면 아래와 같은 화면을 볼 수 있습니다.

 

 

기존에 CRUD 관련 API를 생성해 두었다면, 아래와 같이 메서드별로 정리되어 나타납니다.

 

 

인증토큰을 헤더에 추가하면 아래와 같이 요청됩니다.

 

 

만약, 운영서버에서 스웨거 UI를 숨기고 싶다면, application.yml 파일에서 아래와 같이 설정해주면 됩니다.

 

springfox:
  documentation:
    enabled: false

 


이상으로 Spring Boot 프로젝트에 Swagger 세팅하는 방법을 알아보았습니다.

감사합니다.


참고자료 : https://github.com/eugenp/tutorials/tree/master/spring-security-modules/spring-security-web-rest

728x90