Swagger는 REST API의 설계, 문서화, 테스트, 개발을 위한 오픈소스 도구 세트입니다. Swagger는 API를 표준화하고, 개발자와 클라이언트 간의 의사소통을 원활하게 하는 데 도움을 줍니다. 현재는 OpenAPI Specification (OAS)의 일부로 발전했습니다.
API 문서화 자동화
API 테스트 및 시뮬레이션
언어 및 프레임워크 독립적
REST API 표준화
Swagger Editor
Swagger UI
Swagger Codegen
SwaggerHub
Swagger는 OpenAPI Specification을 기반으로 동작합니다.
OpenAPI Specification은 REST API를 기술하기 위한 표준 형식(JSON 또는 YAML)을 제공합니다.
예제 OAS 문서 (YAML):
openapi: 3.0.0
info:
title: Example API
description: Example API 문서입니다.
version: "1.0.0"
servers:
- url: http://api.example.com/v1
paths:
/users:
get:
summary: 모든 사용자 조회
responses:
"200":
description: 성공
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: integer
name:
type: string
Spring Boot에서 Swagger를 설정하려면 Springfox 또는 Springdoc 라이브러리를 사용할 수 있습니다.
Maven 의존성 추가
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.7.0</version>
</dependency>
API 문서 자동 생성
Spring Boot 애플리케이션을 실행하면 기본적으로 /swagger-ui.html
에서 Swagger UI를 확인할 수 있습니다.
예제
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@OpenAPIDefinition(info = @Info(title = "API 서버", version = "v1"))
public class SwaggerConfig {
@Bean
public GroupedOpenApi openAPI() {
return GroupedOpenApi.builder()
.group("order")
.pathsToMatch("/order/**")
.build();
}
}
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/order")
public class OrderController {
@PostMapping
@Operation(summary = "Create an Order", description = "새로운 주문을 생성합니다.")
@ApiResponse(responseCode = "200", description = "성공적으로 주문이 생성되었습니다.")
@ApiResponse(responseCode = "400", description = "잘못된 요청입니다.")
public ResponseMessage<OrderResponseDto> createOrder(
@RequestBody @Valid OrderDto orderDto) {
// 구현 코드
}
}
/order
에 대한 메소드가 Swagger UI에 표시되고, 요청과 응답을 테스트할 수 있습니다.API 문서의 자동화
개발자가 별도로 문서를 작성할 필요 없이, 코드에서 API 정의를 읽어 자동으로 문서를 생성합니다.
개발자 및 클라이언트 간 의사소통 향상
Swagger UI를 통해 클라이언트와의 API 설계 논의를 쉽게 진행할 수 있습니다.
빠른 테스트 및 디버깅
API의 요청과 응답을 UI에서 바로 확인하고, 테스트할 수 있습니다.
코드 생성 지원
클라이언트 SDK 및 서버 스텁 코드를 자동 생성하여 개발 속도를 높입니다.
복잡한 설정
대규모 프로젝트에서는 Swagger 설정이 복잡해질 수 있습니다.
리소스 소비
Swagger UI를 실행하면 애플리케이션의 메모리와 CPU를 추가적으로 소모할 수 있습니다.
보안 이슈
개발 중이거나 민감한 API는 Swagger UI를 통해 공개되지 않도록 보호가 필요합니다.
Swagger는 REST API를 효율적으로 설계, 문서화, 테스트하기 위한 필수 도구입니다.
추가 학습 자료