개발/JAVA
Swagger 3
잡부여우
2025. 8. 4. 13:20
Swagger 3 (OpenAPI) 설정. 또 바뀌었네.
Swagger 2에서 OpenAPI 3으로 넘어오면서 어노테이션과 설정이 꽤 바뀌었다.
매번 새로 찾아보기 귀찮으니 정리해둔다.
핵심 어노테이션 변경점
Swagger 2 어노테이션은 이제 잊자. OpenAPI 3는 이걸 쓴다.
@Api
→@Tag
: API 그룹 정의.@ApiOperation
→@Operation
: API 설명.@ApiParam
→@Parameter
: 파라미터 설명.@ApiModel
,@ApiModelProperty
→@Schema
: DTO 모델과 속성 설명.
DTO Request/Response 필드 분리
@Schema
어노테이션으로 제어한다. accessMode
를 사용하면 된다.
import io.swagger.v3.oas.annotations.media.Schema;
// ...
@Schema(description = "사용자 정보 DTO")
public class UserDto {
@Schema(description = "사용자 ID", accessMode = Schema.AccessMode.READ_ONLY) // 읽기 전용 (응답에만)
private Long id;
@Schema(description = "사용자 비밀번호", accessMode = Schema.AccessMode.WRITE_ONLY) // 쓰기 전용 (요청에만)
private String password;
}
프로필별 활성화 및 서버 URL 변경
이건 이전과 비슷하다. Spring의 @Profile
을 사용해서 설정 클래스를 특정 프로필에서만 활성화한다.
@Configuration
@Profile({"local", "stg"}) // local, stg에서만 활성화
public class OpenApiConfig {
// ...
}
서버 URL 동적 설정은 OpenAPI
Bean을 직접 커스터마이징해서 구현한다.
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenApiConfig {
@Value("${openapi.server.url}")
private String serverUrl;
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.addServersItem(new Server().url(serverUrl));
}
}
다중 Swagger 구성 (그룹화)
GroupedOpenApi
Bean을 여러 개 만들면 된다. 간단해졌다.
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenApiConfig {
@Bean
public GroupedOpenApi internalApi() {
return GroupedOpenApi.builder()
.group("internal-api")
.pathsToMatch("/internal/**")
.build();
}
@Bean
public GroupedOpenApi externalApi() {
return GroupedOpenApi.builder()
.group("open-api")
.pathsToMatch("/api/v1/**")
.build();
}
}
인증 처리 (JWT Bearer)
인증 설정은 @SecurityScheme
어노테이션으로 정의하는 게 편하다. 설정 클래스에 추가한다.
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import org.springframework.context.annotation.Configuration;
@Configuration
@SecurityScheme(
name = "Bearer Authentication",
type = SecuritySchemeType.HTTP,
bearerFormat = "JWT",
scheme = "bearer"
)
public class OpenApiConfig {
// ...
}
그리고 각 API에 @SecurityRequirement
를 추가해서 적용한다.
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@RestController
@SecurityRequirement(name = "Bearer Authentication")
public class MyController {
// ...
}
이제 UI에서 자물쇠 아이콘을 눌러 토큰을 입력하면 된다.
설정 끝.
퇴근.