Hamutaro - Hamtaro 4

ETC.

[Swagger] Swagger ๋ž€? (๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•, ์‚ฌ์šฉ ์ด์œ )

carsumin 2025. 11. 19. 13:32
Swagger๋ž€?
  • Swagger๋Š” REST API ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์›น ํ™”๋ฉด์—์„œ ์ง์ ‘ API๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ
    • ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ
    • ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ, QA ๊ฐ„ API ๋ช…์„ธ ๊ณต์œ  ํ‘œ์ค€
    • ์š”์ฒญ/์‘๋‹ต ๊ตฌ์กฐ๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธ + ์ง์ ‘ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • Swagger = API ๋ช…์„ธ์„œ + ํ…Œ์ŠคํŠธ UI

 

Swagger ์‚ฌ์šฉ ์ด์œ ?
  1. ๋ฌธ์„œ ๋”ฐ๋กœ ์•ˆ ์จ๋„ ๋จ
    • Controller ์ฝ”๋“œ + ์–ด๋…ธํ…Œ์ด์…˜ -> ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ
    • Notion, Excel, Wiki ๋”ฐ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š” ๊ฐ์†Œ
  2. ํ”„๋ก ํŠธ์™€ ํ˜‘์—…์ด ์‰ฌ์›€
    • ํ”„๋ก ํŠธ๊ฐ€ Swagger ๋ณด๊ณ  ๋ฐ”๋กœ API ์—ฐ๋™ ๊ฐ€๋Šฅ
    • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ, ์‘๋‹ต ๊ตฌ์กฐ ์˜คํ•ด ์ค„์–ด๋“ฆ
  3. ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉ
    • Postman ์—†์–ด๋„ ๋จ
    • ์ธ์ฆ ํ† ํฐ ๋„ฃ๊ณ  ์‹ค์ œ API ํ˜ธ์ถœ ๊ฐ€๋Šฅ

 

Swagger์˜ ๊ธฐ๋ฐ˜ : OpenAPI
  • Swagger๋Š” OpenAPI Specification(OAS) ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค
  • OpenAPI = API๋ฅผ ์ •์˜ํ•˜๋Š” ๋ช…์„ธ ๊ทœ๊ฒฉ
  • Swagger UI = ๊ทธ ๋ช…์„ธ๋ฅผ ํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ

 

SpringBoot์—์„œ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
  • ์˜์กด์„ฑ ์ถ”๊ฐ€ (SpringBoot 3.x ๊ธฐ์ค€)
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'
  • ์‹คํ–‰ & ์ ‘์†
http://localhost:8080/swagger-ui.html

 

๋˜๋Š”

http://localhost:8080/swagger-ui/index.html

 

-> ํ˜ธ์ถœํ•˜๋ฉด UI๋กœ API ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

 

 

๊ธฐ๋ณธ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ

 

  • Controller ์„ค๋ช…
@Tag(name = "ํšŒ์› API", description = "ํšŒ์› ๊ด€๋ จ ๊ธฐ๋Šฅ")
@RestController
@RequestMapping("/api/members")

 

  • API ์„ค๋ช…
@Operation(summary = "ํšŒ์› ์กฐํšŒ", description = "memberId๋กœ ํšŒ์› ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.")
@GetMapping("/{id}")
public MemberResponse getMember(@PathVariable Long id) {
    ...
}

 

  • ์š”์ฒญ/์‘๋‹ต ํ•„๋“œ ์„ค๋ช…
@Schema(description = "ํšŒ์› ์ด๋ฉ”์ผ", example = "test@test.com")
private String email;

 

  • ์ธ์ฆ API ํ…Œ์ŠคํŠธ (JWT)
    • Swagger ์ƒ๋‹จ Authorize ๋ฒ„ํŠผ ์‚ฌ์šฉ
    • ์ดํ›„ ๋ชจ๋“  API ํ˜ธ์ถœ์— Authorization ํ—ค๋” ์ž๋™ ํฌํ•จ

 

โ€ป ์šด์˜ ์„œ๋ฒ„์—์„œ๋Š” Swagger ๋น„ํ™œ์„ฑํ™” ๊ถŒ์žฅ

๋‚ด๋ถ€ ์ •๋ณด ๋…ธ์ถœ ๋ฐฉ์ง€, ๋ณดํ†ต dev๋‚˜ local ํ”„๋กœํŒŒ์ผ์—์„œ๋งŒ ์‚ฌ์šฉํ•จ

springdoc:
  swagger-ui:
    enabled: false