일단 swagger를 이해하기 위해서 나동빈님의 유튜브 재생목록 swagger를 정주행.. 총 6편
https://www.youtube.com/watch?v=akbdsrOpQ60&list=PLRx0vPvlEmdAezo0wkmUdT6WBCch0_1ie
Swagger는 REST API를 문서화하고 시각적으로 제공해주는 오픈소스 프레임워크.
🔍 API 자동 문서화 | 코드에 주석이나 어노테이션만 달면 자동으로 API 문서 생성 |
🧪 테스트 UI 제공 | Swagger UI를 통해 브라우저에서 직접 API 호출 테스트 |
🔐 인증/헤더 지원 | 토큰 입력, 헤더 설정 등을 문서에서 바로 입력 가능 |
🔁 클라이언트 코드 생성 | OpenAPI 명세 기반으로 다양한 언어용 API 코드 자동 생성 |
📄 YAML/JSON 기반 | API 문서가 YAML/JSON 명세로 구성됨 |
Controller (@RestController + Swagger 어노테이션)
↓
Spring Boot (Swagger 설정 포함)
↓
Swagger Config → Swagger UI (http://localhost:8080/swagger-ui/index.html)
build.gradle
dependencies {
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
}
@OpenAPIDefinition | 전체 API에 대한 정보 설정 (제목, 버전 등) |
@Operation | 메서드에 대한 설명, 응답 코드 등 |
@Parameter, @RequestBody | 파라미터, 바디에 대한 설명 |
@Tag | API 그룹 묶기 |
@RestController
@RequestMapping("/users")
@Tag(name = "User API", description = "사용자 관련 API입니다.")
public class UserController {
@Operation(summary = "회원 조회", description = "ID로 회원 정보를 조회합니다.")
@GetMapping("/{id}")
public UserDto getUser(@PathVariable Long id) {
...
}
@Operation(summary = "회원 등록")
@PostMapping
public String createUser(@RequestBody UserDto dto) {
...
}
}
openapi: 3.0.0
info:
title: Sample API
version: 1.0.0
paths:
/users/{id}:
get:
summary: Get user by ID
parameters:
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
.anyRequest().authenticated();
}
openapi | OpenAPI 스펙 버전 (예: 3.0.0) |
info | API 문서의 메타정보를 포함하는 섹션 |
info.version | API 버전 |
info.title | API의 이름 |
info.description | API 설명 |
servers | API가 동작할 서버의 URL 목록 |
servers.url | 요청을 보낼 실제 서버 주소 |
servers.description | 해당 서버에 대한 설명 |
paths | 실제 API 경로들을 정의하는 섹션 |
/{path} | API의 URI (경로) 정의 |
get, post 등 | HTTP 메서드에 대한 정의 |
summary | API 요청에 대한 간단한 설명 |
parameters | 요청에 사용되는 파라미터 정의 (쿼리, 경로 등) |
parameters.name | 파라미터 이름 |
parameters.in | 파라미터 위치 (query, path, header, cookie) |
parameters.required | 필수 여부 |
parameters.description | 파라미터에 대한 설명 |
parameters.schema.type | 데이터 타입 (예: string, integer) |
responses | HTTP 응답 정의 (상태코드별 설명) |
responses.'200' | HTTP 200 성공 응답 |
description | 응답에 대한 설명 |
content | 응답의 타입과 구조 정의 |
application/json, text/plain 등 | 응답 형식 (콘텐츠 타입) |
schema | 응답 객체의 구조 (필드, 타입 등) |
properties | 객체 안의 속성 정의 |
HTTP GET vs POST (0) | 2025.05.09 |
---|---|
CodeTree 커리큘럼 수강 2일차: Java 기초 문법 1 (2) | 2025.05.07 |
CodeTree 커리큘럼 수강 1일차: Java 기초 입출력 (0) | 2025.05.02 |