Spring Boot에서 Swagger(OpenAPI) 어노테이션 정리하기

안녕하세요! 이번 글에서는 Spring Boot 애플리케이션에서 API 문서를 자동으로 생성해주는 **Swagger (OpenAPI)**의 핵심 어노테이션들을 정리해 보겠습니다. 이 어노테이션들을 잘 활용하면 API 명세서를 효율적으로 작성하고 관리할 수 있습니다. 📝


 

1. API 명세서의 기본 정보 설정

 

전역적인 API 문서 정보를 설정할 때 사용하는 어노테이션입니다.

  • @OpenAPIDefinition: Swagger 문서의 기본 정보를 설정합니다. info, servers, security 등을 정의할 수 있습니다.
  • @Info: API 문서의 제목, 설명, 버전, 연락처 등을 정의합니다. title, description, version 등의 속성이 있습니다.

예시:

Java

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

@OpenAPIDefinition(
    info = @Info(
        title = "사용자 관리 API",
        description = "사용자 정보 조회, 등록, 수정, 삭제 기능 제공",
        version = "v1.0"
    )
)
@Configuration
public class OpenApiConfig {
    //
}

 

2. 컨트롤러 및 API 그룹화

 

컨트롤러 클래스나 특정 API 그룹을 문서화할 때 사용합니다.

  • @Tag: API들을 논리적으로 그룹화하고 이름을 부여합니다. 컨트롤러 클래스에 사용하면 해당 컨트롤러의 모든 API를 하나의 그룹으로 묶을 수 있습니다. name 속성으로 그룹 이름을 지정합니다.

예시:

Java

import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

 

3. API 오퍼레이션(메서드) 상세 정보

 

각 API 메서드의 세부적인 정보를 문서화합니다.

  • @Operation: API 오퍼레이션에 대한 상세 정보를 제공합니다. summary (간단한 설명)와 description (자세한 설명) 속성이 있습니다.
  • @Parameter: API의 파라미터 정보를 정의합니다.
    • name: 파라미터 이름
    • description: 파라미터 설명
    • in: 파라미터 위치 (path, query, header, cookie 등)
    • required: 필수 여부 (true 또는 false)

예시:

Java

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Operation(summary = "단일 사용자 조회", description = "ID를 통해 특정 사용자의 정보를 조회합니다.")
    @GetMapping("/{id}")
    public User getUserById(
        @Parameter(name = "id", description = "사용자 ID", in = ParameterIn.PATH, required = true)
        @PathVariable Long id) {
        // ...
        return new User();
    }
}

 

4. 응답(Response) 상세 정보

Spring Boot에서 Swagger(OpenAPI) 어노테이션 정리하기

API가 반환하는 응답에 대한 정보를 문서화합니다.

  • @ApiResponses: API가 반환할 수 있는 여러 응답들을 그룹화합니다.
  • @ApiResponse: 특정 HTTP 응답 코드에 대한 정보를 정의합니다.
    • responseCode: HTTP 응답 코드 (예: “200”, “404”)
    • description: 응답에 대한 설명
    • content: 응답 본문의 미디어 타입과 스키마를 정의합니다.
  • @Content: mediaTypeschema를 정의합니다.
  • @Schema: JSON 응답 객체의 구조를 정의합니다.

예시:

Java

import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.http.MediaType;

@Operation(summary = "새 사용자 등록", description = "새로운 사용자를 등록합니다.")
@ApiResponses(value = {
    @ApiResponse(responseCode = "201", description = "사용자 등록 성공", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = User.class))),
    @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE))
})
@PostMapping
public User createUser(@RequestBody User user) {
    // ...
    return user;
}

 

5. 스키마(DTO, Entity) 정보

 

API의 요청 및 응답에 사용되는 모델(DTO, Entity)에 대한 정보를 정의합니다.

  • @Schema: 클래스나 필드에 사용하여 객체나 속성의 상세 정보를 정의합니다.
    • description: 객체 또는 필드에 대한 설명
    • example: 예시 데이터
    • hidden: 문서에서 숨길지 여부
    • required: 필수 필드 여부
    • accessMode: 접근 모드 (READ_ONLY, WRITE_ONLY 등)

예시:

Java

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

@Schema(description = "사용자 정보 DTO")
public class User {
    
    @Schema(description = "사용자 ID", example = "1")
    private Long id;

    @Schema(description = "사용자 이름", example = "홍길동", required = true)
    private String name;

    @Schema(description = "사용자 이메일", example = "test@example.com")
    private String email;

    // Getter, Setter
}

 

마치며

 

Spring Boot에서 Swagger를 사용하면 이처럼 다양한 어노테이션을 통해 API 문서를 코드와 함께 관리할 수 있습니다. 각 어노테이션의 역할을 명확히 이해하고 활용하면, 동료 개발자와의 협업은 물론, API 사용성을 크게 향상시킬 수 있습니다. Swagger를 통해 여러분의 API를 더욱 효과적으로 문서화해 보세요! ✨