본문 바로가기
잡동사니

Swagger

by 개발자 포비 2025. 1. 5.

Swagger 가이드

API 명세의 필요성

프로젝트에서 Frontend와 Backend 개발자 간의 원활한 협업을 위해서는 API 명세가 필수적입니다. API 명세는 엔드포인트, 요청/응답 형식, 데이터 구조 등을 명확하게 정의하여 개발 과정에서의 혼란을 줄이고 생산성을 향상시킵니다. 또한 API 문서화를 통해 새로운 팀원의 온보딩 시간을 단축하고, 프로젝트 유지보수성을 높일 수 있습니다.

Swagger 소개

Swagger(현재는 OpenAPI Specification)는 REST API를 설계, 문서화, 테스트할 수 있는 오픈소스 프레임워크입니다. Java 기반의 Spring Boot 프로젝트에서는 Springfox 또는 SpringDoc 라이브러리를 통해 Swagger를 쉽게 통합할 수 있습니다. Swagger UI를 통해 API를 시각적으로 확인하고 직접 테스트해볼 수 있으며, JSON/YAML 형식으로 API 명세를 관리할 수 있습니다.

주요 Swagger 기능과 애노테이션

  • @Tag: API 그룹화를 위한 애노테이션으로, 컨트롤러 클래스 레벨에서 사용하여 관련 API들을 카테고리화합니다.
  • @Operation: API 엔드포인트에 대한 상세 설명을 제공하며, 메서드 레벨에서 사용됩니다. summary, description 등을 정의할 수 있습니다.
  • @Parameter: API 요청 파라미터에 대한 설명을 추가합니다. 파라미터의 이름, 설명, 필수 여부 등을 정의할 수 있습니다.
  • @Schema: DTO 클래스의 필드에 대한 상세 정보를 정의합니다. 필드의 설명, 예시 값, 제약조건 등을 명시할 수 있습니다.
  • @ApiResponse: API 응답에 대한 설명을 제공합니다. 상태 코드별 응답 형식과 설명을 정의할 수 있습니다.

사용 예시

기본 설정

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI openAPI() {
        Info info = new Info()
            .title("Spring Boot API Documentation")
            .version("v1.0")
            .description("Spring Boot REST API 명세서");

        return new OpenAPI()
            .info(info);
    }
}

Controller 작성

@Tag(name = "User", description = "사용자 API")
@RestController
@RequestMapping("/api/users")
public class UserController {

    @Operation(summary = "사용자 조회", description = "사용자 ID로 정보를 조회합니다.")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "조회 성공"),
        @ApiResponse(responseCode = "404", description = "사용자 없음")
    })
    @GetMapping("/{id}")
    public ResponseEntity<UserResponse> getUser(
        @Parameter(description = "사용자 ID") @PathVariable Long id) {
        // 구현 로직
    }
}

DTO 작성

@Schema(description = "사용자 요청 DTO")
public class UserRequest {
    @Schema(description = "사용자 이름", example = "홍길동")
    @NotBlank
    private String name;

    @Schema(description = "이메일", example = "hong@gmail.com")
    @Email
    private String email;
}

API 명세서 작성 방법

1. 기본 정보 정의

  • API 제목, 설명, 버전 등 기본 정보를 설정
  • 서버 정보(개발/운영) 명시

2. API 그룹화

  • 기능별로 API를 그룹화하여 구조화된 문서 작성
  • 각 그룹에 대한 설명 추가

3. 상세 API 명세

  • HTTP 메서드, 엔드포인트 경로 기술
  • 요청/응답 데이터의 스키마 정의
  • 예상되는 오류 상황과 응답 문서화

4. 예시 추가

  • 요청/응답의 예시를 포함하여 이해를 돕기
  • 실제 사용 사례를 기반으로 예시 작성

장단점

장점

  • 직관적인 UI를 통한 API 테스트 가능
  • 자동화된 문서 생성으로 유지보수 용이
  • 프론트엔드와 백엔드 개발자 간 효율적인 협업 가능
  • API 설계의 표준화 달성

단점

  • 애노테이션 사용으로 인한 코드 복잡도 증가
  • 상세한 설정을 위해서는 추가적인 학습 필요
  • 프로덕션 환경에서 보안 위험 가능성
  • 애노테이션 과다 사용시 코드 가독성 저하

참고 자료

'잡동사니' 카테고리의 다른 글

이미지 구현 아이디어 메모 with NGinX  (0) 2025.01.16
Docker Compose 파일 관련  (0) 2025.01.08
JWT  (1) 2025.01.04
웹 - 스프링에서 카카오 로그인 연동하기  (0) 2024.12.12
웹 서버와 WAS  (3) 2024.12.05

댓글