Spring Boot
Spring Boot 스웨거(Swagger UI) 적용
최-코드
2025. 2. 16. 20:32
Swagger UI
- 프론트엔드와 백엔드간의 협업에 사용되는 툴이다.
- API를 시각화하는 코드가 자동으로 생성되게 해준다.
- RestDocs와 달리 스웨거 웹페이지에서 API를 실행해볼 수 있다.
- API 명세서를 직접 작성할 필요가 없어져 API 명세서 유지보수가 쉬워진다.
스웨거 웹페이지 주소
- 2.x.x 버전 : localhost:8080/swagger-ui.html
- 3.x.x 버전 : localhost:8080/swagger-ui/index.html
의존성 : implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
config 설정
@Configuration
public class SwaggerConfig {
// 모든 열거형이 별도의 스키마로 추출되어 components 섹션에 정의된다.
static {
io.swagger.v3.core.jackson.ModelResolver.enumsAsRef = true;
}
// api 버전별로 api를 나눌 수 있게 해주는 설정
@Bean
public GroupedOpenApi v1OpenAPI() {
return GroupedOpenApi.builder()
.group("v1") // 그룹의 이름을 설정
.pathsToMatch("/api/v1/**") // 이 그룹에 들어갈 api를 설정
.addOpenApiCustomizer(openApi -> openApi.info(v1Info())) // OpenApi 설정 추가
.build();
}
private Info v1Info() {
return new Info()
.title("Study With Me API") // 제목 설정
.version("1.0") // 버전 설정
.description("API version 1 documentation"); // 설명 설정
}
/* 그룹별로 안 나눌 시에 OpenApi 설정
@Bean
public OpenAPI openAPI() {
return new OpenAPI().info(apiInfo());
}
*/
}
yml 설정
springdoc:
swagger-ui:
operations-sorter: method // HTTP 메소드에 따라 정렬
OpenApi가 아닌 GroupedOpenApi를 설정하면 사진 상단에 'Select a definition' 부분이 생긴다. 여기서 그룹을 선택할 수 있다.
@Tag
- 컨트롤러에 존재한 API를 그룹화할 태그명을 지정할 수 있다.
- 만약 태그명을 지정하지 않는다면, AuthController의 경우 auth-controller로 변환하여 API를 그룹화 한다.
- 만약 서로 다른 컨트롤러에 대해 같은 name을 적용하면 하나로 합쳐진다.
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
@Tag(name = "Study", description = "<b>[스터디]</b> API")
public class StudyCommandController {
@Operation : 각 API에 대한 설명을 추가할 수 있다.
@Operation(
summary = "스터디 생성",
description = "로그인한 유저가 스터디를 생성합니다."
)
public ApiResponse<Void> studyAdd(Principal principal, @Valid @RequestBody CreateStudyRequest request) {
@ApiResponse
- 서버에서 사용하는 응답 code과 message 값을 보여줄 수 있다.
- 커스텀 응답 코드를 사용하는 경우라면, 필수적으로 설정해주는 것이 좋다.
- 만약 @ApiResponse에 대해 설정할 것이 많다면 @ApiResponses를 먼저 추가한 다음 @ApiResponse를 넣어주면 된다.
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "201", description = "성공")
public ApiResponse<Void> studyAdd(Principal principal, @Valid @RequestBody CreateStudyRequest request) {
@Schema
- 스웨거 웹 페이지의 맨 밑에 존재하는 스키마에 대한 정보를 서술할 수 있게 해준다.
- 주로 사용하는 속성값으로는 description, defaultValue, allowableValues가 있다.
@Schema(defaultValue = "NEWEST", allowableValues = {"NEWEST, LIKE, COMMENT"})
private SortCriteria sortCriteria = SortCriteria.NEWEST;