본문으로 건너뛰기
Advertisement

실전 고수 팁 — Spring REST Docs 기반 API 명세 자동화

Swagger는 코드와 문서가 쉽게 어긋납니다. Spring REST DocsMockMvc 테스트가 통과할 때만 문서(스니펫)가 생성되므로, 테스트와 API 문서가 항상 동기화됩니다.

1. 의존성 설정

testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'

2. 테스트에서 문서 스니펫 생성

@WebMvcTest(UserController.class)
@AutoConfigureRestDocs(outputDir = "build/generated-snippets") // 스니펫 저장 경로
class UserControllerDocTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private UserService userService;

@Test
void 회원_조회_API_문서화() throws Exception {
given(userService.getUser(1L)).willReturn(new UserDto(1L, "홍길동", "hong@test.com"));

mockMvc.perform(get("/api/users/{id}", 1L)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(document("get-user", // 스니펫 폴더명
pathParameters(
parameterWithName("id").description("사용자 식별자")
),
responseFields(
fieldWithPath("id").description("사용자 ID"),
fieldWithPath("name").description("사용자 이름"),
fieldWithPath("email").description("이메일 주소")
)
));
}
}

테스트 실행 시 build/generated-snippets/get-user/ 하위에 http-request.adoc, http-response.adoc, path-parameters.adoc 등의 Asciidoc 스니펫 파일이 자동 생성됩니다.

3. API 문서 조립 (index.adoc)

= API 명세서
:toc: left

== 회원 API

=== 회원 단건 조회

==== HTTP 요청
include::{snippets}/get-user/http-request.adoc[]

==== 요청 파라미터
include::{snippets}/get-user/path-parameters.adoc[]

==== HTTP 응답
include::{snippets}/get-user/http-response.adoc[]

==== 응답 필드
include::{snippets}/get-user/response-fields.adoc[]

빌드 시 (./gradlew asciidoctor) 아름다운 HTML API 문서가 자동으로 생성되어 팀 전체와 공유할 수 있습니다.

Advertisement