Home Spring 에서 Swagger 사용하기
Post
Cancel

Spring 에서 Swagger 사용하기

Spring 에서 Swagger 사용하기

🎊 시작하기 전에…

이 글은 Spring-doc, Kotlin을 사용한다.

1️⃣ 의존성 설정

build.gradle.kts에 dependencies에 아래 코드를 추가한다.

1
implementation(org.springdoc:springdoc-openapi-ui:${VERSION})

2️⃣ Swagger 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import io.swagger.v3.oas.models.OpenAPI
import io.swagger.v3.oas.models.info.Info
import org.springdoc.core.GroupedOpenApi
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class SwaggerConfig {

    @Bean
    fun springShopOpenApi(): OpenAPI {
        return OpenAPI()
            .info(
                Info().title("XQUARE-Notification API")
                    .description("XQUARE Notification의 Api 명세서입니다.")
                    .version("v0.0.0")
            )
    }

}

Config 파일에서 Swagger 창에서 띄워줄 정보(제목, 설명, 버전 등)을 설정한다.

3️⃣ Controller 설정

Controller 설정은 크게 두 가지로 나뉘어 진다.

  • Tags: Controller 묶음의 대략적인 설명
  • Operation: 개별 Api의 설명

아래 코드와 같이 작성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package io.github.v1servicenotification.domain.detail.presentation

import io.github.v1servicenotification.detail.api.DetailApi
import io.github.v1servicenotification.detail.api.dto.response.DetailResponse
import io.github.v1servicenotification.global.extension.getUserId
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RestController
import java.util.*

@Tag(name = "알림 상세", description = "알림 상세 Api입니다.")
@RestController
class DetailController(
    private val detailApi: DetailApi
) {

    @Operation(summary = "전송된 알림 목록")
    @GetMapping("/")
    fun queryNotificationDetailList(): DetailResponse {
        return detailApi.queryNotificationDetail(getUserId())
    }

    @Operation(summary = "전송된 알림 목록")
    @PostMapping("/{notification-uuid}")
    fun checkNotification(@PathVariable("notification-uuid") notificationId: UUID) {
        detailApi.checkNotification(getUserId(), notificationId)
    }

}

Controller에서 사용되는 Annotation을 아래에 정리했다.

@Tag

  • Api 그룹 설정을 위한 어노테이션.
  • name 속성으로 태그의 이름을 설정할 수 있다.
  • description 속성으로 태그에 대한 설명을 추가할 수 있다.

@Operation

  • Api 상세 정보 설정을 위한 어노테이션.
  • summary 속성으로 api의 간략한 설명을 적을 수 있다.
  • description 속성으로 api에 대한 상세 설명을 적을 수 있다.
  • responses, parameters 속성을 추가로 설정할 수 있다.

@ApiResponses

  • 여러 개의 @ApiResponse를 묶는 어노테이션이다.

@ApiResponse

  • Api의 Response 설정을 위한 어노테이션.
  • responseCode 속성으로 Http status code를 설정할 수 있다.
  • description 속성으로 response에 대한 설명을 추가할 수 맀다.
  • 기본적으로 반환되는 값Swagger가 코드를 분석해서 등록한다.

@Parameter

  • Api의 파라미터 설정을 위한 어노테이션.
  • name 속성으로 파라미터의 이름을 설정할 수 있다.
  • description 속성으로 파라미터에 대한 설명을 추가할 수 있다.
  • in 속성으로 파라미터의 위치(Header, Query, Path, Cookie 등)를 설정할 수 있다.

4️⃣ Spring Security 설정

Spring Security를 같이 사용한다면, permitAll 설정을 해줘야하는 엔드포인트가 존재한다.

  • /swagger-ui/**
  • /v3/api-docs/**

위 두 엔드포인트는 꼭 permitAll을 해줘야한다.

마지막으로..

Spring doc의 default ui path는 BASE_PATH/swagger-ui/index.html 이다.

또, 이 글에 없는 부분은 공식문서를 참조하면 된다.

This post is licensed under CC BY 4.0 by the author.