OpenAPI๋?
OpenAPI Specification(OAS)๋ผ๊ณ ๋ ํ๋ OpenAPI๋ RESTful API๋ฅผ ๊ธฐ์ ์๋ ๊ท์น์ ๋ง๊ฒ API Spec์ json์ด๋ yaml๋ก ํํํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
- RESTful API ๋ฅผ ๊ธฐ์ ํ๋ ํ์ค์ผ๋ก ์๋น์ค์์ ์ ๊ณตํ๋ API ์ ๊ธฐ๋ฅ๊ณผ End Point ๋ฅผ ๊ฐ๋ฐ์๋ ์์คํ ์ด ์๋์ผ๋ก ๋ฐ๊ฒฌํ๊ณ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- ์ ์๋ Swagger 2.0๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ถ๋ ธ๋ค๊ฐ 3.0๋ฒ์ ์ผ๋ก ์ฌ๋ผ์ค๋ฉด์ OpenAPI 3.0 Specification(๋๋ Swagger 3.0)์ผ๋ก ์นญํ๋ค.
๐ Open API(Open Application Programming Interface, ๊ณต๊ฐ API)
๋๊ตฌ๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๊ฐ๋ API๋ฅผ ๋งํ๋ค. Public API๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
Swagger๋?
๊ฐ๋จํ ์ค์ ์ผ๋ก API ๋ฌธ์๋ฅผ ์๋ํํด์ฃผ๋ ์คํ์์ค ํ๋ ์์ํฌ์ด๋ค.
- OpenAPI ์ฌ์์ ์ค์ฌ์ผ๋ก ๊ตฌ์ถ๋ ์คํ์์ค ๋ฌธ์ํ ๋๊ตฌ์ด๋ค.
- API ๋ช ์ธ์๋ฅผ ์ง์ ์์ฑํ๋ ๋์ Swagger๋ฅผ ์ฌ์ฉํด API๋ฅผ ๋ฌธ์ํํ ์ ์๋ค.
- Spring REST Docs์ ๋ฌ๋ฆฌ ์ฝ๋ ๋ช ์ค๋ง ์ถ๊ฐํ์ฌ ๋ง๋ค ์ ์๋ค.
- ๋ฌธ์ ํ๋ฉด์์ API๋ฅผ ๋ฐ๋ก ํ ์คํธํ ์ ์๋ค.
- API ๋ฌธ์๋ฅผ ์์ฑํ๋ ์๊ฐ์ ์ ์ฝํ๊ณ API ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ์งํ ์ ์๋ค.
Spring boot์ Swagger 3.0 ์ ์ฉํ๊ธฐ
1. Swagger ์ฌ์ฉ์ ์ํ ์์กด์ฑ ์ถ๊ฐ(springfox ์ฌ์ฉ)
implementation "io.springfox:springfox-boot-starter:3.0.0" implementation "io.springfox:springfox-swagger-ui:3.0.0"
2. Swagger ์ค์
@Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .useDefaultResponseMessages(false) .select() .apis(RequestHandlerSelectors.basePackage("com.example.sample.controller")) .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Practice Swagger") .description("practice swagger config") .version("1.0") .build(); } }
3. Swagger-ui ์ ์ํ์ฌ ํ์ธ
- Swagger2: http://localhost:8080/swagger-ui.html
- Swagger3: http://localhost:8080/swagger-ui/index.html

4. Controller์ API ์์ฑํ๊ณ ์ค๋ช ์ถ๊ฐ
@RestController public class BasicController { @PostMapping("/api/member") @ApiOperation(value = "์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ", notes = "๊ฐ์
๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.") public List<String> getMemberList() { List<String> memberList = Arrays.asList("anna", "tom", "grace"); return memberList; } @GetMapping("/api/member/{id}") @ApiOperation(value = "์ฌ์ฉ์ ์กฐํ", notes = "ID๋ก ์ฌ์ฉ์๋ฅผ ์กฐํํฉ๋๋ค.") public String getMemberById(@PathVariable("id") String id) { List<String> memberList = Arrays.asList("anna", "tom", "grace"); return memberList.stream() .filter(item -> item.equals(id)) .findAny() .orElse(null); } }
5. ๋ค์ํ ํ๋ผ๋ฏธํฐ๋ก API ํธ์ถํ์ฌ ํ ์คํธ

'๊ฐ๋ฐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Security ์ค๋ณต ๋ก๊ทธ์ธ ๋ฐฉ์ง ์ค์ (0) | 2022.03.15 |
---|---|
Spring Boot ํ๋ก์ ํธ git ์ฐ๋ (0) | 2022.03.09 |
Spring Boot์ MySQL / Mybatis ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.03.09 |
Spring Boot ํ๋ก์ ํธ ์์ฑํ๊ธฐ (0) | 2022.03.08 |
JPA, Hibernate (0) | 2022.03.08 |
๋๊ธ