Contents

[Mastering Spring 5.0] 6.4 Swagger

Mastering Spring 5.0 μŠ€ν„°λ””

μŠ€ν”„λ§ 5.0 λ§ˆμŠ€ν„° μŠ€ν„°λ””
μŠ€ν”„λ§ 5.0 λ§ˆμŠ€ν„° μŠ€ν„°λ”” ν•™μŠ΅ λ‚΄μš© μ •λ¦¬μž…λ‹ˆλ‹€.

REST μ„œλΉ„μŠ€ λ¬Έμ„œμ˜ μžλ™ν™”

  • REST API μ‹¬ν”Œν•˜κ²Œ μ„€κ³„λ˜λ©΄ μ’‹κ² μ§€λ§Œ, μ†ŒλΉ„μžμ˜ μš”κ΅¬μ‚¬ν•­ λ˜λŠ” μ„œλΉ„μŠ€κ°€ 컀짐에 따라 API κ°€ 점점 λ³΅μž‘ν•΄μ§€κ³  관리해야할 API κ°œμˆ˜λ„ 점점 늘게 λœλ‹€.
  • ν˜‘μ—…μ„ μœ„ν•΄μ„œλŠ” API λŠ” λ°˜λ“œμ‹œ λ¬Έμ„œν™” λ˜μ–΄μ•Ό ν•˜λŠ”λ°, μ†ŒμŠ€ 변경사항과 동기화 μ‹œν‚€κΈ°κ°€ 맀번 λ²ˆκ±°λ‘­λ‹€.
  • μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ REST API μ„œλΉ„μŠ€ λ¬Έμ„œ(μŠ€νŽ™)을 μžλ™ν™” ν•˜λŠ” 툴이 λ“±μž₯ν•˜κ²Œ λ˜μ—ˆλ‹€.

μ£Όμš” API Spec μžλ™ν™” 라이브러리

Swagger2

Swagger 2 λŠ” RESTful API λ₯Ό μ„€λͺ…ν•˜κ³  λ¬Έμ„œν™”ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μ˜€ν”ˆμ†ŒμŠ€ λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€. νŠΉμ • 언어에 ꡬ애 받지 μ•ŠμœΌλ©°, HTTP 이외에 μƒˆλ‘œμš΄ 기슬과 ν”„λ‘œν† μ½œ ν™•μž₯이 κ°€λŠ₯ν•˜λ‹€. HTML, Javasript CSS λ₯Ό ν†΅ν•˜μ—¬ API λ¬Έμ„œλ₯Ό λ™μ μœΌλ‘œ 생성할 수 μžˆλŠ” Swagger UI λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν•¨κ»˜ μ œκ³΅λœλ‹€. Swagger2 Spec 은 λͺ‡ 가지 κ΅¬ν˜„μ²΄κ°€ μžˆλŠ”λ°, Springboot ν”„λ‘œμ νŠΈμ˜ 경우 Springfox κ΅¬ν˜„μ²΄κ°€ 주둜 μ‚¬μš©λœλ‹€.

μŠ€ν”„λ§λΆ€νŠΈ ν”„λ‘œμ νŠΈμ— swagger μ μš©ν•˜κΈ°

μ˜μ‘΄μ„± μΆ”κ°€

Springfox Spec 의 Swagger 와 Swagger UI λ₯Ό pom.xml λ˜λŠ” build.gradle 에 μΆ”κ°€ν•œλ‹€.

pom.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
    <scope>compile</scope>
</dependency>

build.gradle

1
2
implementation('io.springfox:springfox-swagger2:2.9.2')
implementation('io.springfox:springfox-swagger-ui:2.9.2')

Swagger ν”„λ‘œμ νŠΈ μ„€μ •

/src/main/com/mastering/sping/springboot/config/SwaggerConfig.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }   
}
  • @Configuration : μŠ€ν”„λ§ κ΅¬μ„±νŒŒμΌμ„ μ •μ˜ν•œλ‹€.
  • @EnableSwagger2 : μŠ€μ›¨κ±° 지원을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜.
  • Docket : μŠ€μ›¨μ„œ μŠ€ν”„λ§ MVC ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•΄ μŠ€μ›¨κ±° λ¬Έμ„œ 생성을 μ„€μ •ν•˜λŠ” κ°„λ‹¨ν•œ Builder Class
  • new Docket(DocumentationType.SWAGGER_2) : μŠ€μ›¨κ±° 2λ₯Ό μ‚¬μš©ν•  μŠ€μ›¨κ±° λ²„μ „μœΌλ‘œ μ„€μ •ν•œλ‹€.
  • .apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()) : λ¬Έμ„œμ˜ λͺ¨λ“  API 와 경둜λ₯Ό ν¬ν•¨ν•œλ‹€.

Swagger API λͺ…μ„Έ ν™•μΈν•˜κΈ°

Swagger 섀정이 μ™„λ£Œλ˜λ©΄ μ„œλ²„λ₯Ό 기동 ν›„ http://localhost:8080/v2/api-docs둜 μŠ€μ›¨κ±° API λ¬Έμ„œλ₯Ό μ‹œμž‘ν•  수 μžˆλ‹€.

Swagger UI λ¬Έμ„œ ν™•μΈν•˜κΈ°

  • Swagger UI λŠ” μ˜μ‘΄μ„± 라이브러리 io.springfox:springfox-swagger-uiλ₯Ό 톡해 ν™œμ„±ν™” λœλ‹€. `
  • http://localhost:8080/swagger-ui.html 둜 λ¬Έμ„œλ₯Ό 확인 ν•  수 μžˆλ‹€.