๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป๐Ÿ“

[250429] Spring Boot + Swagger๋กœ API ๋ฌธ์„œ ์ž๋™ํ™”

_silver 2025. 4. 29. 21:34
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์˜ค๋Š˜ ๋ชฉํ‘œ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

Spring Boot ํ”„๋กœ์ ํŠธ์— Swagger(OpenAPI 3) ์„ค์ • ์ถ”๊ฐ€ํ•˜์—ฌ API ๋ฌธ์„œ๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค.

Swagger๋ฅผ ์„ค์ •ํ•˜๋ฉด ์„œ๋ฒ„ ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ API ๋ฌธ์„œ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ ,

ํ”„๋ก ํŠธ์—”๋“œ์™€ ํ˜‘์—… ์‹œ API ์ŠคํŽ™ ๊ณต์œ  ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ํŽธ๋ฆฌํ•ด์ง„๋‹ค.


1. build.gradle ์˜์กด์„ฑ ์ถ”๊ฐ€
   dependencies {
      // Swagger
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'
}

 

2. application.properties ์„ค์ •
# Swagger ์ ‘์† URL ์„ค์ • (๊ธฐ๋ณธ๊ฐ’์ด์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ)
springdoc.swagger-ui.path=/swagger-ui.html

 

3. ํŒจํ‚ค์ง€ ๊ตฌ์กฐ
src
โ””โ”€โ”€ main
    โ””โ”€โ”€ java
        โ””โ”€โ”€ global
            โ””โ”€โ”€ config
                โ””โ”€โ”€ SwaggerConfig.java

โ˜‘๏ธ global.config๋Š” ๊ณตํ†ต ์„ค์ •(Spring Security, CORS, Swagger ๋“ฑ)์„ ๋ชจ์•„๋‘๋Š” ํŒจํ‚ค์ง€๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค.

 

 

4. SwaggerConfig ํด๋ž˜์Šค ์ƒ์„ฑ
package global.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI openAPI() {

		// ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด
        Contact contact = new Contact()
                .name("Baek Eunyeong")
                .email("beunyeong.b@gmail.com");

		// License ์ •๋ณด
        License license = new License()
                .name("Cookbot License")
                .url("https://github ์ฃผ์†Œ ์ถ”๊ฐ€ ์˜ˆ์ •")
                .url("๋ฐฐํฌ ์ฃผ์†Œ ์ถ”๊ฐ€ ์˜ˆ์ •");

		// API ๋ฌธ์„œ ์ •๋ณด(ํ”„๋กœ์ ํŠธ ์ œ๋ชฉ, ํ”„๋กœ์ ํŠธ ์„ค๋ช…, Contact ๋ฐ License ์ •๋ณด ์—ฐ๊ฒฐ)
        Info info = new Info()
                .version("v1.0")
                .title("Cookbot API")
                .description("์ถ”ํ›„ ํ”„๋กœ์ ํŠธ ์„ค๋ช… ์ถ”๊ฐ€ ์˜ˆ์ •")
                .contact(contact)
                .license(license);

        final String securityScheme = "bearerAuth";

        return new OpenAPI()
                .info(info)
                // ์ „์ฒด API์— ์ธ์ฆ ๋ฐฉ์‹ ์ ์šฉ (SecurityRequirement ๋“ฑ๋ก)
                .addSecurityItem(new SecurityRequirement().addList(securityScheme))
                .components(new Components()
                
                		// JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์„ค์ • ์ถ”๊ฐ€
                        .addSecuritySchemes(securityScheme, new SecurityScheme()
                                .name(securityScheme)
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("bearer")
                                .bearerFormat("JWT")));

    }
}

 

5. Swagger URL ์ ‘์†
http://localhost:8080/swagger-ui/index.html

 

 

6. Swagger ๋„์ž… ์ „ ํ›„ ๋น„๊ต
Before After
Notion์œผ๋กœ API ํ•˜๋‚˜ํ•˜๋‚˜ ์ง์ ‘ ์ž…๋ ฅ Swagger UI๋กœ ๋ฌธ์„œ ์ž๋™ํ™”
API ์ˆ˜์ •์‹œ ๋ฌธ์„œ๋ฅผ ๊ฐ๊ฐ ์ˆ˜์ • ์ฝ”๋“œ ์ˆ˜์ •์‹œ ์ž๋™์œผ๋กœ ๋ฐ˜์˜
ํ…Œ์ŠคํŠธ์‹œ Posman ๋”ฐ๋กœ ์‚ฌ์šฉ Swagger์—์„œ ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
์ƒํƒœ์ฝ”๋“œ, ์„ค๋ช…, ์ธ์ฆ ์ง์ ‘ ํƒ€์ดํ•‘ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ๋…ธ์ถœ

 

7. ์ฐธ๊ณ  ์ž๋ฃŒ