서비스에 대한 문서화의 필요성?
서비스 공급자는 서비스의 소비자에게 서비스를 제공할 때, 세부 사항을 정의 해주면 좋음.
주요 세부 내용은 아래와 같음.
하나, 서비스를 호출하는 방법 및 서비스 요청을 위한 URI는 무엇인가?
둘, 서비스요청을 위한 형식은 어떻게 되어야 하는가?
셋, 서비스를 요청 했을 때, 어떤 응답 메시지가 발생하는가 ?
기타 등등.
그럼, 서비스에 대한 문서화는 어떻게 하면 좋을까?
가장 인기 있는 옵션은 바로, 스웨거(swagger) 를 사용하는 것.
그럼, 스웨거에 대해서 알아보자.
스웨거(swagger) 란?
Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset.
간단히 말하면, Swagger 오픈 소스 및 전문 툴셋을 사용하면, 사용자, 팀 및 기업을위한 API 개발을 간소화할 수 있음.
다시말해서, API에 대한 RESTful 문서를 작성해서 모든 자원 및 조작을 인간 및 기계가 읽을 수 있는 형식으로 자세하게 설명해 쉽게 개발 및 통합할 수 있는 기능을 제공함.
참고페이지
그럼, 스웨거의 장점은?
스웨거를 사용하면, RESTful 서비스 코드에서 바로 스웨거 문서를 생성할 수 있음.
즉, 코드와 문서가 항상 동기화됨.
스웨거 UI 를 사용하면, 어플리케이션에 통합돼 사람이 읽을 수 있는 문서를 제공함.
그럼, 스웨거를 사용하려면 어떻게 해야 할까?
첫째, 아래와 같이 pom.xml 에 의존성을 추가함.
둘째, 스웨거 문서를 활성화하고 생성하기 위해서 아래와 같이 환경설정 클래스를 추가함.
설명
@Configuration 어노테이션
스프링 구성 파일을 정의함.
@EnableSwagger2 어노테이션
스웨거 지원을 가능하게 함.
Docket
스웨거 Spring MVC 프레임워크를 사용해 스웨거 문서 생성을 설정하는 간단한 빌더 클래스
new Docket(DocumentationType.SWAGGER_2)
스웨거 2를 사용할 스웨거 버전으로 설정함.
.apis(RequestHandlerSelectors.any()).paths(PathSelectors.any())
문서의 모든 API와 경로를 포함함.
그럼, 어플리케이션을 실행해서 정상적으로 스웨거가 동작하는지 확인해 보자.
하나, 어플리케이션 구동
둘, 아래 URI를 요청해보자
http://localhost:8080/v2/api-docs
위와 같이 정상적으로 스웨거가 작동함을 알 수 있음.
그럼, 스웨거 UI 에 대해서 알아보자
아래 URI 를 통해서 스웨거 UI로 문서를 볼 수 있음.
http://localhost:8080/swagger-ui.html
위와 같이
코드를 기반으로 사용자가 보기 쉽게 Api 문서가 자동 작성됨을 확인할 수 있음.
그리고 아래와 같이 Controller 를 클릭하면 각 Controller가 지원하는 요청 메소드 및 URI 목록도 보여줌.
그럼, POST 관련 /thubuser를 선택해서 상세내용을 확인해보자
위와 같이 중요사항을 보여줌.
Parameters
요청 본문을 포함해 모든 주요 파라미터를 보여줌.
Parameter Type
요청 본문에 대해 예상되는 구조를 보여줌.
Response Message
서비스에서 반환한 여러가지 HTTP 상태코드를 보여줌.
그리고, 위의 value 값을 채우고 "Try it out!" 버튼을 클릭하면,
아래와 같이 자체적으로 테스트도 가능함.
다시 정리하자면,
스웨거 UI를 사용하면, 많은 노력없이도, 개발한 API 에 대한 서비스 정의를 공개 할 수 있는 장점이 있음.
그리고, 추가 어노테이션을 이용하면, 문서를 커스텀하게 내용을 개선 할 수 있음.
그럼, 간단하게 Controller에 아래 어노테이션을 추가해보자
package com.example.rest.demo.controller; import com.example.rest.demo.bean.ThubUser; import com.example.rest.demo.exception.ThubUserNotFoundException; import com.example.rest.demo.service.ThubUserService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.server.mvc.ControllerLinkBuilder; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @RestController public class ThubUserController { private final static int ZERO = 0; @Autowired private ThubUserService thubUserService; @ApiOperation( value = "별명으로 유저를 검색하는 기능을 제공함", notes = "일치하는 유저 정보가 반환됨", response = ThubUser.class, responseContainer = "ThubUser", produces = "application/json" ) @GetMapping("/thubusers/{nickname}") public ThubUser retrieveThubUser(@PathVariable String nickname) { ThubUser thubUser = thubUserService.retrieveThubUser(nickname); if(thubUser == null) { throw new ThubUserNotFoundException("User not found!"); } return thubUser; } ...(생략)... }
설명
@ApiOperation(value = "별명으로 유저를 검색하는 기능을 제공함")
서비스 요약으로 생성됨.
notes = "일치하는 유저 정보가 반환됨"
서비스 설명으로 생성됨.
produces = "application/json"
서비스 문서의 "produce" 절을 커스텀하게 함.
그럼, 무엇이 달라졌는지 AS-IS 와 TO-BE 를 비교해보자
AS-IS
TO-BE
위에 설명 했던 부분들이 개선되었음을 확인할 수 있음.
서비스 요약, 설명, "produce" 절 기타등등.
그럼, 스웨거관련 문서를 커스텀하게 개선시킬 때, 사용하는 주요 어노테이션에 대해서 간단하게 알아보자.
@Api
클래스를 스웨거 리소스로 표시함
@ApiModel
스웨거 모델에 대한 추가 정보를 제공함.
@ApiModelProperty
모델 속성의 데이터를 추가하고 조작함.
@ApiOperation
특정 결로에 대한 Operation or HTTP 메소드를 설명함.
@ApiParam
Operation 파라미터에 대한 추가 메타 데이터를 추가함.
@ApiResponse
Operation 의 응답예를 설명함.
@ApiResponses
여러 ApiResponse 객체 목록을 허용하는 래퍼.
@Authorization
Resource or Operation 에 사용되는 권한 부여 체계를 선언함.
@AuthoriztionScope
OAuth2 인증 범위에 대해서 설명함.
@ResponseHeader
응답의 일부로 제공될 수 있는 헤더를 나타냄.
마지막으로, 스웨거는 연락처 / 라이센스 및 기타 정보와 같은 일련의 서비스에 대한 고급정보를 커스텀하는 데 사용할 수 있는 스웨거 정의 어노테이션을 알아보자.
@SwaggerDefinition
생성된 스웨거 정의에 추가될 정의 레벨 속성
@Info
스웨거 정의를 위한 일반 메타 데이터
@Contact
스웨거 정의를 위해 연락할 사람을 설명하는 속성
@License
스웨거 정의에 대한 라이선스를 설명하는 속성
결론
스웨거(swagger) 란?
Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset.
간단히 말하면, Swagger 오픈 소스 및 전문 툴셋을 사용하면, 사용자, 팀 및 기업을위한 API 개발을 간소화할 수 있음.
다시말해서, API에 대한 RESTful 문서를 작성해서 모든 자원 및 조작을 인간 및 기계가 읽을 수 있는 형식으로 자세하게 설명해 쉽게 개발 및 통합할 수 있는 기능을 제공함.
스웨거의 장점은?
스웨거를 사용하면, RESTful 서비스 코드에서 바로 스웨거 문서를 생성할 수 있음.
즉, 코드와 문서가 항상 동기화됨.
스웨거 UI 를 사용하면, 어플리케이션에 통합돼 사람이 읽을 수 있는 문서를 제공함.
오늘도 서비스 코드에서 바로 문서를 생성할 수 있는 스웨거에 대한 지식 마술(?) 한가지 획득완료! 감사합니다. ^^
오늘의 명언 한마디
사람들에게 완벽하게 보이려고 하면 할수록 사람들은 당신에게서 멀어진다.
사람들이 당신에게 호감을 갖고, 당신에게 자꾸만 다가서고자 하는 건, 당신 또한 자신과 같은 인간이라는 사실을 끊임없이 확인하는 작업을 통해 이루어진다.
레일 라우즈지음, "사람을 얻는 기술" 중에서..
오늘의 영어 한마디
No one dresses better than Jenny.
아무도 옷을 입지 않아 / 더 잘 / Jenny 보다
설명
부정대명사
사람이나 사물을 막연히 나타내는 대명사를 말함.
위의 one 은 일반사람을 나타내는 경우에 쓰임.
참고로 no one 은 단수로 none 은 복수로 취급됨.
"better than" 은 비교급을 말함.
즉, Jenny 보다 더 잘 옷을 입지 않음을 나타냄.
오늘의 민법 한마디
제1편 총칙 / 제5장 법률행위 / 제4절 무효와 취소
제140조(법률행위의 취소권자)
취소할 수 있는 벌률행위는 제한 능력자, 착오로 인하거나, 사기, 강박에 의하여 의시표시를 한 자, 그의 대리인 또는 승계인만이 취소할 수 있다.
나의 목표 및 다짐을 항상 내곁에 두기.
목표
나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
목표를 이루기 위한 실천방안
꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
"천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
32.Spring, 스프링 시큐리티(OAuth2 인증[2/2])에 대한 개념에 대해서 간단히 알아보자. (0) | 2021.02.06 |
---|---|
31.Spring, 스프링 시큐리티(기본인증)에 대해서 알아보자. (1/2) (0) | 2021.02.06 |
29.Spring, 데이터 유효성체크에 대해서 알아보고 간단한 샘플프로그램을 만들어 보자. (0) | 2021.02.06 |
28.Spring, HATEOAS에 대해서 알아보고 간단한 샘플 프로그램을 만들어보자. (0) | 2021.02.06 |
27.Spring, 예외처리(Exception)에 대해서 알아보고 간단한 샘플 프로그램을 만들어보자. (0) | 2021.02.06 |