SlideShare ist ein Scribd-Unternehmen logo
1 von 22
RESTful API 문서화
Spring REST Docs
made by jylee 1
이해와 따라 하기
made by jylee 2
API와 API문서화
다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세
• API
제공하는 API 서비스의 로직을 문서로 기술하는 것
• API 문서화
made by jylee 3
API와 API문서화
made by jylee 4
API문서화 툴
Wiki
made by jylee 5
API문서화 툴
• 주석을 통한 문서화
• 아직 테스트가 필요한 단계
made by jylee 6
API문서화 툴
• JSON 파싱을 통한 문서화
• Node.js 와 Redis 설치 필요
made by jylee 7
API문서화 툴
made by jylee 8
API문서화 툴
• Annotation을 사용한 문서화
• 개발 기능과 문서와의 싱크 ↑
• 그러나 복잡해지는 소스코드
made by jylee 9
API문서화 툴
• Annotation을 사용한 문서화
• 개발 기능과 문서와의 싱크 ↑
• 그러나 복잡해지는 소스코드
made by jylee 10
Spring REST Docs?
We made tool
Spring REST Docs
made by jylee 11
Spring REST Docs?
+
@Test
Mock Test
+
made by jylee 12
Spring REST Docs?
=
made by jylee 13
API-Guide.adoc
include
maven-resources-plugin
API-Guide.html*documentation.java
@Test
//단위테스트
document(“index”)
Snippets
Spring REST Docs!
~asciiDotor~
made by jylee 14
REST Docs 시작하기 - 설정
1. Spring Starter Project로 새로운 Spring 프로젝트를 생성
- STS : 우클릭/new/Spring Starter Project
2-1. Spring Boot로 생성시 REST Docs 체크
2-2. pom.xml에서 Maven dependency 추가 설정 (RESTDocs)
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<version>1.0.1.RELEASE</version>
<scope>test</scope>
</dependency>
made by jylee 15
REST Docs 시작하기 - 설정
3. pom.xml 파일에서 snippetsDirectory 설정
- 프로젝트가 빌드되는 곳(target)에 디렉토리 생성
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
<snippetsDirectory>
${project.build.directory}/generated-snippets
</snippetsDirectory>
<spring-restdocs.version>
1.1.0.BUILD-SNAPSHOT
</spring-restdocs.version>
</properties>
made by jylee 16
REST Docs 시작하기 - 설정
4. pom.xml 파일에서 plugin 설정
4-1. maven-surefire-plugin 설정
- surefire 플러그인은 단위테스트를 위한 플러그인
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Documentation.java</include>
</includes>
</configuration>
</plugin>
made by jylee 17
REST Docs 시작하기 - 설정
4. pom.xml 파일에서 plugin 설정
4-2. asciidoctor-maven-plugin 설정
- asciiodctor 문법을 사용하기 위한 plugin 설정
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.3</version>
<executions><execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals><goal>process-asciidoc</goal></goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
<attributes>
<snippets>${project.build.directory}/generated-snippets</snippets>
</attributes>
</configuration>
</execution></executions>
</plugin>
made by jylee 18
REST Docs 시작하기 - 설정
4. pom.xml 파일에서 plugin 설정
4-3. maven-resources-plugin 설정
- Asciidoctor플러그인 후에 동작되어야 함
- phase(prepare-package)에 묶임
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<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>
made by jylee 19
REST Docs 시작하기 - MockMVC
1. *documentation.java 파일을 생성
2. 단위 테스트 작성
@Test
public void test() throws Exception{
//해당 url을 실행
this.mockMvc.perform(get("/member/").accept(MediaType.APPLICATION_JSON))
//응답 성공을 가정
.andExpect(status().isOk())
//설정한 output 디렉토리 하위에 index 디렉토리를 생성 후 snippets를 생성
.andDo(document("index"));
}
made by jylee 20
REST Docs 시작하기 – 프로젝트 빌드
1. Target/generated-snippets/ 하위 루트에
작성한 MockMVC에서 작성한 document의 파라미터 확인
.andDo(document("index"));
made by jylee 21
REST Docs 시작하기 – asciidoc 작성
1. Src/main/asciidoc 하위 폴더에 api-guide.adoc 생성
2. Asciidoc 레퍼런스 문서를 참고하여 작성
- http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/
3. 생성된 Target/generated-snippets/ 하위 루트의 내용을 include
4. 프로젝트 재 시작 후 http://localhost:8080/docs/api-guide.html URL 실행
==== 응답 예제
include::{snippets}/index/http-response.adoc[]
made by jylee 22
참고 사이트
http://millky.com/@origoni/post/1155?language=ko_kr
http://kimseunghyun76.tistory.com/389
http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/
http://www.slideshare.net/OrdinaORAJ/spring-rest-docs-documenting-restful-apis-using-your-tests-devoxx

Weitere ähnliche Inhalte

Was ist angesagt?

SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기Myung Woon Oh
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트Keesun Baik
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with SpringKeesun Baik
 
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java ProjectJi-Woong Choi
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기flashscope
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs PrerenderChangwan Jun
 
생활 코딩 #1(Simple Web Scraping with Python #1)
생활 코딩 #1(Simple Web Scraping with Python #1)생활 코딩 #1(Simple Web Scraping with Python #1)
생활 코딩 #1(Simple Web Scraping with Python #1)SeungYong Baek
 
Collaboration with Eclipse final
Collaboration with Eclipse finalCollaboration with Eclipse final
Collaboration with Eclipse finalKenu, GwangNam Heo
 

Was ist angesagt? (20)

SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
How to Grunt.js
How to Grunt.jsHow to Grunt.js
How to Grunt.js
 
Spring boot
Spring bootSpring boot
Spring boot
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs Prerender
 
생활 코딩 #1(Simple Web Scraping with Python #1)
생활 코딩 #1(Simple Web Scraping with Python #1)생활 코딩 #1(Simple Web Scraping with Python #1)
생활 코딩 #1(Simple Web Scraping with Python #1)
 
Collaboration with Eclipse final
Collaboration with Eclipse finalCollaboration with Eclipse final
Collaboration with Eclipse final
 

Andere mochten auch

Spring rest-doc-2015-11
Spring rest-doc-2015-11Spring rest-doc-2015-11
Spring rest-doc-2015-11Eric Ahn
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까Sunghyun Roh
 
Restful web service
Restful web serviceRestful web service
Restful web servicesunguen lee
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batchSunghyun Roh
 
Making your API easy to document with Spring REST Docs
Making your API easy to document with Spring REST DocsMaking your API easy to document with Spring REST Docs
Making your API easy to document with Spring REST DocsNAVER / MusicPlatform
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVCRichard Paul
 
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS동수 장
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 
Ahea Study reactive programming
Ahea Study reactive programming Ahea Study reactive programming
Ahea Study reactive programming Sunghyun Roh
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
Cara menyisipkan file dari slideshere ke dalam blog
Cara menyisipkan file dari slideshere ke dalam blogCara menyisipkan file dari slideshere ke dalam blog
Cara menyisipkan file dari slideshere ke dalam blogsembiring969696
 
Continues delivery - Introduction
Continues delivery - IntroductionContinues delivery - Introduction
Continues delivery - IntroductionErez Attar
 
Research Advance04032016
Research Advance04032016Research Advance04032016
Research Advance04032016Zhongliang Zhou
 
Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...
Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...
Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...satriyo wibowo
 

Andere mochten auch (20)

Spring rest-doc-2015-11
Spring rest-doc-2015-11Spring rest-doc-2015-11
Spring rest-doc-2015-11
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
 
DevOps
DevOpsDevOps
DevOps
 
Restful web service
Restful web serviceRestful web service
Restful web service
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batch
 
Making your API easy to document with Spring REST Docs
Making your API easy to document with Spring REST DocsMaking your API easy to document with Spring REST Docs
Making your API easy to document with Spring REST Docs
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
Ahea Study reactive programming
Ahea Study reactive programming Ahea Study reactive programming
Ahea Study reactive programming
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Test pptpdf
Test pptpdfTest pptpdf
Test pptpdf
 
Elasticityprepwalk
ElasticityprepwalkElasticityprepwalk
Elasticityprepwalk
 
Cara menyisipkan file dari slideshere ke dalam blog
Cara menyisipkan file dari slideshere ke dalam blogCara menyisipkan file dari slideshere ke dalam blog
Cara menyisipkan file dari slideshere ke dalam blog
 
Continues delivery - Introduction
Continues delivery - IntroductionContinues delivery - Introduction
Continues delivery - Introduction
 
Research Advance04032016
Research Advance04032016Research Advance04032016
Research Advance04032016
 
Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...
Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...
Holistic Marketing Framework "sinarmas land" (Presentation Strategy Marketing...
 
Evaluation question 1
Evaluation question 1Evaluation question 1
Evaluation question 1
 
GEDONG SANGA Temples
GEDONG SANGA TemplesGEDONG SANGA Temples
GEDONG SANGA Temples
 
Taller 4
Taller 4Taller 4
Taller 4
 

Ähnlich wie Spring rest doc

20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍ymtech
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf정민 안
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxssuser2601f7
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기KTH, 케이티하이텔
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 ChefOpen Source Consulting
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptxssuserf875e6
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
Jurano강의 lec1. AndroidAnnotations 시작하기
Jurano강의 lec1. AndroidAnnotations 시작하기Jurano강의 lec1. AndroidAnnotations 시작하기
Jurano강의 lec1. AndroidAnnotations 시작하기Ju-ri Seo
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
regular.express 발표자료
regular.express 발표자료regular.express 발표자료
regular.express 발표자료bdh92123
 
Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5Jonathan Jeon
 
Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기
Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기
Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기은지 김
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdfssuserb942d2
 

Ähnlich wie Spring rest doc (20)

20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
DevOps Study
DevOps StudyDevOps Study
DevOps Study
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
okspring3x
okspring3xokspring3x
okspring3x
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
Jurano강의 lec1. AndroidAnnotations 시작하기
Jurano강의 lec1. AndroidAnnotations 시작하기Jurano강의 lec1. AndroidAnnotations 시작하기
Jurano강의 lec1. AndroidAnnotations 시작하기
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
regular.express 발표자료
regular.express 발표자료regular.express 발표자료
regular.express 발표자료
 
Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5
 
Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기
Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기
Node.js 와 Mongo DB로 만든 앱 Azure에 배포하기
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 

Spring rest doc

  • 1. RESTful API 문서화 Spring REST Docs made by jylee 1 이해와 따라 하기
  • 2. made by jylee 2 API와 API문서화 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세 • API 제공하는 API 서비스의 로직을 문서로 기술하는 것 • API 문서화
  • 3. made by jylee 3 API와 API문서화
  • 4. made by jylee 4 API문서화 툴 Wiki
  • 5. made by jylee 5 API문서화 툴 • 주석을 통한 문서화 • 아직 테스트가 필요한 단계
  • 6. made by jylee 6 API문서화 툴 • JSON 파싱을 통한 문서화 • Node.js 와 Redis 설치 필요
  • 7. made by jylee 7 API문서화 툴
  • 8. made by jylee 8 API문서화 툴 • Annotation을 사용한 문서화 • 개발 기능과 문서와의 싱크 ↑ • 그러나 복잡해지는 소스코드
  • 9. made by jylee 9 API문서화 툴 • Annotation을 사용한 문서화 • 개발 기능과 문서와의 싱크 ↑ • 그러나 복잡해지는 소스코드
  • 10. made by jylee 10 Spring REST Docs? We made tool Spring REST Docs
  • 11. made by jylee 11 Spring REST Docs? + @Test Mock Test +
  • 12. made by jylee 12 Spring REST Docs? =
  • 13. made by jylee 13 API-Guide.adoc include maven-resources-plugin API-Guide.html*documentation.java @Test //단위테스트 document(“index”) Snippets Spring REST Docs! ~asciiDotor~
  • 14. made by jylee 14 REST Docs 시작하기 - 설정 1. Spring Starter Project로 새로운 Spring 프로젝트를 생성 - STS : 우클릭/new/Spring Starter Project 2-1. Spring Boot로 생성시 REST Docs 체크 2-2. pom.xml에서 Maven dependency 추가 설정 (RESTDocs) <dependency> <groupId>org.springframework.restdocs</groupId> <artifactId>spring-restdocs-mockmvc</artifactId> <version>1.0.1.RELEASE</version> <scope>test</scope> </dependency>
  • 15. made by jylee 15 REST Docs 시작하기 - 설정 3. pom.xml 파일에서 snippetsDirectory 설정 - 프로젝트가 빌드되는 곳(target)에 디렉토리 생성 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version> <snippetsDirectory> ${project.build.directory}/generated-snippets </snippetsDirectory> <spring-restdocs.version> 1.1.0.BUILD-SNAPSHOT </spring-restdocs.version> </properties>
  • 16. made by jylee 16 REST Docs 시작하기 - 설정 4. pom.xml 파일에서 plugin 설정 4-1. maven-surefire-plugin 설정 - surefire 플러그인은 단위테스트를 위한 플러그인 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Documentation.java</include> </includes> </configuration> </plugin>
  • 17. made by jylee 17 REST Docs 시작하기 - 설정 4. pom.xml 파일에서 plugin 설정 4-2. asciidoctor-maven-plugin 설정 - asciiodctor 문법을 사용하기 위한 plugin 설정 <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>1.5.3</version> <executions><execution> <id>generate-docs</id> <phase>prepare-package</phase> <goals><goal>process-asciidoc</goal></goals> <configuration> <backend>html</backend> <doctype>book</doctype> <attributes> <snippets>${project.build.directory}/generated-snippets</snippets> </attributes> </configuration> </execution></executions> </plugin>
  • 18. made by jylee 18 REST Docs 시작하기 - 설정 4. pom.xml 파일에서 plugin 설정 4-3. maven-resources-plugin 설정 - Asciidoctor플러그인 후에 동작되어야 함 - phase(prepare-package)에 묶임 <plugin> <groupId>org.apache.maven.plugins</groupId> <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>
  • 19. made by jylee 19 REST Docs 시작하기 - MockMVC 1. *documentation.java 파일을 생성 2. 단위 테스트 작성 @Test public void test() throws Exception{ //해당 url을 실행 this.mockMvc.perform(get("/member/").accept(MediaType.APPLICATION_JSON)) //응답 성공을 가정 .andExpect(status().isOk()) //설정한 output 디렉토리 하위에 index 디렉토리를 생성 후 snippets를 생성 .andDo(document("index")); }
  • 20. made by jylee 20 REST Docs 시작하기 – 프로젝트 빌드 1. Target/generated-snippets/ 하위 루트에 작성한 MockMVC에서 작성한 document의 파라미터 확인 .andDo(document("index"));
  • 21. made by jylee 21 REST Docs 시작하기 – asciidoc 작성 1. Src/main/asciidoc 하위 폴더에 api-guide.adoc 생성 2. Asciidoc 레퍼런스 문서를 참고하여 작성 - http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/ 3. 생성된 Target/generated-snippets/ 하위 루트의 내용을 include 4. 프로젝트 재 시작 후 http://localhost:8080/docs/api-guide.html URL 실행 ==== 응답 예제 include::{snippets}/index/http-response.adoc[]
  • 22. made by jylee 22 참고 사이트 http://millky.com/@origoni/post/1155?language=ko_kr http://kimseunghyun76.tistory.com/389 http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/ http://www.slideshare.net/OrdinaORAJ/spring-rest-docs-documenting-restful-apis-using-your-tests-devoxx

Hinweis der Redaktion

  1. 안녕하세요 플랫폼서비스개발2팀의 이주연입니다. 오늘은 spring rest docs에 대해 발표하겠습니다
  2. Api는 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세이며 Api 문서화는 그 api의 로직을 문서로 기록하는 것입니다
  3. 쉽게 이런 문서들이 api 문서입니다.
  4. Api문서화 툴로는 에이피아이독,아이오독,스웨거,위키가 있지만 위키는 엄연히 api문서화를 위한 툴이 아니니 논외로 하겠습니다.
  5. 에이피아이독은 코드 주석으로 api를 작성하는 도구로 각 언어의 주석 스타일을 바탕으로 작성이 가능합니다. 그러나 손수 주석을 작성해야 하며, 개발자마다 주석 스타일이 다르고 상용화된 지 오래 되지 않은 툴로 사용자가 적어 정보를 얻기도 힘들며 아직까지 이슈사항이 생기는 것으로 보아 조금 더 테스트가 필요한 단계인 것 같습니다.
  6. 아이오 독은 Json으로 api를 기술해주는 기술로 이렇게 손수 일일이 작성해주어야 합니다.
  7. node.js와 레디스 서버를 필요로 하기때문에 node.js와 레디스 서버를 이미 설치해서 사용한다면 모를까 문서화 작업 때문에 설치하기엔 조금 부담이 있습니다.
  8. 스웨거는 어노테이션을 기반으로 한 문서화이기 때문에 개발 코드에 어노테이션을 추가하여 문서화를 진행합니다. 그렇기 때문에 개발 기능과 문서와의 싱크가 어느정도 맞으나 소스코드는 이렇게 복잡해집니다.
  9. 때때로 복잡한 기능의 api를 구현하기 위해 현재 개발 코드가 아닌 다른 코드에 작업이 필요해진다면 문서화를 위한 작업으로는 너무 많은 양의 작업이 필요해집니다.
  10. 이렇다 할 API 문서 툴이 없는 상황에서 스프링이 내놓은 툴이 spring rest docs입니다.
  11. Spring rest docs은 아스키닥터의 문법과 단위테스트를 사용하여 api 문서화를 도와주는 도구입니다.
  12. Spring rest docs를 사용하여 api를 문서화하면 최종적으로 이런 화면을 보여주게 됩니다. 기존에 사용하던 위키 api와 비슷한 형태입니다.
  13. spring rest docs의 설정에 대해 전체적인 이해를 돕기 위한 그림입니다. 각각의 3개의 파일이 있습니다. 도큐멘테이션자바파일에서 단위테스트를 하고 그에 대한 결과를 snippets으로 생성합니다. 아스키닥터 문법을 사용하여 작성한 api 문서에 생성한 snippets을 필요한 부분에 인쿠르드시켜줍니다. 그리고 프로젝트 빌드를 하게 되면 메이븐 리소스 플러그인의 설정으로 html이 생성되고 매핑이 됩니다.
  14. 그럼 spring rest docs을 시작하기에 앞서 샘플에 대한 설정부분은 모두 스프링 공식사이트의 spring data rest sample을 참고하였습니다. spring project으로 시작할 때는 rest Docs에 체크하고 maven project로 시작할 때는 pom.xml에서 rest doc에 대한 디펜던시를 추가 설정해줍니다.
  15. 다음으로 Pom.xml 파일에서 snippetsDirectory를 설정합니다. 이 설정은 발생한 snippets에 대한 output 위치를 표시하는 프로퍼티로 설정한 디렉토리 하위에 조각들이 생성됩니다. 현재는 타겟 하위의 generated-snippets 디렉토리가 snippets디렉토리입니다.
  16. 다음으로 pom.xml에서 plugin을 설정합니다. Surefire 플러그인은 단위테스트를 위한 플러그인으로 해당 설정에서는 documentation.java파일을 단위테스트에 포함시킨다는 설정입니다.
  17. 다음으로 아스키닥터 플러그인에 대한 설정입니다. 앞서 말씀드린 듯 spring rest doc은 아스키닥터의 문법을 사용하기 때문에 해당 플러그인을 설정해주어야 하며 Api문서를 작성할 때 snippets을 인용하기 때문에 Snippets 태그로 이전에 설정한 snippetsDirectory를 설정해 주어야합니다.
  18. 다음으로는 리소스 플러그인에 대한 설정입니다. 해당 플러그인은 디렉토리 태그로 설정된 대상을 아웃풋디렉토리 태그로 설정된 대상에 리소스를 복사합니다. 이 설정으로 아스키문법을 사용하여 만든 문서가 html로 변환이 되고 static/docs으로 카피 되어 자동으로 맵핑됩니다. 주의할 점은 리소스 플러그인에 대한 설정은 아스키닥터 플러그인이 설정된 후에 설정이 되어야 합니다.
  19. 기능을 만든 후 이전에 단위테스트에 포함시키기로 했던 documentatio자바 파일을 생성하고 단위테스트를 작성합니다. 작성 후 프로젝트를 빌드하면
  20. 지정해준 snippets 디렉토리에 파일들이 생성된 것을 확인할 수 있습니다.
  21. 그 생성된 파일들을 인쿠르드하여 아스키닥터 문법으로 문서를 작성하면 됩니다.