먼저 스프링 프로젝트를 생성합니다. https://start.spring.io 에서 아래와 같이 Spring Web, Lombok 의존성을 추가하여 생성합니다.
저번 예제와 동일하게 이번 예제에서도 API만 구현하므로 데이터베이스 관련 의존성은 추가하지 않았습니다.
build.gradle 파일에 springdoc-openapi-starter-webmvc-ui 의존성을 추가합니다.
springdoc-openapi 라이브러리는 Swagger는 아닙니다. 공식 문서 https://springdoc.org 를 참고하면, springdoc-openapi 라이브러리는 런타임에 애플리케이션을 분석하여 JSON/YAML 및 HTML 형식의 API를 자동으로 생성합니다(OpenAPI 3). Swagger UI는 OpenAPI으로 화면을 구성하여 보여줍니다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.4'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
먼저 API 공통 응답 포맷을 사용하기 위해 아래와 같이 CommonResponse 제네릭 클래스를 작성합니다.
Result enum 입니다.
게시글 목록 조회, 게시글 조회, 게시글 생성, 게시글 업데이트, 게시글 삭제 API를 아래와 같이 작성합니다.
PostService 클래스에는 비즈니스 로직을 작성합니다. 저는 일단 null만 리턴하도록 구현하였습니다.
API를 추가하고 다시 애플리케이션을 실행시킵니다. 문서를 다시 확인해보면 (http://localhost:8080/swagger-ui/index.html) 아래와 같이 출력됩니다.
각 메서드에서 Try it out
버튼을 통해 직접 API를 호출할 수 있습니다. 따라서 포스트맨과 같은 툴 처럼 API를 테스트 할 수 있습니다.
위의 API 문서에서는 각 API의 이름, 설명 등이 모두 스프링 기본 어노테이션을 기반으로 출력됩니다. Swagger 어노테이션을 추가하여 좀 더 상세 정보를 표시할 수 있습니다.
@Tag, @Operation, @ApiResponse, @Parameter 네 가지 어노테이션을 통해 API와 각 API의 파라미터에 상세 정보를 추가하였습니다.
자세한 내용은 https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations 문서를 참고 바랍니다.
다시 애플리케이션을 실행하면 아래와 같이 출력됩니다. 각 파라미터와 응답에 대한 설명이 추가되었습니다.
전체 코드는 https://github.com/nefertirii/swagger 에서 확인하실 수 있습니다.