Open source engineering
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Open source engineering

on

  • 1,846 views

오픈소스 프로젝트 진행을 위한 방법론을 설명한다. (소마에 2기 facebook framework 인 fHalo의 구축사례를 살펴본다.)

오픈소스 프로젝트 진행을 위한 방법론을 설명한다. (소마에 2기 facebook framework 인 fHalo의 구축사례를 살펴본다.)

Statistics

Views

Total Views
1,846
Views on SlideShare
1,846
Embed Views
0

Actions

Likes
3
Downloads
53
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • http://myossdevblog.blogspot.com/2009/03/microlog4android.html

Open source engineering Presentation Transcript

  • 1. Open Source Engineering fHalo
  • 2. 신재명, 오유환, 강미경, 김영호손영수 fHalo팀
  • 3. 오픈소스 란.
  • 4. 3명의 거장.Richard Stallman Linus Torvalds Eric S. Raymond
  • 5. 처음 시작과 달리현재의 오픈 소스는...
  • 6. 인류애의 사랑 그리고기업들의 총성 없는 전쟁이 공존하는 곳
  • 7. 애플이 바라보는 Open Source소프트웨어 자산 나쁜 마켓 쉐어링 Half-Open/Half-Close
  • 8. 구글이 바라보는 Open Source소프트웨어 자산 Free Outsourcing 표준화 및 비 표준화 (EcoSystem 구축)
  • 9. 재미난 Web 브라우저 시장
  • 10. Google이 잘될수 밖에 없는 이유..• CanvasGL – a GPU-accelerated Webkit
  • 11. 1. 라이선스 조사
  • 12. Open Source License
  • 13. 주요 License 비교 Apach GPL LGPL MIT BSD e저작권 보호 기능 O O O O O상용 SW 사용 가능 O O O O O기능 확장 공개 의무 O O X X X특허권 행사 가능 X X X X O독점 프로그램에서 사용 가능 여부 X O O O O라이선스 전파 여부 O O X X X
  • 14. Open Source License Open Source License 통계는 ? GPL (60%) GPL MIT (2%) LGPL BSD BSD (6%) MIT LGPL (7%) 기타출처 http://bit.ly/JqfTFz , 2008년
  • 15. Open Source License그리고, 현재는 ?SourceForge, Code Complex, Google Code, Savannah, RubyForge, GitHub. GPL GPL (32%) BSD MPL BSD (64%) 기타 MPL (4%)출처, http://bit.ly/K8dZtU , 2011년
  • 16. 주요 License 특허권 행사 Apach GPL LGPL MIT BSD e저작권 보호 기능 O O O O O상용 SW 사용 가능 O O O O O기능 확장 공개 의무 O O X X X특허권 행사 가능 X X X X O독점 프로그램에서 사용 가능 여부 X O O O O라이선스 전파 여부 O O X X X
  • 17. 주요 오픈소스 SW 사례
  • 18. 오픈 소스 라이선스 위반
  • 19. 오픈 소스 라이선스 위반 사례
  • 20. 2. Committer & Reviewer Policy
  • 21. OSP의 방향을 좌우 하는자 Committer & Reviewer..• 정부 주도형 – Webinos (EU에서 주관)• 기업 컨소시엄 주도형 – Webkit ( Apple + Google)• 폐쇄형 – jQuery (개인마음대로 -> Boarding 맴버 선정)
  • 22. 3. 공개 이전에 사용부터.Android의 문제를 오픈소스로..
  • 23. 3.1 REST의 귀찮음.
  • 24. StubController DAO Proxy REST DTO GET
  • 25. 같이 뭉쳐 다니는 파라메터는ParameterObject로 묶어라!
  • 26. XML 파싱 이렇게??
  • 27. Simple Framework를 이용하세요.http://simple.sourceforge.net/
  • 28. 이렇게 됩니다.
  • 29. 3.2 아직도 Logcat?
  • 30. 여러분이 만든 시스템이 죽었다. 미국에서….
  • 31. Logcat 보러 출장?
  • 32. 새로운 log.. 4
  • 33. 먼저Log Management 패턴부터…
  • 34. log4xxx
  • 35. Microlog4android 사용법• http://code.google.com/p/microlog4android/downloads/에서 microlog4android-1.0.0.jar 다운• Android 프로젝트에 jar 추가• AndroidManifest.xml에 android.permission.WRITE_EXTERNAL_STORAG​​E 추가
  • 36. 로그를Network 서버로 보내는 Appender도 있으나 약간의 코딩이 필요.
  • 37. 4. Open Source Engineering
  • 38. 4.1 Facebook 의 가치 그리고 문제점..
  • 39. ?세계에서 가장 큰 서비스 (약 8억5천만) 854,750,780
  • 40. ?가장 오랜시간 이용하는 서비스
  • 41. 을 개발하려면…너무 많은 것을 알아야 한다. Social Plugin ? Open Graph ? Social Channels ? Authentication ? Graph API ?
  • 42. 을 개발하려면… 쓸만한 녀석이 없다..batchFBfacebook-AWDzendFBlibfacebook SDK for Androidfacebook SDK for .net
  • 43. 기존 Framework의 문제점.. ? 확장성 편의성 사용성 안정성
  • 44. 그래서 우리는.. framework facebook framework Project 를 시작했습니다.
  • 45. 4.2 Facebook 기본 개념
  • 46. 소셜 그래프 47
  • 47. About Graph API• Graph API – 소셜 그래프의 Object(친구, 페이지, 사진 등)를 다루는 API• Graph API의 구조 – https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE• ID는 사용자, 페이지, 이벤트, 사진 등의 Object ID – 약 20개의 Object를 지원 – 모든 Object의 ID는 unique하다 – JSON 형태로 응답을 받는다 48
  • 48. Graph API Example• https://graph.facebook.com/100001066448386/ 신재명 ID• https://graph.facebook.com/40796308305/ 코카콜라 페이지 ID 49
  • 49. Graph API - Connection• Graph API의 구조 – https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE• Connection이란 ? – Object의 연관(관계) 개념• User object의 Connection 종류 – Family, friends, album, likes, posts … – User object 경우 약 25개의 Connection 을 제공 – https://developers.facebook.com/docs/reference/api/user/ 참고 50
  • 50. Connection - Example• Graph API 예시 – https://graph.facebook.com/100001066448386/friends 그럼 보안문제는 ??? 51
  • 51. Access Token• 페이스북 API를 사용하기 위해 Access Token(인 증)이 필요하다.• Graph API Explorer를 통하여 쉽게 Access Token 을 받아올 수 있음 52
  • 52. About Graph API• Graph API Explorer – Access Token 받을 수 있다 – 각종 Graph API를 테스트 해볼 수 있다 https://developers.facebook.com/tools/explorer#!/tools/explorer 53
  • 53. 4.3 Facebook 개발 도구에 대한 문제인식
  • 54. try{ URL url = new URL("https://graph.facebook.com/friends?access_token=ACCESS_TOKEN"); connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type" , "application/x-www-form-urlencoded"); connection.connect(); InputStreamReader reader = new InputStreamReader(connection.getInputStream()); bufferedReader = new BufferedReader(reader); String temp = null; StringBuffer buffer = new StringBuffer(); while ((temp = bufferedReader.readLine()) != null) { buffer.append(temp); } JsonObject json = new JsonObject(buffer.toString()); JsonArray jsonArray = json.getJsonArray(“data”); For(int i=0;i<jsonArray.length();i++){ JsonObject jsonObject = jsonArray.getJsonObject(i); System.out.println(“My friends : " + json.get("name")); }}connection.disconnect(); Graph API를 이용하여 친구리스트를 가져오는 소스 자신의 친구리스트를 가져오는 그래프API를 호출한 다음 반환 값인 JSON데이터를 일일이 파싱하는 과정을 거침
  • 55. 타 framework의 문제점facebook SDK for Android 안정적이지 못한 구조, Circular dependency 발생
  • 56. 타 framework의 문제점 TangledPollution : 4.19 Pollution : 2.18 facebook SDK for Android 높은 오염도 내포, 다양한 문제요소
  • 57. 4.4 Facebook 프레임워크 개발하기
  • 58. 먼저 프로젝트 목표(품질) 설정• Framework의 80대20 법칙• 높은 사용성 확보. (쉬운 개발)• 튼튼한 아키텍처 확보• 오픈 소스를 통한 공유와 확장
  • 59. 4.4.1 팀원의 크기에 맞게 운용Small Team Large Team
  • 60. Framework를 구축하는 팀원이 작으면.. Simple Design Consistency Design Focus on 80/20 RulesSmall Team
  • 61. Framework 를 구축하는 팀원이 매우 많다면.. Powerful Design Lack Consistency Remove RequirementsLarge Team
  • 62. Framework 핵심 기능 찾기내가 만들 FB App에 필요한 기능들 추출..
  • 63. Framework 핵심 기능 찾기분류화 시키기
  • 64. Framework 핵심 기능 찾기20/80 Rule에 의거한 기능 추출
  • 65. 4.4.2 높은 사용성 확보우리가 만든 오픈소스 (프레임워크)를 과연 다른 개발자가 쓸까? 사막을 달리고 있지 않나요?
  • 66. You need Feedback.
  • 67.  DO design APIs by first writing code samples for the main scenarios and then defining the object model to support the code samples.
  • 68. Code Samples
  • 69. Read Filestatic void Main(string[] args) { StreamReader sr = File.OpenText("MyFile.txt"); string s = sr.ReadLine(); while (s != null) { s = sr.ReadLine(); Console.WriteLine(s); }}
  • 70. Feedback (Read File) static void Main(string[] args) { foreach (string s in File.ReadAllLines("MyFiles.text")) { Console.WriteLine(s); } }
  • 71. Object Model Listing
  • 72. framework 사용자 시나리오 산출
  • 73. framework 사용자 시나리오 산출
  • 74. framework 사용자 시나리오 산출
  • 75. framework 사용자 시나리오 산출
  • 76. 친구 리스트 가져오기 (페이스북 API)
  • 77. 친구 리스트 가져오기– Rest FB • Connection<User> myFriends = facebookClient.fetchConnection("me/friends", User.class);– fHalo • Connection<Friends> friends = user.friends();
  • 78. 피드 올리기(페이스북 API)
  • 79. 피드 올리기– Rest FB • FacebookType publishMessageResponse = facebookClient.publish("me/feed", FacebookType.class, Parameter.with("message", "RestFB test"), Parameter.with(“caption", “caption test"), Parameter.with(“description", “description test"),);– fHalo • Feed feed = new feed(); feed.setMessage("Message Test"); feed.setCaption("Caption Test"); feed.setDescription("Description Test"); user.publishFeed(me, feed);
  • 80. 4.4.3 튼튼한 아키텍쳐
  • 81. 튼튼한 아키텍쳐의 중요성.. 그리고 어떻게 파악하지?
  • 82. 왜 오픈소스에서아키텍쳐가 중요한가?
  • 83. 높이 (30000 feet)봐야 할까?
  • 84. 높이 봐야 할까?
  • 85. 자세히 (0 feet) 봐야 할까?
  • 86. 자세히 봐야 할까?
  • 87. 3만 피트 vs 0 피트의 뷰. 3만 피트 • 다이어그램의 Line의 의미는? • 의존성? • 데이터 흐름? • 버스와 같은 공유자원? 0 피트 • 너무 상세한 정보임. • 전체적인 구조를 보지 못함.
  • 88. 해결책은..적절한 1000 피트의 뷰
  • 89. xDepend(Ndepend, Xdepend, CDepend) NDepend - http://www.xdepend.com
  • 90. 또 하나의 도구 – Code Metrics
  • 91. STAN (Structure Analysis for Java)STAN - http://stan4j.com/eclipse/eclipse-integration.html
  • 92. Robert C. Martin의 그래프
  • 93. Instability•패키지의 안정성을 측정•다른 패키지에 영향을 미치지 않고, 해당 패키지를 쉽게 변경 수 있는가?•Instability I = Ce / (Ca+Ce)•Ce = Efferent Coupling (Outgoing Dependencies)•Ca = Afferent Coupling (Ingoing Dependencies )
  • 94. Instability Instability I = Ce / (Ca+Ce)당신의 패키지가 다른 사람이 많이 쓴다면,즉 Outgoing, Ce가 많다면, 여러분의 패키지는 변경하기 어렵다.반대로 Outgoing하는 Ce가 적다면, 여러분의 패키지는 쉽게 변경해도 된다.즉 0.0에서 0.3이면 안정적인 버전, 0.7에서 1.0이면 불안정적인 상태다
  • 95. Abstractness Interface(Abstract) 와 Concrete Class를 비교A = (#abstract classes / total # of classes) •Abstract class = interface, abstract다 포함 •Total # class = abstract class + concrete class •0 이면 concrete class만 있다. •1 이면 abstract class만 있다.
  • 96. 다시 보는 그래프 조금 더 abstract를 높여 야 돼!
  • 97. 그 외 용어•Tangled Complexity •순환 참조가 있어 Boundary를 깰 때•Cyclomatic Complexity •분기 문이 많아 hotspot이 될 가망성이 높은 곳
  • 98. 경고!!!환자의 외부 증상만고치는 의사가 되지 말자!!이러한 정보는 좋은 가이드일뿐!!숫자에 의존하다가오히려 아키텍쳐가 무너진다.
  • 99. 4.4.4 fHalo 아키텍쳐 리팩토링
  • 100. 아키텍쳐 구조도 및 오염도 1. facebook SDK for Android
  • 101. 아키텍쳐 구조도 및 오염도 2. restFB Tangled
  • 102. RestFB Refactoring• STEP 1. 구조 분석하기
  • 103. RestFB Refactoring 전• STEP 2. 문제 원인 분석하기
  • 104. fHalo Refactoring 결과• STEP 2. 문제 원인 분석하기
  • 105. fHalo Refactoring 결과• STEP 3. 패키지 분리
  • 106. RestFB Refactoring 전• STEP 4. 가독성있는 네이밍 정의
  • 107. fHalo Refactoring 결과• STEP 4. 가독성있는 네이밍 정의
  • 108. 아키텍쳐 구조 – fHalo Framework
  • 109. 아키텍쳐 오염도 Pollution : 0.97 fHalo Framework
  • 110. 4.4.5 3 Example로 품질 확보하기 1. 자체적인 Target Application 개발 2. 페이스북을 활용하는 „Yellow Ribbon‟ 팀과의 협력 3. 페이스북 헤카톤으로 또 한번의 검증 “안정화된 framework을 얻기 위해 최소 3번의 target application을 기반으로 만들어진 framework 여야 된다.” - Gof 디자인 패턴의 저자 / 프레임워크의 대가 Ralph Johnson - Gof 디자인 패턴의 저자 / 프레임워크의 창시자 Ralph Johnson
  • 111. Target Application - enjoybazaar
  • 112. Target Application – Yellow Ribbon
  • 113. Target Application – Promise Mind
  • 114. 4.4.6 외부로 오픈하기
  • 115. Project Page Open! – jQuery Page
  • 116. Project Page Open!
  • 117. github Repository Open Page Open!
  • 118. Step by Step TutorialStep1 Step2 Step3 Step4Import fHalo.jar Get access token Create instance Using API
  • 119. Video Tutorial
  • 120. Video Tutorial 동영상 통계자료
  • 121. Video Tutorial – Feedback 1
  • 122. fHalo 향후 발전방향- jQuery, Spring 과 같이 성공한 OpenSource 로 발전- 타임라인/크레딧 등 페이스북에서 제공되는 신규 기능들을 꾸준히 반영하여 All in One SDK로 발전- 페이스북의 Meta Data를 활용할 수 있는 DA(Data Analysis)와 DV(Data Visualization) 를 제공하는 SDK 발전, 페이스북 개발자 생태계에 좋은 영향을 제공- 현재 진행한 프로젝트는 다양한 세미나 주제 발표와 월간 „마이크로 소프트웨어‟에 3~4개월여에 걸쳐 기고 하여, 널리 알리고 공유할 예정.
  • 123. Ohloh.net- 오픈소스SW의 탄생부터 현재까지의 역사를 한눈에 보여주는 박물관- 오픈소스SW의 개발과 진화과정을 추적하고 공개하는 사이트- 품질을 평가할 수 있는 다양한 지표들을 제공
  • 124. 5. Git & GitHub
  • 125. 버전 관리 시스템• 프로젝트 파일의 변경사항을 추적하는 시스템• 버전 컨트롤 자동화, 간편한 소스 변경이력 관리• 손쉬운 협업, roll back, 병렬작업 127
  • 126. 중앙 집중식 버전관리• CVS(Concurrent Version System), SVN(Subversion)• 소스변경 이력을 보려면 중앙 저장소에 접근. 128
  • 127. 분산 버전관리• Git 자신만의 로컬저장소를 가진다• Linux Kernel, Android, Ruby on Rails – Git 이용 예 129
  • 128. Git 주요 용어Server Server Repository Commit Local Repository Client 130
  • 129. Git 주요 용어• Branch – 작업 트리중 하나의 가지 – 후에 master branch와 합치거나 실험해 본 후 삭제• Merge – Branch를 합침 131
  • 130. Git 사용법• Repository – Github – 네이버개발자센터 – Bitbucket• Github 사용 – http://github.com• Git download – http://help.github.com/win-set-up-git/ 132
  • 131. Git Bash 133
  • 132. SSH key 생성• SSH key 생성 – ssh-keygen –t rsa –c “email@email.com” – ~.sshid_rsa.pub 에서 확인 134
  • 133. SSH Key 등록 135
  • 134. Git 기본 환경설정• 기본 환경설정(Git bash) – Command창 에서 이름과 메일을 입력 Git config --global user.name “Jaemyung Shin” Git config --global user.mail “kicklassl@naver.com” 136
  • 135. Git 설정• Git init을 통해 로컬 저장소 생성• Git add <파일명> 을 통해 파일 추가1.Git 설정  2.Commit  3.Push  4.Pull 137
  • 136. Commit• 변경 사항들을 로컬저장소에 저장• Git commit –m “commit log”1.Git 설정  2.Commit  3.Push  4.Pull 138
  • 137. Push• 로컬저장소의 파일을 원격저장소에 저장• Git push <원격저장소 URL>1.Git 설정  2.Commit  3.Push  4.Pull 139
  • 138. GitHub Repository• Create repository 원격저장소 URL• 원격 저장소 주소 필요  git@github.com:fHalo/test.git 140
  • 139. Push 후 GitHub Repository 141
  • 140. Pull• 원격저장소의 파일을 로컬저장소로 가져옴• Git pull <원격지 URL>1.Git 설정  2.Commit  3.Push  4.Pull 142
  • 141. Egit(Eclipse Git)• Eclipse plug-in 으로 간편히 제공• Help  Install New Software  Add(http://www.jgit.org/updates) 143
  • 142. 원격 프로젝트 생성• Import  Git – Local : 로컬에있는 Git 프로젝트로 생성 – URI : 원격지에 있는 Git 프로젝트 다운(Pull) 144
  • 143. 원격 프로젝트 생성• URI, Authentication 채우기 – URI : 저장소 주소 – Authentication : github ID, PW 145
  • 144. Egit 사용법• Git project 생성 후 146
  • 145. Egit을 이용한 Commit 147
  • 146. Egit을 이용한 Commit 이력 보기• Show history – Commit 이력보기 148
  • 147. Egit을 통한 Push• 로컬저장소의 내용을 원격저장소로 전송 149
  • 148. Egit을 이용한 Pull• 충돌없을경우  Pull 성공• 충돌할경우  충돌로그 소스구분선 150
  • 149. Egit을 통한 roll back• 예전 코드로 복원하기 – Revert commit 151
  • 150. 6. 마무리 및 참고자료
  • 151. 요약 오픈 소스는 인류애적인 사랑과 밴더들의 전쟁이 공존하는 곳. 오픈 소스는 소프트웨어 개발에 중요한 Asset이다. 사용하든, 배포하든 라이선스를 주의해라. 배포시 Committer & Reviewer Policy를 주의해라. 외부의 도움 (아웃 소싱)을 받기 위해선 구조적 설계가 중요. 엔지니어링 기법 소개 Git & GitHub 사용법 fHalo Project
  • 152. 참고 자료• License 분류 참고 자료 – http://bit.ly/KkPDBP• Open Source License 통계 – http://bit.ly/JqfTFz – http://bit.ly/K8dZtU
  • 153. 참고 자료• Github Wiki page – https://github.com/fHalo/fHalo/wiki
  • 154. 참고 자료• fHalo web site – http://fhalo.org/index.html
  • 155. 참고 자료• 구글독스를 통한 사용성 회의 – goo.gl/WhABe
  • 156. Q&A