- [ 배경 ]
- 토이 프로젝트인 중고거래 시스템을 개발하면서 특정 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 등을 설정고 빌드합니다.
- http://IP:port/swagger-ui.htmlURL에 접근 시 Swagger-ui.html 에서 정상 작동하는 것을 볼 수 있습니다.
- [ 결과 ]
- 아래와 같이 중고거래 물품의 검색 API가 어떤 파라미터들을 가지고 각 파라미터의 자료형과 내용이 무엇인지 알 수 있게 되었습니다.
- [ 성과 ]
- REST API 설계를 swagger 라이브러리를 활용하여 간단한 설정으로 API Document가 자동 생성되게 하였습니다.
결과적으로 문서 내용에 대한 추가 작업을 하지 않게 되어 개발 생산성이 향상되었습니다.
- REST API 설계를 swagger 라이브러리를 활용하여 간단한 설정으로 API Document가 자동 생성되게 하였습니다.
- used-market-server 중고거래 프로젝트 코드는 아래에서 확인하실 수 있습니다.
junshock5/used-market-server
중고거래 프로젝트. Contribute to junshock5/used-market-server development by creating an account on GitHub.
github.com
'used-market-server Project' 카테고리의 다른 글
다중 서버 환경에서 Session 공유법 (Sticky Session, Session Clustering, Inmemory DB) (0) | 2020.09.09 |
---|---|
REST API 정의와 중고거래 프로젝트에 적용하기 (0) | 2020.09.09 |
i18n 설정과 Messagesource를 통한 다국어 처리 (0) | 2020.09.09 |
로그인 확인 코드 AOP 적용하기 (0) | 2020.09.09 |
Log4j2 Logback Log4j 차이 및 적용 (0) | 2020.09.09 |