2023. 4. 21. 23:50ใ๐พBackEnd/๐ฑ Spring

1. ๊ธ์ ์์ฑํ ์ด์
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ API ์คํ์ ๊ณต์ ํ๊ธฐ ์ํด ๋ค์ํ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ๋ณดํต API ๋ฌธ์ํ๋ฅผ ํ๊ธฐ ์ํด์๋ Rest DOCS์ Swagger๋ฅผ ํตํด์ API๋ฅผ ๋ฌธ์ํ๋ฅผ ํ๋ค.
์ ํฌ๋ Swagger๋ฅผ ์ ํ์ ํ์๊ณ ๋ฌธ์ํ๋ฅผ ํ์์ผ๋ ๋ฌธ์ํ๋ฅผ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๊ณต์ ํ๊ธฐ ์ํด์ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๋์ค์ ๋ฐฐํฌ๋ฅผ ํ์ง ์๊ณ Postman์ผ๋ก ๋ฌธ์ ๊ณต์ ํ๊ฐ ๊ฐ๋ฅํ์ฌ ๊ธ์ ์์ฑ์ ํ์ต๋๋ค.
2. Swagger UI ์ ์ฉํ๊ธฐ
์ฒ์์ Gradle์ ์์กด์ฑ์ ์ถ๊ฐ๋ฅผ ํฉ๋๋ค.
implementation 'org.springdoc:springdoc-openapi-ui:1.6.9'
์ดํ Config์์ ์ ํฉ๋๋ค.
@Configuration
public class OpenApiConfig {
@Bean
public OpenAPI openAPI() {
Info info = new Info()
.version("v1.0.0")
.title("์คํฐ๋ ํ์ API ๋ช
์ธ์")
.description("StudyTime API Description");
return new OpenAPI()
.info(info);
}
}
์ด ๋ถ๋ถ์์ ๋ฒ์ ๊ณผ title, description์ด ์๋๋ฐ swagger์ ์ ๋ชฉ๊ณผ ์ค๋ช ์ ์์ฑํ๋ ๋ถ๋ถ์ ๋๋ค. ์ด ๊ฒฝ์ฐ์ ์ฌ์ฉ์์ ๋ง๊ฒ ์ค์ ์ ํ๋ฉด ๋ฉ๋๋ค.
์ดํ ์๋ฒ๋ฅผ ์คํ์ ์ํจ๊ณ ๋ค์๊ณผ ๊ฐ์ URL์ ์ ๋ ฅํ๋ค.
http://localhost:8080/swagger-ui/index.html
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ต๋๋ค.

์ ์ฌ์ง์ ์ปค์คํ ์ ํ ํ๋ฉด์ ๋๋ค.
์์ Config์ค์ ์ ๋ณด๋ฉด Title๊ณผ Version, Description์ด ์ ํํ๊ฒ ๋ณ๊ฒฝ๋ ํ๋ฉด์ ํ์ธํ ์ ์๋ค.
์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋ง ํ์๋ค๋ฉด ๋ฐ์ API๋ ์์ด๋ก ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ค์ ์ด ๋์ด์๋ค.
๊ทธ๋ฌ๋ฉด ์ปค์คํ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
3. Swagger ์ด๋ ธํ ์ด์ ์ค์
1. Tag
@Tag(name = "user", description = "์ฌ์ฉ์ API")
@RequestMapping(value = "${demo.api}/users")
@RestController
public class UserController
name: ํ๊ทธ์ ์ด๋ฆ
description: ํ๊ทธ์ ๋ํ ์ค๋ช
2. Schema
description : ํ๊ธ๋ช
defaultValue : ๊ธฐ๋ณธ๊ฐ
allowableValues :
3. Operation
summary : api์ ๋ํ ๊ฐ๋ต ์ค๋ช
description : api์ ๋ํ ์์ธ ์ค๋ช
responses : api Response ๋ฆฌ์คํธ
parameters : api ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ
4. ApiResponse
responseCode : http ์ํ์ฝ๋
description : response์ ๋ํ ์ค๋ช
content : Response payload ๊ตฌ์กฐ
schema : payload์์ ์ด์ฉํ๋ Schema
hidden : Schema ์จ๊น์ฌ๋ถ
implementation : Schema ๋์ ํด๋์ค
5. Parameter
name : ํ๋ผ๋ฏธํฐ ์ด๋ฆ
description : ํ๋ผ๋ฏธํฐ ์ค๋ช
in : ํ๋ผ๋ฏธํฐ ์์น
query, header, path, cookie
4. Postman์ผ๋ก ์ค์ ํ๊ธฐ

์ด ํ๋ฉด์์ API๋ฅผ JSON์ผ๋ก Exportํ๋ ๋ฒํผ์ ํด๋ฆฐํ๋ค. ๊ทธ๋ฌ๋ฉด JSON์ผ๋ก ๋ณํ์ด ๋๋๋ฐ ์ด๊ฑธ ๋ณต์ฌํด์ Postman์ impot๋ฅผ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.

์ดํ ๋ณต์ฌํ JSONํ์ผ์ ๋ถ์ฌ๋ฃ๊ณ Public์ ํตํด ๊ณต๊ฐ์ ์ผ๋ก ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.

์ฐธ๊ณ
[Spring Boot Tutorial] 15. Open API 3.0 + Swagger v3 ์์ธ์ค์
api ๊ทธ๋ฃน ์ค์ : @Tag api Schema ์ค์ : @Schema api ์์ธ ์ ๋ณด ์ค์ : @Operation api response ์ค์ : @ApiResponse api parameter ์ค์ : @Parameter ์ด์ ์๊ฐ์ OpenAPI info ์ ๋ณด๋ง ์ค์ ํ์์ต๋๋ค. Schemas ์ ๋ํ ์ค๋ช ๊ณผ ๋ค
blog.jiniworld.me
Swagger์์ Postman์ผ๋ก Exportํ๊ธฐ - Blog
codecamper.me
[Spring Data JPA Tutorial] 14. Swagger v3 ์์ธ์ค์ ๋ฐ request ์ ํจ์ฑ ๊ฒ์ฆ
ํ์์ฑ OpenAPI doc ๊ด๋ จ Annotation operation ๊ทธ๋ฃน ์ค์ : @Tag Schema ์ค์ : @Schema ์์ธ ์ ๋ณด ์ค์ : @Operation response ์ค์ : @ApiResponse parameter ์ค์ : @Parameter ๊ธฐ์กด api์ ์ ์ฉํ๊ธฐ @Tag ์ค์ @Schema ๋ฐ ์ ํจ์ฑ ๊ฒ์ฆ
blog.jiniworld.me
'๐พBackEnd > ๐ฑ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
N+1 ๋ฌธ์ ๋ค์ํ ํด๊ฒฐ๋ฒ (0) | 2023.12.15 |
---|---|
Mockito๋ ์๊ณ ํ ์คํธ ์ฝ๋ ์์ฑํ์ (0) | 2023.03.24 |
์ํธํ Bcrypt์ ๋ํ ์ฌ์ธต ๋ถ์ (2) | 2023.03.24 |
[ Object Mapper] Dozer์ ๋ํด์ ๋ค์ด๋ ๋ดค๋? (0) | 2023.03.14 |
[ RFC ] ๊ณต์ ๋ฌธ์๋ฅผ ํตํ์ฌ Delete์ Status๋ฅผ ์์๋ณด์ (0) | 2023.03.12 |