0
Open Source Engineering   fHalo
신재명, 오유환, 강미경, 김영호손영수           fHalo팀
오픈소스 란.
3명의 거장.Richard Stallman     Linus Torvalds   Eric S. Raymond
처음 시작과 달리현재의 오픈 소스는...
인류애의 사랑 그리고기업들의 총성 없는 전쟁이 공존하는 곳
애플이 바라보는 Open Source소프트웨어 자산   나쁜 마켓 쉐어링   Half-Open/Half-Close
구글이 바라보는 Open Source소프트웨어 자산   Free Outsourcing   표준화 및 비 표준화           (EcoSystem 구축)
재미난 Web 브라우저 시장
Google이 잘될수 밖에 없는 이유..• CanvasGL – a GPU-accelerated Webkit
1. 라이선스 조사
Open Source License
주요 License 비교                                              Apach                     GPL   LGPL   MIT   BSD               ...
Open Source License              Open Source License 통계는 ?                                   GPL (60%)                    ...
Open Source License그리고, 현재는 ?SourceForge, Code Complex, Google Code, Savannah, RubyForge, GitHub.                         ...
주요 License 특허권 행사                                              Apach                     GPL   LGPL   MIT   BSD           ...
주요 오픈소스 SW 사례
오픈 소스 라이선스 위반
오픈 소스 라이선스 위반 사례
2. Committer & Reviewer        Policy
OSP의 방향을 좌우 하는자     Committer & Reviewer..• 정부 주도형 – Webinos (EU에서 주관)• 기업 컨소시엄 주도형 – Webkit ( Apple + Google)• 폐쇄형 – jQue...
3. 공개 이전에 사용부터.Android의 문제를 오픈소스로..
3.1 REST의 귀찮음.
StubController         DAO Proxy       REST    DTO             GET
같이 뭉쳐 다니는 파라메터는ParameterObject로 묶어라!
XML 파싱 이렇게??
Simple Framework를     이용하세요.http://simple.sourceforge.net/
이렇게 됩니다.
3.2 아직도 Logcat?
여러분이 만든 시스템이    죽었다.  미국에서….
Logcat 보러 출장?
새로운 log..    4
먼저Log Management   패턴부터…
log4xxx
Microlog4android 사용법• http://code.google.com/p/microlog4android/downloads/에서  microlog4android-1.0.0.jar 다운• Android 프로젝트에...
로그를Network 서버로 보내는   Appender도 있으나 약간의 코딩이 필요.
4. Open Source Engineering
4.1 Facebook 의 가치   그리고 문제점..
?세계에서 가장 큰 서비스                (약 8억5천만)           854,750,780
?가장 오랜시간 이용하는 서비스
을 개발하려면…너무 많은 것을 알아야 한다.           Social Plugin ?           Open Graph ?           Social Channels ?           Authentica...
을 개발하려면… 쓸만한 녀석이 없다..batchFBfacebook-AWDzendFBlibfacebook SDK for Androidfacebook SDK for .net
기존       Framework의 문제점..          ?     확장성 편의성 사용성 안정성
그래서 우리는..            framework            facebook framework Project        를 시작했습니다.
4.2 Facebook 기본 개념
소셜 그래프         47
About Graph API• Graph API  – 소셜 그래프의 Object(친구, 페이지, 사진 등)를 다루는 API• Graph API의 구조  – https://graph.facebook.com/OBJECT_I...
Graph API Example• https://graph.facebook.com/100001066448386/                                                신재명 ID• http...
Graph API - Connection• Graph API의 구조  – https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE• Connection이란 ?  – Object의 연...
Connection - Example• Graph API 예시  – https://graph.facebook.com/100001066448386/friends  그럼 보안문제는 ???                    ...
Access Token• 페이스북 API를 사용하기 위해 Access Token(인  증)이 필요하다.• Graph API Explorer를 통하여 쉽게 Access Token  을 받아올 수 있음            ...
About Graph API• Graph API Explorer   – Access Token 받을 수 있다   – 각종 Graph API를 테스트 해볼 수 있다 https://developers.facebook.com...
4.3 Facebook 개발 도구에      대한 문제인식
try{       URL url = new URL("https://graph.facebook.com/friends?access_token=ACCESS_TOKEN");       connection = (HttpsURL...
타 framework의 문제점facebook SDK for Android  안정적이지 못한 구조, Circular dependency 발생
타 framework의 문제점                                  TangledPollution : 4.19                Pollution : 2.18     facebook SDK...
4.4 Facebook 프레임워크        개발하기
먼저 프로젝트 목표(품질) 설정•   Framework의 80대20 법칙•   높은 사용성 확보. (쉬운 개발)•   튼튼한 아키텍처 확보•   오픈 소스를 통한 공유와 확장
4.4.1 팀원의 크기에 맞게 운용Small Team   Large Team
Framework를 구축하는 팀원이 작으면..               Simple Design             Consistency Design             Focus on 80/20 RulesSmall...
Framework 를 구축하는      팀원이 매우 많다면..               Powerful Design               Lack Consistency              Remove Requir...
Framework 핵심 기능 찾기내가 만들 FB App에 필요한 기능들 추출..
Framework 핵심 기능 찾기분류화 시키기
Framework 핵심 기능 찾기20/80 Rule에 의거한 기능 추출
4.4.2 높은 사용성 확보우리가 만든 오픈소스 (프레임워크)를   과연 다른 개발자가 쓸까? 사막을 달리고 있지 않나요?
You need Feedback.
 DO design APIs by  first writing code samples for the main scenarios    and then  defining the object model to support t...
Code Samples
Read Filestatic void Main(string[] args) {        StreamReader sr =   File.OpenText("MyFile.txt");        string s = sr.Re...
Feedback (Read File)  static void Main(string[] args)  {     foreach (string s in File.ReadAllLines("MyFiles.text"))    { ...
Object Model Listing
framework 사용자 시나리오 산출
framework 사용자 시나리오 산출
framework 사용자 시나리오 산출
framework 사용자 시나리오 산출
친구 리스트 가져오기 (페이스북 API)
친구 리스트 가져오기– Rest FB  • Connection<User> myFriends =    facebookClient.fetchConnection("me/friends", User.class);– fHalo  ...
피드 올리기(페이스북 API)
피드 올리기– Rest FB   • FacebookType publishMessageResponse =     facebookClient.publish("me/feed", FacebookType.class,     Pa...
4.4.3 튼튼한 아키텍쳐
튼튼한 아키텍쳐의 중요성.. 그리고 어떻게 파악하지?
왜 오픈소스에서아키텍쳐가 중요한가?
높이 (30000 feet)봐야 할까?
높이 봐야 할까?
자세히 (0 feet) 봐야 할까?
자세히 봐야 할까?
3만 피트 vs 0 피트의 뷰.      3만 피트      • 다이어그램의 Line의 의미는?       • 의존성?       • 데이터 흐름?       • 버스와 같은 공유자원?          0 피트     ...
해결책은..적절한 1000 피트의 뷰
xDepend(Ndepend, Xdepend, CDepend)  NDepend - http://www.xdepend.com
또 하나의 도구 – Code Metrics
STAN (Structure Analysis for Java)STAN - http://stan4j.com/eclipse/eclipse-integration.html
Robert C. Martin의 그래프
Instability•패키지의 안정성을 측정•다른 패키지에 영향을 미치지 않고, 해당 패키지를 쉽게 변경 수 있는가?•Instability I = Ce / (Ca+Ce)•Ce = Efferent Coupling (Out...
Instability                     Instability I = Ce / (Ca+Ce)당신의 패키지가 다른 사람이 많이 쓴다면,즉 Outgoing, Ce가 많다면, 여러분의 패키지는 변경하기 어렵다...
Abstractness  Interface(Abstract) 와 Concrete Class를 비교A = (#abstract classes / total # of classes)  •Abstract class = inte...
다시 보는 그래프           조금 더       abstract를 높여            야 돼!
그 외 용어•Tangled Complexity •순환 참조가 있어 Boundary를 깰 때•Cyclomatic Complexity •분기 문이 많아 hotspot이 될 가망성이 높은 곳
경고!!!환자의 외부 증상만고치는 의사가 되지 말자!!이러한 정보는 좋은 가이드일뿐!!숫자에 의존하다가오히려 아키텍쳐가 무너진다.
4.4.4 fHalo 아키텍쳐 리팩토링
아키텍쳐 구조도 및 오염도 1. facebook SDK   for Android
아키텍쳐 구조도 및 오염도 2. restFB                   Tangled
RestFB Refactoring• STEP 1. 구조 분석하기
RestFB Refactoring 전• STEP 2. 문제 원인 분석하기
fHalo Refactoring 결과• STEP 2. 문제 원인 분석하기
fHalo Refactoring 결과• STEP 3. 패키지 분리
RestFB Refactoring 전• STEP 4. 가독성있는 네이밍 정의
fHalo Refactoring 결과• STEP 4. 가독성있는 네이밍 정의
아키텍쳐 구조 – fHalo Framework
아키텍쳐 오염도       Pollution : 0.97       fHalo Framework
4.4.5 3 Example로 품질 확보하기   1. 자체적인 Target Application 개발   2. 페이스북을 활용하는 „Yellow Ribbon‟ 팀과의 협력   3. 페이스북 헤카톤으로 또 한번의 검증  ...
Target Application - enjoybazaar
Target Application – Yellow Ribbon
Target Application – Promise Mind
4.4.6 외부로 오픈하기
Project Page Open! – jQuery Page
Project Page Open!
github Repository Open Page Open!
Step by Step TutorialStep1                Step2              Step3             Step4Import fHalo.jar     Get access token ...
Video Tutorial
Video Tutorial 동영상 통계자료
Video Tutorial – Feedback 1
fHalo 향후 발전방향-   jQuery, Spring 과 같이 성공한 OpenSource 로 발전-   타임라인/크레딧 등 페이스북에서 제공되는 신규 기능들을 꾸준히    반영하여 All in One SDK로 발전-...
Ohloh.net- 오픈소스SW의 탄생부터 현재까지의 역사를 한눈에 보여주는 박물관- 오픈소스SW의 개발과 진화과정을 추적하고 공개하는 사이트- 품질을 평가할 수 있는 다양한 지표들을 제공
5. Git & GitHub
버전 관리 시스템• 프로젝트 파일의 변경사항을 추적하는 시스템• 버전 컨트롤 자동화, 간편한 소스 변경이력 관리• 손쉬운 협업, roll back, 병렬작업                               127
중앙 집중식 버전관리• CVS(Concurrent Version System), SVN(Subversion)• 소스변경 이력을 보려면 중앙 저장소에 접근.                                    ...
분산 버전관리• Git 자신만의 로컬저장소를 가진다• Linux Kernel, Android, Ruby on Rails – Git 이용 예                                            ...
Git 주요 용어Server        Server Repository          Commit                       Local Repository Client                    ...
Git 주요 용어• Branch  – 작업 트리중 하나의 가지  – 후에 master branch와 합치거나 실험해 본 후 삭제• Merge  – Branch를 합침                              ...
Git 사용법• Repository  – Github  – 네이버개발자센터  – Bitbucket• Github 사용  – http://github.com• Git download  – http://help.github...
Git Bash           133
SSH key 생성• SSH key 생성 – ssh-keygen –t rsa –c “email@email.com” – ~.sshid_rsa.pub 에서 확인                                   ...
SSH Key 등록             135
Git 기본 환경설정• 기본 환경설정(Git bash)  – Command창 에서 이름과 메일을 입력  Git config --global user.name “Jaemyung Shin”  Git config --gl...
Git 설정• Git init을 통해 로컬 저장소 생성• Git add <파일명> 을 통해 파일 추가1.Git 설정  2.Commit  3.Push  4.Pull                             ...
Commit• 변경 사항들을 로컬저장소에 저장• Git commit –m “commit log”1.Git 설정  2.Commit  3.Push  4.Pull                                ...
Push• 로컬저장소의 파일을 원격저장소에 저장• Git push <원격저장소 URL>1.Git 설정  2.Commit  3.Push  4.Pull                                     ...
GitHub Repository• Create repository                              원격저장소 URL• 원격 저장소 주소 필요    git@github.com:fHalo/test.gi...
Push 후 GitHub Repository                           141
Pull• 원격저장소의 파일을 로컬저장소로 가져옴• Git pull <원격지 URL>1.Git 설정  2.Commit  3.Push  4.Pull                                      ...
Egit(Eclipse Git)• Eclipse plug-in 으로 간편히 제공• Help  Install New Software  Add(http://www.jgit.org/updates)              ...
원격 프로젝트 생성• Import  Git   – Local : 로컬에있는 Git 프로젝트로 생성   – URI : 원격지에 있는 Git 프로젝트 다운(Pull)                               ...
원격 프로젝트 생성• URI, Authentication 채우기  – URI : 저장소 주소  – Authentication : github ID, PW                                     ...
Egit 사용법• Git project 생성 후                           146
Egit을 이용한 Commit                   147
Egit을 이용한 Commit 이력 보기• Show history  – Commit 이력보기                           148
Egit을 통한 Push• 로컬저장소의 내용을 원격저장소로 전송                         149
Egit을 이용한 Pull• 충돌없을경우  Pull 성공• 충돌할경우  충돌로그             소스구분선                         150
Egit을 통한 roll back• 예전 코드로 복원하기 – Revert commit                              151
6. 마무리 및 참고자료
요약 오픈 소스는 인류애적인 사랑과 밴더들의 전쟁이 공존하는 곳. 오픈 소스는 소프트웨어 개발에 중요한 Asset이다. 사용하든, 배포하든 라이선스를 주의해라. 배포시 Committer & Reviewer Pol...
참고 자료• License 분류 참고 자료  – http://bit.ly/KkPDBP• Open Source License 통계  – http://bit.ly/JqfTFz  – http://bit.ly/K8dZtU
참고 자료• Github Wiki page  – https://github.com/fHalo/fHalo/wiki
참고 자료• fHalo web site  – http://fhalo.org/index.html
참고 자료• 구글독스를 통한 사용성 회의 – goo.gl/WhABe
Q&A
Open source engineering
Open source engineering
Upcoming SlideShare
Loading in...5
×

Open source engineering

1,574

Published on

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

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,574
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
57
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • http://myossdevblog.blogspot.com/2009/03/microlog4android.html
  • Transcript of "Open source engineering"

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

      Clipping is a handy way to collect important slides you want to go back to later.

    ×