일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코드 스테이츠 백엔드 교육과정
- Spring
- 백내장 다초점렌즈 삽입술
- 겜스고
- Gamsgo
- Java
- 백준 알고리즘
- 금융감독원
- 코드스테이츠 합격
- 코드스테이츠 백엔드 후기
- 자바
- 금감원 백내장 민원
- 에이치엘비
- HLB
- 보험금 지급거절
- 코테 합격후기
- 메서드
- 금감원
- 코드스테이츠 백엔드 교육과정
- 코드스테이츠 합격 후기
- 금융감독원 민원신청
- 백내장
- 코드스테이츠 백엔드 부트캠프 합격
- 해시
- Code States 백엔드 합격 후기
- codestates 국비지원 1기 합격 후기
- 코드스테이츠 부트캠프 합격 후기
- CodeState 후기
- 백내장 금감원
- 코드스테이츠 부트캠프
Archives
- Today
- Total
개발하는 동그리
[Spring MVC] API 문서화 본문
반응형
API 문서
클라이언트가 REST API 백엔드 애플리케이션에 요청을 전송하기 위해 필요한 정보 문서화 ( 요청 URI, Parameter 등등 )
- API 사용을 위한 정보가 담긴 문서를 API 문서 or API 스펙이라 불림
- Swagger
- 장점
- 애너테이션 기반의 API 문서화 방식
- Postman처럼 API툴로써 기능을 사용 가능 (대표적)
- 단점
- 애너테이션이 기존 코드에 더해지면서 가독성 및 유지보수성이 떨어짐
- API문서와 API코드 간의 정보 불일치 문제 발생할 수 있음
- 장점
- Spring Rest Docs
- 장점
- 테스트 코드 기반의 API 문서화 방식
- 애플리케이션 기능 구현 관련코드에 API문서 생성을 위한 코딩이 필요 없음
- 애플리케이션의 API 문서정보와 API의 문서 스펙이 불일치 하면 failed되면서 API문서가 생성 안됨 (테스트 결과가 passed 되야 API문서 생성 가능)
- 단점
- 테스트 케이스를 작성해야 하고 모든 테스트를 passed 요구됨
- API 툴 기능 없음
- 장점
Spring Rest Docs
- 스프링의 하위 프로젝트
- 생성 흐름
- 슬라이스 테스트 코드 작성 (controller에 슬라이스 테스트 코드 작성)
- API 스펙 정보 코드 작성 (controller에 정의된 API 스펙정보 Request / Response Body, Query Parameter 코드)
- Test 실행 (gradle 빌드 테스크에서 test task를 실행시켜 스니핏 일괄 생성)
- failed -> 스펙 불일치로 API문서 생성 x
- passed -> 다음단계로
- API 문서 스니핏 생성 (.adoc) (테스트 케이스 하나당 하나의 스니핏 생성)
- API 문서 생성 (.adoc) (스니핏을 모아서
- API 문서 -> HTML로 변환
plugins {
id 'org.springframework.boot' version '2.7.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id "org.asciidoctor.jvm.convert" version "3.3.2" // 1. AsciiDoc문서를 생성하는 Asciidoctor 사용할 플러그인 추가
id 'java'
}
group = 'com.codestates'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
// 2. ext 변수의 set()메서드를 사용해서 API 문서 스니핏이 생성될 경로 지정
ext {
set('snippetsDir', file("build/generated-snippets"))
}
// 3. AsciiDoctor에서 사용되는 의존 그룹 지정
// .:asciidoctor task 실행시 내부적으로 아래 그룹으로 지정된다.
configurations {
asciidoctorExtensions
}
dependencies {
// 4. spring-restdocs-core, spring-restdocs-mockmvc 의존 라이브러리 추가
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
// 5. asciidoctorExtensions 그룹에 의존 라이브러리 포함
asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.mapstruct:mapstruct:1.5.1.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.1.Final'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'com.google.code.gson:gson'
}
// 6. ;test task 실행 시, API 문서 생성 스니핏 경로 설정
tasks.named('test') {
outputs.dir snippetsDir
useJUnitPlatform()
}
// (7) :asciidoctor task 실행 시, Asciidoctor 기능을 사용하기 위해
// :asciidoctor task에 asciidoctorExtensions 을 설정
tasks.named('asciidoctor') {
configurations "asciidoctorExtensions"
inputs.dir snippetsDir
dependsOn test
}
// (8):build task 실행 전에 실행되는 task :copyDocument task가 수행되면
// index.html 파일이 src/main/resources/static/docs 에 copy 되며,
// copy된 index.html 파일은 API 문서를 파일 형태로 외부에 제공
task copyDocument(type: Copy) {
dependsOn asciidoctor // (8-1) :asciidoctor task가 실행된 후에 task가 실행 되도록 의존성을 설정
from file("${asciidoctor.outputDir}") // (8-2) 경로에 생성되는 index.html을 copy
into file("src/main/resources/static/docs") // (8-3) 경로로 index.html을 추가
}
build {
dependsOn copyDocument // :build task가 실행되기 전에 :copyDocument task가 먼저 수행
}
// (10) 애플리케이션 실행 파일이 생성하는 :bootJar task 설정
bootJar {
dependsOn copyDocument // (10-1) :bootJar task 실행 전에 :copyDocument task가 실행 되도록 의존성을 설정
from ("${asciidoctor.outputDir}") { // (10-2) Asciidoctor 실행으로 생성되는 index.html 파일을 jar 파일 안에 추가
// jar 파일에 index.html을 추가해 줌으로써 웹 브라우저에서 접속
into 'static/docs' // (10-3)
}
}
@WebMvcTest ( MemberControler.class )
- Controller 테스트 전용 애너테이션
- 괄호안에 테스트 대상 Controller 지정
@MockBean(JpaMetamodelMappingContext.class)
- JPA에서 사용하는 Bean들을 mock 객체에 주입
- Application 클래스를 찾아서 실행하는데, @EnableJpaAuditing 애너테이션 추가
@AutoConfigureRestDocs
- Spring Rest Docs에 대한 자동구성
반응형
'IT 정보 > Spring' 카테고리의 다른 글
[인증/보안] 보안파트 애너테이션 (4) | 2022.07.28 |
---|---|
[인증/보안] HTTP + 보안(Secure) (10) | 2022.07.21 |
[Spring] 스프링 MVC 정리 (1) (10) | 2022.07.16 |
[Test] Mockito (14) | 2022.07.14 |
[Test] TDD (Test-Driven Development) (12) | 2022.07.14 |