• [ 배경 ]
    • 토이 프로젝트인 중고거래 시스템을 개발하면서 특정 API가 어떤 파라미터들을 가지고 각 파라미터의 자료형과 내용이 무엇인지를 알려주는 문서 작업이 필요했습니다.
    • Spring 환경에서 문서화를 해주는 라이브러리는 구글링 결과 Spring Rest Doc와 Swagger가 있습니다.
      각각 라이브러리의 중요 특징을 비교해보자면 아래와 같습니다.

  • 우선 Redst Docs와 Swagger는 성격이 많이 다릅니다. Swagger는 RESTful 문서에 대한 명세보다는 Postman Tool처럼 특정 API를 쉽게 호출해볼 수 있는 것에 초점이 맞춰져 있습니다.  반면에 Spring Rest Docs는 깔끔 명료한 문서를 만들 수 있습니다. 그래서 문서 제공용으로는 Spring Rest Docs가 좀더 나을 수 있습니다.

  • Swagger는 RESTfulAPI에 대한 명세를 어노테이션 방법으로 제공해주지만 다음과 같은 단점도 있습니다.
    • 실제 코드에 영향을 미치지 않지만 지속해서 추가됨으로써 실제 코드보다 문서 명세에 대한 코드가 더 길어져 전체적인 가독성이 떨어집니다.

  • 하지만 중고거래 사이트 경우 백엔드 시스템으로 간단한 문서화와 같이 테스트해볼 수 있는 Front UI도 필요해서 Swagger 라이브러리를 사용하기로 하였습니다.

  • 추후 코드 유지보수시 문서 동기화 측면이나 가독성 측면에서 문제 발생 시 Spring Rest Docs 사용도 고려할 예정입니다.

 


  • [ 과정 ]
    • 중고거래 프로젝트에 적용하는 과정에 대해 설명드리겠습니다.

    • 우선 pom.xml 파일에 springfox-swagger2, springfox-swagger-ui 의존성을 각각 추가합니다.

    • springfox-swagger2는 JSON API 문서를 제공해주는 라이브러리입니다.

    • springfox-swagger-ui는 JSON API 문서에 모든 콘텐츠는 다음 형식을 사용하는 URL 인 webjar 규칙을 제공합니다. (http://IP:port/swagger-ui.html)

 

  • 의존성 추가 시 <version> 태그에 버전을 명시하지 않으면 Spring-boot 환경이더라도 동작하지 않았습니다.
  • SwaggerConfig.java 파일에서 현재 애플리케이션의 문서명, 추가설명, 버전, license , license url 등을 ApiInfo에 설정합니다.

  • io.springfox:springfox-spring-web:2.6.1 의존성에 있고 Swagger 설정의 핵심이 되는 Bean인
    Docket 클래스를 인스턴스로 생성할 때 ApiInfo 에 설정한 정보를 파라미터에 설정합니다.
    그 외에 basePackage, PathSelectors, DefaultResponseMessages 등을 설정고 빌드합니다.

 


  • [ 결과 ]
    • 아래와 같이 중고거래 물품의 검색 API가 어떤 파라미터들을 가지고 각 파라미터의 자료형과 내용이 무엇인지 알 수 있게 되었습니다.


  • [ 성과 ]
    • REST API 설계를 swagger 라이브러리를 활용하여 간단한 설정으로 API Document가 자동 생성되게 하였습니다.
      결과적으로 문서 내용에 대한 추가 작업을 하지 않게 되어 개발 생산성이 향상되었습니다.

 

junshock5/used-market-server

중고거래 프로젝트. Contribute to junshock5/used-market-server development by creating an account on GitHub.

github.com

+ Recent posts