SlideShare a Scribd company logo
1 of 33
Download to read offline
카피캣으로 시작하는 오픈소스
ash84
ash84
• Developer
• sh84.ahn@gmail.com
• ash84.net
• @sh84ahn
• github.com/AhnSeongHyun
2
이런 프로젝트를 하고 있습니다.
• Plate : API Documentation Tool based on markdown.
• https://github.com/Plate-Project/plate
• http://plate-project.github.io/
3
개발하게 된 계기
• 입사 3개월차(신입은 아님), 한창 의욕만 앞설 시기
• API 작업 전, 설계 초안 작업과 함께 API 문서화 툴 조사
• 결제 관련 API 사이트들을 주로 참고
4
more test
• Swagger
• http://petstore.swagger.io/
• I/O Docs
• https://github.com/mashery/iodocs
• http://blog.outsider.ne.kr/990
5
more doc
6
• Slate
• https://github.com/tripit/slate
• Atlassian/Confulence
Stripe API Docs
굳굳굳
• 기존방식 - *.docx, *.xlsx + sample code
• asp.net_example.zip, jsp_example.zip
• 업데이트가 쉽지 않다.
8
굳굳굳
• Stripe 같은 API 문서화 사이트를 이용하면..
• API 를 실제 코드와 함께 볼수 있다는 장점.
• API를 업데이트 하더라도, 좀 더 쉽게 문서와 코드를 같이 업데이트 가능.
9
답정너 - slate
• slate 로 정하고 살펴보기 시작.
• 어엇, 이건 루비. 루비는 사랑입니다.
10
분석
• 구성
• middleman : static site generator based Ruby
• layout.erb - 템플릿
• index.md - API문서
• 결국..
1. index.md 을 변환
2. middleman 을 이용해서 layout.erb 에 넣고
3. HTML 로 출력.
11
conv2python
12
• 좀더 익숙한 언어와 환경 사용. 사실은 slate 돌려보다 지쳐서…
• 팀내 주 언어로 파이썬을 밀고 있는 상태
• 루비와 가장 비슷한?
conv2python
13
• Middleman TO Flask
• jinja2 template
• layout.erb to /templates/index.html
conv2python
14
• markdown to html
• markdown : 변환 및 다양한 확장 모듈 제공
• fence_codes : markdown code block to <pre></pre>
• tables : markdown table syntax to <table></table>


import markdown

return markdown.markdown(md_text, extensions=["fenced_code", "tables"])

conv2python
15
```python

codes

```



```java 

codes

```
<pre class="highlight python">

codes

</pre>

<pre class="highlight java">

codes

</pre>
markdown html
conv2python
16
• Code Syntax Highlighting
• pygments : Python syntax highlighter
• 다양한 프로그래밍 & 마크업 언어 문법 지원


from pygments import highlight

from pygments.lexers import PythonLexer

from pygments.lexers import JavaLexer

from pygments.formatters import HtmlFormatter



highlighted = highlight(code, PythonLexer(), HtmlFormatter())

highlighted = highlight(code, JavaLexer(), HtmlFormatter())

17
변환하고, 넣으면, 끝.
slate-flask 로 github 공개
• 이유 :
• 아까움.
• 나처럼 Ruby 에 익숙하지 않은 사람도 있지 않을까.
공개 하나마나. 오픈만 된.
• 쓸곳을 찾아보자. 아니 내가 쓰자. 알바하는 서버API 문서화에 적용.
• 써보니, 안좋은 부분이 보이기 시작.
18
기능추가
• 멀티 마크다운 기능 추가
• watchdog 기능 추가
19
멀티 마크다운 기능
• 정형화된 디렉토리가 아닌 사용자가 경로를 지정.
• 목차 상에 표시되는 순서도 정하도록 지정.
• index.json
{

"ORDER":

[

"Introduction.md",

"Signup.md",

"Signin.md", 

"Notice.md", 

"Notice.jp.md", 

"Notice.fr.md"

]

}




20
• 만약, API 문서가 수정된다면?
• 서버를 끈다.
• API 문서를 고친다.
• 다시 서버를 올린다.
• 문서를 수정하면 바로 서버가 자동으로 인식해서 내용을 바꿔주자.
21
watchdog
• 서버로 띄우면, 바로 감시 시작.
• 문서가 변경되면, 다음 요청시 다시 html 만들기 수행
22
EMOCON 2015 F/W 준비하면서 추가한 내용들.
• slate-flask to Plate-Project/plate : organization
• postman2md
• multi-language searching
• static html
23
서버 API 개발시의 패턴
• 사용한 테스팅을 문서로 만들수 있지 않을까?
postman2md
• postman collection json 을 markdown 으로 변환
• 변환된 markdown 을 문서화에 이용(plate에 이용)
• postman collection json with plate
24
testing
API
Design
docdev
검색의 문제 : lunr.js 이용
• 영어만을 지원하는 문제, 다국어 지원의 이슈
• lunr-languages 를 plate 에 연동, 몇 개의 다국어 검색 가능.
• 현재 한국어가 없어서 lunr.kr.js 를 만들고 있는 중
25
static html
• 사실 크게 생각하지 않았던 기능.
• github.io 같은 곳에 올리거나 Apache에 올린다면
• 원래 Flask 는 jinja2 template 를 이용, 변환된 HTML 을 저장
• http://plate-project.github.io/
26
앞으로의 계획
• 에디터
• 테스팅부분의 추가 : slate에도 꾸준한 이슈
• 카피캣의 탈피 - Front-End
• 조금은 다른 방향으로의 API Documentation Tool을 만들고 싶다.
27
오픈소스 시작하기
• 코드줍기 vs. 카피캣
• 장단점이 있는 듯, 개인의 성향
28
어떻게 계속 유지할수 있는가?
• 한번 시작한것을 계속 유지하는것은 쉽지가 않음.
• 특히 카피캣은 더 그런듯.
• 써보고 계속 개선할 거리를 만드는 것이 자극이 됨.
• 지속적으로 할수 있는것을 선택하길.
29
지켜보고 있기.
30
• issue, pull request
• 필요한 기능들을 찾아내는 중.
어떻게 좋은 오픈소스가 될수 있을까?
• fork count? star?
• 여전히 모르겠음. 숙제
• 찾아가는 과정
31
For me
• 지속적으로 개발할 거리, daily commit
• 관련된 다양한 오픈소스에 대한 접근.
32
Thank you

More Related Content

Viewers also liked

CURRICULAM-VITAE
CURRICULAM-VITAECURRICULAM-VITAE
CURRICULAM-VITAENasim Khan
 
Thóai Hóa Cột Sống
Thóai Hóa Cột SốngThóai Hóa Cột Sống
Thóai Hóa Cột Sốngcynthia408
 
ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6 ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6 09nattakarn
 
Konkurencinis pranašumas mažmeninėse įmonėse. Benas Adomavičius
Konkurencinis pranašumas mažmeninėse įmonėse. Benas AdomavičiusKonkurencinis pranašumas mažmeninėse įmonėse. Benas Adomavičius
Konkurencinis pranašumas mažmeninėse įmonėse. Benas AdomavičiusStrongPoint
 
Viêm Khớp Nhiễm Trùng
Viêm Khớp Nhiễm TrùngViêm Khớp Nhiễm Trùng
Viêm Khớp Nhiễm Trùngshala176
 

Viewers also liked (6)

CURRICULAM-VITAE
CURRICULAM-VITAECURRICULAM-VITAE
CURRICULAM-VITAE
 
Thóai Hóa Cột Sống
Thóai Hóa Cột SốngThóai Hóa Cột Sống
Thóai Hóa Cột Sống
 
Sr. Estimation engineer
Sr. Estimation engineerSr. Estimation engineer
Sr. Estimation engineer
 
ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6 ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6
 
Konkurencinis pranašumas mažmeninėse įmonėse. Benas Adomavičius
Konkurencinis pranašumas mažmeninėse įmonėse. Benas AdomavičiusKonkurencinis pranašumas mažmeninėse įmonėse. Benas Adomavičius
Konkurencinis pranašumas mažmeninėse įmonėse. Benas Adomavičius
 
Viêm Khớp Nhiễm Trùng
Viêm Khớp Nhiễm TrùngViêm Khớp Nhiễm Trùng
Viêm Khớp Nhiễm Trùng
 

Similar to EMOCON 2015 - 카피캣으로 시작하는 오픈소스

Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Han Sung Kim
 
GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서jungseob shin
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개태준 문
 
github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기newdeal2
 
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 HostingFirebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting승빈이네 공작소
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기Youngjae Kim
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개Hyoungjun Kim
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)삵 (sarc.io)
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)Sang Don Kim
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들Sewon Ann
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
Aws serverless services
Aws serverless servicesAws serverless services
Aws serverless servicesDaniel Jung
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPM패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPMhyunho Lee
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현병태 정
 

Similar to EMOCON 2015 - 카피캣으로 시작하는 오픈소스 (20)

Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서GitHub Pull Request 간단 사용 설명서
GitHub Pull Request 간단 사용 설명서
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개
 
github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기
 
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 HostingFirebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
Firebase for Web (웹개발을 위한 파이어베이스) 1 Hosting
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
Aws serverless services
Aws serverless servicesAws serverless services
Aws serverless services
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPM패키지 매니저 골라골라! Cocoapod, Carthage, SPM
패키지 매니저 골라골라! Cocoapod, Carthage, SPM
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현
 

More from 이상한모임

Summernote 이야기 - 홍영택님(@hackerwins)
Summernote 이야기 - 홍영택님(@hackerwins)Summernote 이야기 - 홍영택님(@hackerwins)
Summernote 이야기 - 홍영택님(@hackerwins)이상한모임
 
Hack Reactor & Code states - 김인기님(@ingikim)
Hack Reactor & Code states - 김인기님(@ingikim)Hack Reactor & Code states - 김인기님(@ingikim)
Hack Reactor & Code states - 김인기님(@ingikim)이상한모임
 
Designer, Collaboration and Community - 김지홍님(@jihere1001)
Designer, Collaboration and Community - 김지홍님(@jihere1001)Designer, Collaboration and Community - 김지홍님(@jihere1001)
Designer, Collaboration and Community - 김지홍님(@jihere1001)이상한모임
 
Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)
Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)
Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)이상한모임
 
EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기이상한모임
 
EMOCON 2015 - 개발자로 성공적으로 실패하기
EMOCON 2015 - 개발자로 성공적으로 실패하기EMOCON 2015 - 개발자로 성공적으로 실패하기
EMOCON 2015 - 개발자로 성공적으로 실패하기이상한모임
 
EMOCON 2015 - HAL with Swagger
EMOCON 2015 - HAL with SwaggerEMOCON 2015 - HAL with Swagger
EMOCON 2015 - HAL with Swagger이상한모임
 
EMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjsEMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjs이상한모임
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다이상한모임
 
EMOCON 2015 - 디자인이 뭐예요?
EMOCON 2015 - 디자인이 뭐예요?EMOCON 2015 - 디자인이 뭐예요?
EMOCON 2015 - 디자인이 뭐예요?이상한모임
 
전자책 담당자 생존기 ● 이상한모임
전자책 담당자 생존기 ● 이상한모임전자책 담당자 생존기 ● 이상한모임
전자책 담당자 생존기 ● 이상한모임이상한모임
 
전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임
전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임
전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임이상한모임
 

More from 이상한모임 (12)

Summernote 이야기 - 홍영택님(@hackerwins)
Summernote 이야기 - 홍영택님(@hackerwins)Summernote 이야기 - 홍영택님(@hackerwins)
Summernote 이야기 - 홍영택님(@hackerwins)
 
Hack Reactor & Code states - 김인기님(@ingikim)
Hack Reactor & Code states - 김인기님(@ingikim)Hack Reactor & Code states - 김인기님(@ingikim)
Hack Reactor & Code states - 김인기님(@ingikim)
 
Designer, Collaboration and Community - 김지홍님(@jihere1001)
Designer, Collaboration and Community - 김지홍님(@jihere1001)Designer, Collaboration and Community - 김지홍님(@jihere1001)
Designer, Collaboration and Community - 김지홍님(@jihere1001)
 
Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)
Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)
Emocon 2015 - 웹 앱 개발자가 모르는 임베디드세상(오토모티브 월드)
 
EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기
 
EMOCON 2015 - 개발자로 성공적으로 실패하기
EMOCON 2015 - 개발자로 성공적으로 실패하기EMOCON 2015 - 개발자로 성공적으로 실패하기
EMOCON 2015 - 개발자로 성공적으로 실패하기
 
EMOCON 2015 - HAL with Swagger
EMOCON 2015 - HAL with SwaggerEMOCON 2015 - HAL with Swagger
EMOCON 2015 - HAL with Swagger
 
EMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjsEMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjs
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
EMOCON 2015 - 디자인이 뭐예요?
EMOCON 2015 - 디자인이 뭐예요?EMOCON 2015 - 디자인이 뭐예요?
EMOCON 2015 - 디자인이 뭐예요?
 
전자책 담당자 생존기 ● 이상한모임
전자책 담당자 생존기 ● 이상한모임전자책 담당자 생존기 ● 이상한모임
전자책 담당자 생존기 ● 이상한모임
 
전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임
전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임
전자책 실무자가 바라본 전자책과 그 트렌드 ● 이상한모임
 

EMOCON 2015 - 카피캣으로 시작하는 오픈소스

  • 2. ash84 • Developer • sh84.ahn@gmail.com • ash84.net • @sh84ahn • github.com/AhnSeongHyun 2
  • 3. 이런 프로젝트를 하고 있습니다. • Plate : API Documentation Tool based on markdown. • https://github.com/Plate-Project/plate • http://plate-project.github.io/ 3
  • 4. 개발하게 된 계기 • 입사 3개월차(신입은 아님), 한창 의욕만 앞설 시기 • API 작업 전, 설계 초안 작업과 함께 API 문서화 툴 조사 • 결제 관련 API 사이트들을 주로 참고 4
  • 5. more test • Swagger • http://petstore.swagger.io/ • I/O Docs • https://github.com/mashery/iodocs • http://blog.outsider.ne.kr/990 5
  • 6. more doc 6 • Slate • https://github.com/tripit/slate • Atlassian/Confulence
  • 8. 굳굳굳 • 기존방식 - *.docx, *.xlsx + sample code • asp.net_example.zip, jsp_example.zip • 업데이트가 쉽지 않다. 8
  • 9. 굳굳굳 • Stripe 같은 API 문서화 사이트를 이용하면.. • API 를 실제 코드와 함께 볼수 있다는 장점. • API를 업데이트 하더라도, 좀 더 쉽게 문서와 코드를 같이 업데이트 가능. 9
  • 10. 답정너 - slate • slate 로 정하고 살펴보기 시작. • 어엇, 이건 루비. 루비는 사랑입니다. 10
  • 11. 분석 • 구성 • middleman : static site generator based Ruby • layout.erb - 템플릿 • index.md - API문서 • 결국.. 1. index.md 을 변환 2. middleman 을 이용해서 layout.erb 에 넣고 3. HTML 로 출력. 11
  • 12. conv2python 12 • 좀더 익숙한 언어와 환경 사용. 사실은 slate 돌려보다 지쳐서… • 팀내 주 언어로 파이썬을 밀고 있는 상태 • 루비와 가장 비슷한?
  • 13. conv2python 13 • Middleman TO Flask • jinja2 template • layout.erb to /templates/index.html
  • 14. conv2python 14 • markdown to html • markdown : 변환 및 다양한 확장 모듈 제공 • fence_codes : markdown code block to <pre></pre> • tables : markdown table syntax to <table></table> 
 import markdown
 return markdown.markdown(md_text, extensions=["fenced_code", "tables"])

  • 15. conv2python 15 ```python
 codes
 ```
 
 ```java 
 codes
 ``` <pre class="highlight python">
 codes
 </pre>
 <pre class="highlight java">
 codes
 </pre> markdown html
  • 16. conv2python 16 • Code Syntax Highlighting • pygments : Python syntax highlighter • 다양한 프로그래밍 & 마크업 언어 문법 지원 
 from pygments import highlight
 from pygments.lexers import PythonLexer
 from pygments.lexers import JavaLexer
 from pygments.formatters import HtmlFormatter
 
 highlighted = highlight(code, PythonLexer(), HtmlFormatter())
 highlighted = highlight(code, JavaLexer(), HtmlFormatter())

  • 18. slate-flask 로 github 공개 • 이유 : • 아까움. • 나처럼 Ruby 에 익숙하지 않은 사람도 있지 않을까. 공개 하나마나. 오픈만 된. • 쓸곳을 찾아보자. 아니 내가 쓰자. 알바하는 서버API 문서화에 적용. • 써보니, 안좋은 부분이 보이기 시작. 18
  • 19. 기능추가 • 멀티 마크다운 기능 추가 • watchdog 기능 추가 19
  • 20. 멀티 마크다운 기능 • 정형화된 디렉토리가 아닌 사용자가 경로를 지정. • 목차 상에 표시되는 순서도 정하도록 지정. • index.json {
 "ORDER":
 [
 "Introduction.md",
 "Signup.md",
 "Signin.md", 
 "Notice.md", 
 "Notice.jp.md", 
 "Notice.fr.md"
 ]
 } 
 
 20
  • 21. • 만약, API 문서가 수정된다면? • 서버를 끈다. • API 문서를 고친다. • 다시 서버를 올린다. • 문서를 수정하면 바로 서버가 자동으로 인식해서 내용을 바꿔주자. 21
  • 22. watchdog • 서버로 띄우면, 바로 감시 시작. • 문서가 변경되면, 다음 요청시 다시 html 만들기 수행 22
  • 23. EMOCON 2015 F/W 준비하면서 추가한 내용들. • slate-flask to Plate-Project/plate : organization • postman2md • multi-language searching • static html 23
  • 24. 서버 API 개발시의 패턴 • 사용한 테스팅을 문서로 만들수 있지 않을까? postman2md • postman collection json 을 markdown 으로 변환 • 변환된 markdown 을 문서화에 이용(plate에 이용) • postman collection json with plate 24 testing API Design docdev
  • 25. 검색의 문제 : lunr.js 이용 • 영어만을 지원하는 문제, 다국어 지원의 이슈 • lunr-languages 를 plate 에 연동, 몇 개의 다국어 검색 가능. • 현재 한국어가 없어서 lunr.kr.js 를 만들고 있는 중 25
  • 26. static html • 사실 크게 생각하지 않았던 기능. • github.io 같은 곳에 올리거나 Apache에 올린다면 • 원래 Flask 는 jinja2 template 를 이용, 변환된 HTML 을 저장 • http://plate-project.github.io/ 26
  • 27. 앞으로의 계획 • 에디터 • 테스팅부분의 추가 : slate에도 꾸준한 이슈 • 카피캣의 탈피 - Front-End • 조금은 다른 방향으로의 API Documentation Tool을 만들고 싶다. 27
  • 28. 오픈소스 시작하기 • 코드줍기 vs. 카피캣 • 장단점이 있는 듯, 개인의 성향 28
  • 29. 어떻게 계속 유지할수 있는가? • 한번 시작한것을 계속 유지하는것은 쉽지가 않음. • 특히 카피캣은 더 그런듯. • 써보고 계속 개선할 거리를 만드는 것이 자극이 됨. • 지속적으로 할수 있는것을 선택하길. 29
  • 30. 지켜보고 있기. 30 • issue, pull request • 필요한 기능들을 찾아내는 중.
  • 31. 어떻게 좋은 오픈소스가 될수 있을까? • fork count? star? • 여전히 모르겠음. 숙제 • 찾아가는 과정 31
  • 32. For me • 지속적으로 개발할 거리, daily commit • 관련된 다양한 오픈소스에 대한 접근. 32