Preloader image
DDD

유틸리티

swagger 설치

작성자 관리자 (admin)
조회수 2,324
입력일 2024-12-13 06:19:38

Swagger는 API를 설계, 문서화, 테스트 및 개발할 수 있는 강력한 도구입니다. 현재는 OpenAPI 사양(OpenAPI Specification, OAS)과 동일한 의미로 사용됩니다. Swagger 도구는 RESTful API를 쉽고 효율적으로 작업할 수 있게 해줍니다.

Swagger를 사용하려면 다음 단계를 참고하세요:

1. Swagger 기본 구성 요소 이해

Swagger는 주로 다음 도구로 구성됩니다:

  1. Swagger Editor: API 사양을 작성하는 도구.
  2. Swagger UI: API 문서를 시각적으로 제공하고 테스트할 수 있는 UI.
  3. Swagger Codegen: API 클라이언트 SDK 또는 서버 코드 생성을 지원.
  4. Swagger Hub (선택): API 협업 및 호스팅 플랫폼.

2. 설치 및 설정

1) Swagger UI

Swagger UI는 API 문서를 렌더링하고 테스트할 수 있습니다.

설치

  1. 로컬에서 실행:
    • Swagger UI를 GitHub에서 다운로드:

      bash

      git clone https://github.com/swagger-api/swagger-ui.git
      cd swagger-ui
      npm install
      npm run dev

      브라우저에서 http://localhost:3200를 열어 Swagger UI를 확인할 수 있습니다.
  2. CDN 사용: Swagger UI를 간단히 CDN 링크를 통해 로드할 수도 있습니다:

    html

    <!DOCTYPE html>
    <html>
    <head>
      <title>Swagger UI</title>
      <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist/swagger-ui.css">
    </head>
    <body>
      <div id="swagger-ui"></div>
      <script src="https://unpkg.com/swagger-ui-dist/swagger-ui-bundle.js"></script>
      <script>
        const ui = SwaggerUIBundle({
          url: "https://petstore.swagger.io/v2/swagger.json",
          dom_id: '#swagger-ui',
        });
      </script>
    </body>
    </html>

2) Swagger Editor

Swagger Editor를 사용하여 OpenAPI 파일을 작성할 수 있습니다.

온라인 사용

  • Swagger Editor를 사용하여 API 명세를 작성하세요.

로컬 설치

Swagger Editor를 로컬에서 실행하려면:

bash

git clone https://github.com/swagger-api/swagger-editor.git
cd swagger-editor
npm install
npm start

브라우저에서 http://localhost:8080를 열어 사용합니다.

3. OpenAPI 사양 작성

Swagger는 OpenAPI 형식(JSON 또는 YAML)으로 API를 정의합니다. 기본 예는 다음과 같습니다:

yaml

openapi: 3.0.0
info:
  title: Sample API
  version: 1.0.0
paths:
  /users:
    get:
      summary: Get all users
      responses:
        '200':
          description: A list of users
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string

이 파일을 swagger.yaml로 저장하고 Swagger Editor나 Swagger UI에서 열 수 있습니다.

4. API 테스트

Swagger UI는 API를 테스트하는 인터페이스를 제공합니다.

  • Try it out 버튼을 클릭해 요청을 전송하고 결과를 확인하세요.

5. Swagger Codegen

Swagger Codegen을 사용하면 OpenAPI 문서에서 클라이언트 SDK 또는 서버 코드를 생성할 수 있습니다.

설치

Swagger Codegen CLI 설치:

bash

npm install -g @openapitools/openapi-generator-cli

사용

OpenAPI 파일에서 Java 서버 코드를 생성하려면:

bash

openapi-generator-cli generate -i swagger.yaml -g spring -o ./output

6. Swagger Hub

Swagger Hub는 팀 협업 및 API 관리 도구입니다.

  • 무료 및 유료 버전 제공.
  • Swagger 문서를 저장하고 팀과 공유하는 데 유용합니다.

Swagger Hub에서 시작할 수 있습니다.

7. 통합

Swagger는 다양한 백엔드 프레임워크와 통합할 수 있습니다.

  • Node.js/Express: swagger-jsdoc, swagger-ui-express 라이브러리를 사용.
  • Spring Boot: springdoc-openapi 또는 swagger-springmvc 사용.
  • Django: drf-yasg 또는 django-rest-swagger 사용.

Swagger를 특정 환경에 적용하거나 심화 학습이 필요하면 더 자세히 도와드릴 수 있습니다!

 

-----------------------------------------------------------------------

 

java swagger 어노테이션

Java에서 Swagger를 사용하여 RESTful API를 문서화하려면 Swagger 어노테이션을 활용할 수 있습니다. 보통 Swagger/OpenAPI 구현 라이브러리로 Springdoc OpenAPI 또는 Swagger 2를 사용합니다. 주요 어노테이션과 사용법은 다음과 같습니다:

1. 주요 의존성 추가

Maven 의존성

Springdoc OpenAPI (Spring Boot 3.x 및 OpenAPI 3 지원)

xml

코드 복사

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.1.0</version>
</dependency>

Swagger 2 (Spring Boot 2.x 지원)

xml

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

2. Swagger 어노테이션 주요 사용법

1) 기본 API 문서화

API 전체에 대한 메타데이터를 추가하려면 다음 어노테이션을 사용합니다:

  • @OpenAPIDefinition: OpenAPI 3 명세를 정의.
  • @Api (Swagger 2): 클래스 수준에서 API를 문서화.

java

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;

@OpenAPIDefinition(
    info = @Info(
        title = "Sample API",
        version = "1.0",
        description = "Sample API for demonstrating Swagger annotations"
    )
)
@RestController
@RequestMapping("/api")
public class SampleController {
}

 

2) 엔드포인트 문서화

API 메서드에 대한 설명을 추가하려면 다음 어노테이션을 사용합니다:

OpenAPI 3 (Springdoc)

  • @Operation: 특정 엔드포인트의 설명 추가.
  • @Parameter: 메서드 매개변수 설명.
  • @ApiResponse: HTTP 응답에 대한 설명 추가.
  • @RequestBody: 요청 본문 설명.

Swagger 2

  • @ApiOperation: 메서드 설명.
  • @ApiParam: 매개변수 설명.
  • @ApiResponses & @ApiResponse: 응답 설명.

java

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Operation(summary = "Get all users", description = "Retrieves a list of all users.")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "Successful operation"),
        @ApiResponse(responseCode = "500", description = "Internal server error")
    })
    @GetMapping
    public List<String> getAllUsers() {
        return List.of("User1", "User2");
    }

    @Operation(summary = "Create a user", description = "Adds a new user to the system.")
    @PostMapping
    public String createUser(
        @Parameter(description = "Name of the user to be created") @RequestParam String name) {
        return "User " + name + " created.";
    }
}

 

3) 모델 문서화

데이터 모델 클래스에 어노테이션을 추가하여 입력 및 출력 객체를 문서화할 수 있습니다.

OpenAPI 3 (Springdoc)

  • @Schema: 모델 필드에 대한 설명.
  • @ExampleObject: 예제 데이터 제공.

Swagger 2

  • @ApiModel: 클래스 수준에서 모델 설명.
  • @ApiModelProperty: 필드 설명.

java

import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "User entity")
public class User {

    @Schema(description = "Unique identifier of the user", example = "1")
    private Long id;

    @Schema(description = "Name of the user", example = "John Doe")
    private String name;

    @Schema(description = "Email of the user", example = "john.doe@example.com")
    private String email;

    // Getters and Setters
}

 

4) 요청/응답 명세

API 요청과 응답 데이터를 명시적으로 문서화하려면 OpenAPI 어노테이션을 사용합니다.

java

import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Operation(summary = "Get a product by ID")
    @ApiResponse(
        responseCode = "200",
        description = "Product retrieved successfully",
        content = @Content(mediaType = "application/json", schema = @Schema(implementation = Product.class))
    )
    @GetMapping("/{id}")
    public Product getProductById(@PathVariable Long id) {
        return new Product(id, "Sample Product");
    }
}

class Product {
    private Long id;
    private String name;

    // Constructor, Getters, and Setters
    public Product(Long id, String name) {
        this.id = id;
        this.name = name;
    }
}

 

3. Swagger UI 확인

Swagger UI 경로

  • Springdoc OpenAPI: 기본적으로 Swagger UI는 /swagger-ui.html 또는 /v3/api-docs에서 확인할 수 있습니다.
  • Swagger 2: 기본 경로는 /swagger-ui.html입니다.

4. 팁

  • Springdoc OpenAPI와 Swagger 2 비교:
    • Springdoc OpenAPI는 최신 OpenAPI 3 사양을 지원하며, Spring Boot 3과 호환성이 뛰어납니다.
    • Swagger 2는 OpenAPI 2 사양 기반으로, 기존 Spring Boot 2.x 프로젝트에 적합합니다.
  • Swagger UI의 동작을 커스터마이즈하려면 application.properties에서 설정을 변경할 수 있습니다.

properties

springdoc.api-docs.path=/api-docs
springdoc.swagger-ui.path=/swagger-ui