실행 환경 Spring Rest Docs Gradle 설정적용장점 단점 Swaager 알아보기 전에 알아야 할 개념 Swaager 종류 뭘 써야할까? 적용 장점 단점 우리들의 선택은? Reference
실행 환경
- java :
11
- gradle :
7.4.1
Spring Rest Docs
- 먼저 전 프로젝트에서 사용했던 Rest Docs를 보겠습니다.
Gradle 설정
- (1) : gradle 7버전부터는
org.asciidoctor.jvm.convert을 사용해야 합니다.
- (2) :
asciidoctorExtensions을 설정해줍니다.
- (4), (5) :
asciidoctorExtensions과 docs 생성을 위한spring-restdocs-mockmvc의존성을 추가해줍니다.
- (6) : dependsOn으로 test task가 실행된 이후 실행되는 task입니다.
- sources에 명시한 adoc만 html로 변환하게 해줍니다.
baseDirFollowsSourceFile의 경우 docs/asciidoctor/domain과 같이 폴더 구조로 adoc을 만들었을 때 index.adoc에서 include했을 경우 path를 찾지 못하기 때문에 설정해줘야 합니다.
- (7) : 문서 최신화를 위해 앞전에 만들었던 docs파일을 삭제합니다.
doFirst로 인해 asciidoctor가 실행되기 전에 실행하게 됩니다.
- (8) : 완성된 html을 static 폴더에 넣어 서버를 띄우게 되면 볼 수 있도록 합니다.
- (9) : bootJar가 실행되기 전에 createDocument task를 실행하게 됩니다.
- 이를 통해 build시에 docs파일이 jar파일에 들어갈 수 있습니다.
적용
- 테스트를 통해 스니펫을 생성해줍니다.
- adoc 파일을 생성합니다 (
src/docs/asciidoc)
- 이후 빌드를 해보면 자동적으로 html 파일이
src/main/resources/static으로 들어가게 됩니다.

- 이후 서버를 실행하게 되면 아래와 같이 docs파일이 생성됩니다.

장점
- 테스트 기반으로 동작하기 때문에 프로덕션 코드에는 영향이 없습니다.
- 테스트 코드가 강제되므로 문서의 신뢰성이 높습니다.
- 문서가 매우 직관적입니다.
단점
- 엔드 포인트마다 수많은 코드를 작성해야합니다.
- 테스트가 없다면 프론트에게 넘겨줄 문서가 없습니다.
- Swagger와는 다르게 테스트를 즉석으로 할 수 없습니다.
Swaager
알아보기 전에 알아야 할 개념
- Open API : 개방된 API라는 뜻으로 누구나 사용될 수 있도록 API의 endpoint가 개방되어 있습니다.
- OpenAPI : RESTful API를 기 정의된 규칙에 맞게 API spec을 json이나 yaml로 표현하는 방식을 의미합니다.
- 직접 소스코드나 문서를 보지 않고 서비스를 이해할 수 있다는 장점이 있습니다.
- RESTful API 디자인에 대한 정의 표준이라고 생각하면 됩니다.
- Swaager는 OpenAPI를 구현하기 위한 도구입니다.
Swaager 종류


Springfox Swaager - 2018년까지 Springfox Swaager는 많은 사용자들이 사용했지만 2018년 6월을 마지막으로 업데이트가 중단되었습니다. ( 2년만에 업데이트가 되긴 했습니다. )
Springdoc

- Springfox Swaager의 업데이트가 중단한 사이 Springadoc이 나오게 되었습니다.
- Springfox보다 좀 더 쉽게 사용할 수 있게 만들었다고 합니다.
뭘 써야할까?

- Springdoc이 꾸준하게 업데이트를 하고 있다는 점에서 springadoc를 사용하는 것이 좋을 것 같습니다.
- Swaager-ui를 포함하는 형태로 가지고 있습니다.
적용
장점
- API문서에서 API테스트를 즉시 해볼 수 있습니다.
- 문서가 이쁩니다.
단점
- 테스트 코드 없이도 생성할 수 있어서, API 문서를 신뢰하기 어렵습니다.
- 프로덕션 코드에 영향이 있습니다.




![[Swagger] Open API 3.0 그리고 Swagger v3](https://www.notion.so/image/https%3A%2F%2Fuser-images.githubusercontent.com%2F44339530%2F131348714-33a57d99-3c62-4991-9368-408eda560e85.png?table=block&id=0d227846-1018-49dc-baee-fb40ccacf863&cache=v2)