Spring Rest Docs๋ฅผ ๊ฒ์ํ์ ๋, Maven์ ๋์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ pom.xml ์ค๋ช ์ด ๋ถ์กฑํ๋ค๊ณ ๋๊ผ์ต๋๋ค.
๊ทธ๋์ ์ด๋ฒ ๊ธ์์๋ Spring Boot์ Maven(3.9.9 ๋ฒ์ ) ํ๊ฒฝ์์ Spring Rest Docs๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ pom.xml ์ค์ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๊ณ , ๊ทธ ๊ณผ์ ์์ Maven ์ ๋ฌธ๋ฒ๋ ํจ๊ป ํ์ตํด๋ณด๋ ค ํฉ๋๋ค. ๋ํ, pom.xml ์ค์ ๊ฐ๋ค์ด Asciidoctor์ Maven ์ค ๋๊ตฌ์ ์ค์ ๊ฐ์ธ์ง ์ดํดํ๋ ๊ฒ์ด ์ด ๊ธ์ ๋ชฉํ์
๋๋ค.
๋ํ, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ์ฒ๋ผ *.adoc ํ์ผ์ HTML๋ก ๋ณํํ์ฌ .jar ํ์ผ์ ํฌํจ์ํค๊ณ , *.adoc ํ์ผ์ ๋๋ฉ์ธ๋ณ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๋๋์ด ๊ด๋ฆฌํ๋ ๋ฐฉ์๋ ํจ๊ป ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
1. Spring Rest Docs 3.0.3 ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ์ํ ํ์ ์กฐ๊ฑด
- Java 17
- Spring Framework 6
2. ์์กด์ฑ(dependency) ๋ฐ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
Spring Rest Docs๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด, Maven์ pom.xml, Gradle์ build.gradle ํ์ผ์ Build Configuration์ ๋์จ ๋น๋ ์ค์ ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํฉ๋๋ค.
Maven์ ๊ฒฝ์ฐ, {project-version}์ ์ฌ์ฉํ Rest Docs์ ๋ฒ์ ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ Rest Docs์ ๋ฒ์ ์ผ๋ก 3.0.3์ ์ฌ์ฉํ ์์ ์ด๋ฏ๋ก, {project-version} ์๋ฆฌ์ 3.0.3์ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
3. Rest Docs๋ก ๋ง๋ API ๋ฌธ์๋ฅผ .Jar ์ ํจํค์งํ๊ธฐ
ํ๋ก์ ํธ์์ Rest Docs๋ฅผ ์ด์ฉํด API ๋ฌธ์๋ฅผ ๋ง๋ค์๋ค๋ฉด, ์ด์ ์ด ๋ฌธ์๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ ๋ณผ ์ ์๋๋ก ๋ฐฐํฌํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ Rest Docs์์๋ "Packaging the Documentation"์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
Rest Docs๋ ๋น๋ ์ API ๋ฌธ์๋ฅผ /static/docs ๊ฒฝ๋ก์ ํฌํจํ์ฌ .jar ํ์ผ ์์ ์๋์ผ๋ก ๋ฌธ์๋ฅผ ๋ฃ์ด์ค๋๋ค. ์ด ๋๋ถ์ ์ฐ๋ฆฌ๋ HTML ํ์ผ์ ๋ฐ๋ก ์์ฑํ๊ฑฐ๋ ๋ณต์ฌํ ํ์ ์์ด, .jar ํ์ผ๋ง ๋ฐฐํฌํ๋ฉด ํธ๋ฆฌํ๊ฒ ๋ฌธ์๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
{IP์ฃผ์:ํฌํธ๋ฒํธ}/docs/index.html๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
Rest Docs ๊ณต์ ๋ฌธ์์ "Packaging the Documentation" ์น์ ์์ ๋์ค๋ Maven ์ค์ ์ค 3๋ฒ ํญ๋ชฉ์ธ <outputDirectory>๋ ๋ณํ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ ์์น๋ฅผ ์ง์ ํ๋ ํ๊ทธ์ ๋๋ค.
์ด <outputDirectory>๋ Asciidoctor ํ๋ฌ๊ทธ์ธ๊ณผ Maven ๋ฆฌ์์ค ํ๋ฌ๊ทธ์ธ ๋ ๋ค์์ ์ฌ์ฉ๋๋ ํ๊ทธ ์ด๋ฆ์ด๊ธฐ ๋๋ฌธ์, "๋๊ตฌ์ ์ค์ ์ธ์ง"๋ ํด๋น ํ๊ทธ๊ฐ ์ด๋ค <plugin> ๋ธ๋ก ์์ ์๋์ง๋ฅผ ๋ณด๊ณ ํ๋จํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด <plugin>์ด maven-resources-plugin์ด๋ผ๋ฉด, ์ด <outputDirectory>๋ Maven์ ํ๊ทธ์ด๋ฉฐ, asciidoctor-maven-plugin์ด๋ผ๋ฉด Asciidoctor์ ํ๊ทธ์ ๋๋ค. ์ฌ๊ธฐ์๋ <plugin>์ด maven-resources-plugin ์ด๊ธฐ ๋๋ฌธ์ Maven ํ๊ทธ์ ๋๋ค.
<plugin>
<artifactId>maven-resources-plugin</artifactId>
...
<configuration>
<outputDirectory>${project.build.outputDirectory}/static/docs</outputDirectory>
</configuration>
</plugin>
๊ทธ๋ฆฌ๊ณ maven-resources-plugin์ src/main/resources/**์ ๊ฐ์ ์ ์ ๋ฆฌ์์ค ํ์ผ๋ค์ .jar์ ํฌํจ์ํค๋ ์ญํ ์ ํฉ๋๋ค.
์ด ์ค์ ์์ ์ฌ์ฉ๋ ${project.build.outputDirectory}๋ Maven์ ์์ฑ์ผ๋ก, ์ปดํ์ผ๋ ํด๋์ค ํ์ผ๋ค์ด ์ ์ฅ๋๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํฉ๋๋ค. ํด๋น ์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ target/classes ์ ๋๋ค.
* Maven์์ ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ฃผ์ ๊ธฐ๋ณธ๊ฐ์ target์ด๋ฉฐ, Gradle์ ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ฃผ์ ๊ธฐ๋ณธ๊ฐ์ด build ์ ๋๋ค.
Maven ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ฉด, src/main/java์ ์๋ .java ํ์ผ๋ค์ .class ํ์ผ๋ก ์ปดํ์ผ๋์ด target/classes ํ์์ ์ ์ฅ๋ฉ๋๋ค. ์ด ์ปดํ์ผ๋ ๊ฒฐ๊ณผ๋ฌผ๋ค์ ๊ธฐ๋ฐ์ผ๋ก .jar ํ์ผ์ด ๋ง๋ค์ด์ง๊ณ , ์ฐ๋ฆฌ๋ ์ด .jar๋ฅผ ์คํํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ API๋ฌธ์ ์ญ์ target/classes ํ์์ ์์น์ํต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ด ์ค์ ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<outputDirectory>
${project.build.outputDirectory}/static/docs
</outputDirectory>
HTML๋ก ๋ณํ๋ API ๋ฌธ์๋ฅผ target/classes/static/docs ๊ฒฝ๋ก์ ์ ์ฅํ๊ณ , .jar ํ์ผ ๋ด์ ํด๋น ๊ฒฝ๋ก๋ก ํฌํจ์์ผ, /docs/index.html ๊ฒฝ๋ก๋ก ๋ฌธ์์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
์ถ๊ฐ๋ก asciidoctor-maven-plugin ์ค์ ์์ ๋ฑ์ฅํ๋ <backend>, <doctype>, <goals> ๊ฐ์ ํ๊ทธ๋ค์ ์๋ฏธ๊ฐ ๊ถ๊ธํ๋ค๋ฉด, Asciidoctor ๊ณต์ ๋ฌธ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด๋ณด์ธ์. Ctrl+F ๋ฅผ ํตํด ์ํ์๋ ํ๊ทธ์ ์ค๋ช ์ ์ฐพ์ผ์๋ฉด ๋ฉ๋๋ค.
์ง๊ธ๊น์ง์ ์ค์ ์ ํตํด ์๋์ ๊ฐ์ pom.xml ๊ตฌ์ฑ์ด ์์ฑ๋ฉ๋๋ค.
์ด ์ํ๋ง์ผ๋ก๋ .jar ํ์ผ์ API ๋ฌธ์๊ฐ ํฌํจ๋๋ฏ๋ก, Rest Docs๋ฅผ ๋ฐฐํฌ ๊ฐ๋ฅํ ํํ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- API document -->
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html5</backend>
<doctype>book</doctype>
</configuration>
</execution>
</executions>
<dependencies>
...
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-asciidoctor</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.outputDirectory}/static/docs
</outputDirectory>
<resources>
<resource>
<directory>
${project.build.directory}/generated-docs
</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4. ๋๋ฉ์ธ๋ณ๋ก *.adoc ํ์ผ ๋๋ ์ ๊ด๋ฆฌํ๊ธฐ
๋ ๋์๊ฐ์ ๋๋ฉ์ธ ๋ณ๋ก *.adoc ํ์ผ๋ค์ ๋๋ ์ ๊ด๋ฆฌํ๊ณ ์ ํฉ๋๋ค.
Maven์ src/main/asciidoc ํ์์ .adoc ํ์ผ์ ๋๋ ๋ฐ๋ฉด, Gradle์ src/docs/asciidoc์ฒ๋ผ main๊ณผ๋ ๋๋ํ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฐ ์ฐจ์ด๋ ์๋ ์ฌ์ง์ฒ๋ผ Spring Rest Docs ๊ณต์ ๋ฌธ์์์ ๋น๋ ํด๋ณ๋ก .adoc ํ์ผ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ช ์ํด๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋๋ ๋๋ฉ์ธ ๋ณ๋ก ์์ฑํ *.adoc ํ์ผ์ index.adoc์ include:: ๋ฌธ๋ฒ์ผ๋ก ํฌํจ์ํค๋ ์์์ ๋๋ค.
= ๊ฒ์ํ API ๋ฌธ์
:doctype: book
:icons: font
:source-highlighter: highlightjs
:toc: left
:toclevels: 2
:sectlinks:
== ๊ด๋ฆฌ์ API
include::admin/admin.adoc[]
== ๋๊ธ API
include::comment/comment.adoc[]
== ๊ฒ์๊ธ API
include::post/post.adoc[]
== ํ์ API
include::user/user.adoc[]
๋๋ฉ์ธ๋ณ๋ก ๋๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ๊ฒฐ๊ณผ๋ฌผ(target/generated-docs)์ ๋ฐ์ํ๊ณ ์ถ๋ค๋ฉด, <preserveDirectories> ํ๊ทธ๋ฅผ true๋ก ์ค์ ํด์ค๋๋ค.
<configuration>
<backend>html5</backend>
<doctype>book</doctype>
<!-- ์ถ๊ฐ! -->
<preserveDirectories>true</preserveDirectories> <!-- ํด๋น ํ๊ทธ๋ฅผ ์๋ตํ๋ฉด ๊ธฐ๋ณธ๊ฐ false ์ ์ฉ -->
</configuration>
๋ค๋ง, ์ ๋ ๋๋ฉ์ธ๋ณ๋ก ๊ฐ๊ฐ HTML ํ์ผ์ ์์ฑํ ํ์๊ฐ ์๋ค๊ณ ํ๋จํ์ต๋๋ค. ๊ฒฐ๊ตญ ์ฌ์ฉ์ ์ ์ฅ์์๋ ํ๋์ ๋ฌธ์๋ง ๋ณด๋ฉด ๋๊ธฐ ๋๋ฌธ์, index.adoc๋ง index.html๋ก ๋ณํ๋๋ฉด ์ถฉ๋ถํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
๊ทธ๋์ <sourceDocumentName> ํ๊ทธ๋ฅผ ํ์ฉํด ๋ณํํ ๋์์ index.adoc ํ๋๋ก ๋ช
์ํ์ต๋๋ค.
Asciidoctor์์ sourceDocumentName์ ๊ธฐ๋ณธ์ ์ผ๋ก sourceDirectory ๋ด์ ๋ชจ๋ .adoc ํ์ผ์ ์ฒ๋ฆฌํ์ง๋ง,
์ด ๊ฐ์ ์ค์ ํ๋ฉด ํด๋น ํ์ผ ํ๋๋ง ์ฒ๋ฆฌ ๋์์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
<sourceDocumentName> : ๊ธฐ๋ณธ๊ฐ์ ${sourceDirectory}์ ๋ชจ๋ ํ์ผ์ ๋๋ค. ${sourceDirectory}๋ asciidoctor ์ <sourceDirectory>ํ๊ทธ๋ฅผ ์๋ฏธํฉ๋๋ค
<sourceDirectory> : ์์ค ํ์ผ์ด ์์นํ ๊ฒฝ๋ก์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ๊ฒฝ๋ก๋ค์ ์์๋๋ก ํ์ธํฉ๋๋ค.
${basedir}/src/docs/asciidoc, ${basedir}/src/asciidoc, ${basedir}/src/main/asciidoc
Spring Rest Docs๋ ์ด ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก, *.adoc ํ์ผ๋ค์ ์ ๋๋ ํ ๋ฆฌ์ ์์น์ํจ๋ค๋ฉด <sourceDirectory>๋ฅผ ๋ฐ๋ก ์ค์ ํ ํ์๋ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋์ ๊ฐ์ ์ค์ ๋ง ์ถ๊ฐํ๋ฉด, ์ ๊ฐ ์๋ํ ๋๋ก index.adoc๋ง index.html๋ก ๋ณํ๋ฉ๋๋ค.
<configuration>
<backend>html5</backend>
<doctype>book</doctype>
<!-- ์ถ๊ฐ! -->
<sourceDocumentName>index.adoc</sourceDocumentName>
</configuration>
๋ ๋ค์ํ Asciidoctor์ ํ๊ทธ๋ค์ด ๊ถ๊ธํ์๋ค๋ฉด Asciidoctor Docs๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ด ํ, ์ฌ ๋น๋ํ์ฌ ๋น๋๊ฐ ์๋ฃ๋๋ฉด target/generated-docs ๋๋ ํ ๋ฆฌ์ index.html ํ์ผ์ด ์์ฑ๋๊ณ , ๊ทธ ์ธ์ ๋๋ฉ์ธ ๋ณ๋ก ๊ตฌ์ฑ๋ ๋น ๋๋ ํ ๋ฆฌ๋ค๋ ํจ๊ป ์์ฑ๋ฉ๋๋ค.
(์ ๋ ๋๋ฉ์ธ ๋ณ ๋น์ด์๋ ๋๋ ํ ๋ฆฌ๋ค์ ์ ๊ฑฐํ๊ณ ์ถ์ด ์ฌ๋ฌ Asciidoctor ํ๊ทธ๋ค์ ์๋ํด๋ดค์ง๋ง, Gradle์์๋ ๊ฐ๋ฅํ๋ ๋ฐ๋ฉด Maven์์๋ ๋๋ ทํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ํน์ ์ด ๋ถ๋ถ์ ๋ํด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ณ ๊ณ์ ๋ถ์ด ์๋ค๋ฉด, ๋๊ธ๋ก ๊ณต์ ํด์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.)
๊ทธ๋ฆฌ๊ณ , target/generated-docs/index.html ํ์ผ์ ์ด์์ ๋ ๋ฌธ์๊ฐ ๊นจ์ง ์์ด ์ ์์ ์ผ๋ก ๋ณด์ธ๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค.
5. Windows ํ๊ฒฝ์์ ๊ฒฝ๋ก ๊ตฌ๋ถ ๋ฌธ์ ๋ก ๋ฐ์ํ๋ Unresolved directive ์ค๋ฅ ํด๊ฒฐํ๊ธฐ
Asciidoctor๋ ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ ๊ฒฝ๋ก ๊ตฌ๋ถ ๋ฐฉ์์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์, ํ์ผ ๊ฒฝ๋ก๋ฅผ /๋ก ๊ตฌ๋ถํฉ๋๋ค. ํ์ง๋ง Windows ํ๊ฒฝ์์๋ \๋ก ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ ๊ฒฝ๋ก ์ธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Unresolved directive in admin/admin.adoc - include::..\..\..\target\generated-snippets/admin
์ ์ญ์ ์ด ๋ฌธ์ ๋ก ์ธํด API ๋ฌธ์๊ฐ ์ ๋๋ก ์ถ๋ ฅ๋์ง ์๋ ์ํฉ์ ๊ฒช์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, Asciidoctor์ snippets ๊ฒฝ๋ก๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ๊ณ /๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ค์ ์ ์ถ๊ฐํ์ต๋๋ค.
<configuration>
<backend>html5</backend>
<doctype>book</doctype>
<sourceDocumentName>index.adoc</sourceDocumentName>
<!-- ์ถ๊ฐ! -->
<attributes>
<!-- snippet ์์ฑ ์์น -->
<snippets>${project.basedir}/target/generated-snippets</snippets>
</attributes>
</configuration>
${project.basedir} ์ ํ์ฌ ํ๋ก์ ํธ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ${ ... } ๊ฐ์ด Maven ์ POM ์์ฑ ๊ฐ์ Maven 3.9.9 ์์ "project" ๋ ๋ช ์นญ์ผ๋ก ์์ํฉ๋๋ค. POM ์์ฑ์ ๋ํด ๋ ์์๋ณด๊ณ ์ถ์ผ์ ๋ถ๋ค์ ์ํด ์ฐธ๊ณ ๋งํฌ ๊ฑธ์ด๋๊ฒ ์ต๋๋ค. Maven 3.9.9 - POM Reference
6. ๋ง์น๋ฉฐ
Spring Rest Docs๋ฅผ ๋์ ํ๋ฉด์ pom.xml์ ํ์ํ ์ค์ ๋ค์ ๊ตฌ์ฑํ๋ ๊ณผ์ ์์, Maven ๊ณต์ ๋ฌธ์์ Asciidoctor ๊ณต์ ๋ฌธ์๋ฅผ ์ง์ ์ฐธ๊ณ ํ๋ฉฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํดํด ๋๊ฐ์ต๋๋ค. ์ฒ์ Gradle๋ก Rest Docs๋ฅผ ์ฌ์ฉํ ๋๋ ๋น๋ ํด ๋ฌธ๋ฒ์ ๋ํ ์ดํด ์์ด
๊ทธ์ ์์ ๋ฅผ ๋ฐ๋ผ๊ฐ๊ธฐ์ ๋ฐ๋นด๊ณ , ์ค์ ์ด ์ ๊ทธ๋ฐ ๊ตฌ์กฐ๋ก ๋์ด ์๋์ง ๊น์ด ๊ณ ๋ฏผํ์ง ๋ชปํ์์ต๋๋ค.
ํ์ง๋ง Maven์ผ๋ก ๋ค์ Rest Docs๋ฅผ ๋์
ํ๋ฉด์, ๋น๋ ํด์ด ๋ฌ๋ผ์ก๋ค๋ ์ด์ ํ๋๋ง์ผ๋ก๋ ์์๋ณด๋ค ๋ง์ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช๊ฒ ๋์๊ณ , ๊ทธ ๊ณผ์ ์์ ์์ฐ์ค๋ฝ๊ฒ ๋น๋ ํด์ ๊ตฌ์กฐ์ ๋ฌธ๋ฒ์ ๊ณต๋ถํ๊ฒ ๋์์ต๋๋ค.
์ด ๊ฒฝํ์ ํตํด ํนํ ๋ค์๊ณผ ๊ฐ์ ์ ์ ๋ฐฐ์ธ ์ ์์์ต๋๋ค:
- pom.xml์ด๋ build.gradle์ ๋ค์ด๊ฐ๋ ์ค์ ๊ฐ๋ค ์ค ์ด๋ค ๊ฐ์ ํ๋ฌ๊ทธ์ธ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ผ ํ๊ณ , ์ด๋ค ๊ฐ์ ๋น๋ ํด(Maven/Gradle)์ ๋ฌธ์๋ฅผ ํ์ธํด์ผ ํ๋์ง๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ
- ${project.build.outputDirectory} ์ Maven ์์ฑ ๊ฐ์ ๊ณต์๋ฌธ์์์ ํ์ธํ๋ ๋ฐฉ๋ฒ
- jarํ์ผ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์ปดํ์ผ๋ .class ํ์ผ๊ณผ ๋ฆฌ์์ค ํ์ผ๋ค์ ์์ถํ ๊ฒ์ด๋ผ๋ ๊ฒ
์ด์ ์์ผ๋ก ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ๋๋ ํ์ํ ์ค์ ์ด ๋ฌด์์ธ์ง, ๋ ์ด๋ค ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ผ ํ๋์ง๋ฅผ ๋ณด๋ค ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ํ์ ํ ์ ์์ ๊ฑฐ๋ผ ๊ธฐ๋ํฉ๋๋ค.
์ฐธ๊ณ ๋งํฌ๋ก Maven์ pom.xml ์์ฑ ๋ฌธ์์ Asciidoctor์ Maven ์ค์ ๋ฌธ์๋ฅผ ํจ๊ป ์ ๋ฆฌํด๋์์ต๋๋ค.