0
Open Source Engineering
손영수      NHN NEXT 교수      PLoP 이사회 위원      AsianPLoP 공동의장      동북아 오픈소스 포럼      인력양성 분과 좌장      지경부 소마에 멘토손영수
도움 준 친구들양현철, 정승수,오혜성   신재명, 오유환, 강미경, 김영호   Stanly            fHalo
주제                  오픈소스아키텍트                  트랜드 적인     기업에서입장에서    어떻게       오픈소스를       사용해야 할까?오픈소스              어떻게이야...
0. 오픈소스의 시작점..
3명의 거장.Richard Stallman     Linus Torvalds   Eric S. Raymond
이 3명과 오픈소스를잘 이해할수 있는 영화   영문 자막 - http://bit.ly/eO7UwH   한글 자막 - http://bit.ly/YDb5TN
처음 시작과 달리현재의 오픈 소스는...
인류애의 사랑 그리고기업들의 총성 없는 전쟁이 공존하는 곳
MicrosoftApple                Google        오픈소스계의 3명의 적!
애플이 바라보는 Open Source소프트웨어 자산   나쁜 마켓 쉐어링   Half-Open/Half-Close
구글이 바라보는 Open Source소프트웨어 자산   Free Outsourcing   표준화 및 비 표준화           (EcoSystem 구축)
재미난 Web 브라우저 시장
Google이 잘될수 밖에 없는 이유..• CanvasGL – a GPU-accelerated Webkit
1. 라이센스 이야기.
원저작자           사용자누구에게 더 많은 권한을 줘야할까?
원 저작자의 권한을..GPL / LGPL ..
원 저작자의 권한을..        고객 (사용자)의 권한을..                MIT / BSD / Apache..GPL / LGPL ..
주요 License 비교                     GPL   LGPL   MIT   BSD   Apache저작권 보호 기능            O      O     O     O       O상용 SW 사용...
주요 License 특허권 제공여부                     GPL   LGPL   MIT   BSD   Apache저작권 보호 기능            O      O     O     O       O상용...
2008년 Open Source License 통              계                                  GPL (60%)                                     ...
2011년 Open Source License 통               계그리고, 현재는 ?SourceForge, Code Complex, Google Code, Savannah, RubyForge, GitHub. ...
왜 이렇게 BSD/MIT가 증가했        나?
오픈 소스 라이선스 위반
오픈 소스 라이선스 위반 사례
특허 침해 관련       Apache License
2.ArchitectureVisualization
높이 (30000 feet)봐야 할까?
뭐가 보이시나요??
자세히(0 feet) 봐야 할까?
제한된 코드로 프로젝트가 잘되고 있는지 판단은?
3만 피트 vs 0 피트의 뷰.      3만 피트      • 다이어그램의 Line의 의미는?       • 의존성?       • 데이터 흐름?       • 버스와 같은 공유자원?          0 피트     ...
해결책은..적절한 1000 피트의 뷰
STAN (Structure Analysis for Java)STAN - http://stan4j.com/eclipse/eclipse-integration.html
Robert C. Martin의 그래프
Instability•패키지의 움직일             수 있는 여력을 판단하는지표•다른 패키지에 영향을 미치지 않고, 해당 패키지를 쉽게 변경 할 수 있는가?•Instability I = Ce / (Ca+Ce)•C...
Instability                   Instability I = Ce / (Ca+Ce)당신의 패키지가 다른 사람이 많이 쓴다면,즉 Outgoing, Ca가 많다면, 여러분의 패키지는 변경하기 어렵다.반...
Abstractness  Interface(Abstract) 와 Concrete Class를 비교A = (#abstract classes / total # of classes)  •Abstract class = inte...
다시 보는 그래프        다른데서 많이 쓰는         녀석이니 조금 더        abstract를 높여야               돼!
그 외 용어•Tangled Complexity •순환 참조가 있어 Boundary를 깰 때•Cyclomatic Complexity •분기 문이 많아 hotspot이 될 가망성이 높은 곳
경고!!!환자의 외부 증상만고치는 의사가 되지 말자!!이러한 정보는 좋은 가이드일뿐!!숫자에 의존하다가오히려 문제가 보이지 않게 된다.
3. Asset으로써 오픈소               스                 Android의 문제들..http://openlogdog.appspot.com/index.html
안드로이드의 개방성               Android    Qt       Symbian    Meego               Mozilla    Webkit   Linux      Eclipse        ...
오픈 소스 이긴 한데..구글러가 아니면 할수 있는게 없다…
정리하면..버그만 잡아줘..
구글의 폐쇄성으로 안드로이드에 반영되지 못한외부 로그 오픈소스와 서비스들은?
MicroLog4AndoridLogCat의 단점을 보완한 안드로이드용로그 오픈소스 라이브러리LogCat과 동시에 파일로도 저장 가능           그러나…
MicroLog4Andorid                                                           소스 내부에서public class LogtestActivity extends Act...
MicroLog4Andorid     그래서! 직접 만듦...
ACRA - Application Crash Report for Android에러리포트를 Google Docs나 Email로 전송하는 오픈소스                 하지만                   ?
BugSenseACRA보다 나은 정보제공      하지만??           웹 UI 제공
BugSense 가격 정책
Open      Source충분한            편리한정보              UI
클라이언트 구축방법
로깅 방법public class LogtestActivity extends Activity {  static public Logger logger = LoggerFactory.getLogger();     @Overri...
LogDog 로깅 방법public class LogDogClient extends Application {@Overridepublic void onCreate() {// TODO Auto-generated method ...
<Log>  <Level>debug</Level></Log><Appenders> <AppenderList class="java.util.ArrayList">   <Appender AppenderName="LogCat">...
Simple Framework를    이용하세요.http://simple.sourceforge.net/
이렇게 됩니다.<categoryList>                      @Root  <categorys>                       public class CategoryList {     <cate...
이렇게 됩니다.        while(true) {             int eventType = xpp.nextTag();             if(eventType == XmlPullParser.START_T...
클라이언트 작동 방식          Factory                                   설정파일                                    Error              ...
클라이언트 작동 방식 - 예           AppenderList         File설정파일                 LogCat        Error       Report                  ...
버그 리포팅 기능 제공                     AppEngine               Jso  Exception,               n  불가피한 종료
버그 리포팅   ReportTime       에러 발생 시간   Model            스마트폰 모델명   National         발생 국가   ErrorName        에러 이름   ErrorCl...
클라이언트 아키텍처
LogDog   ACRA
클라이언트 오염도                                      LogDog      LogDog                             ACRAPollution : 0.67Polution...
Microlog4AndroidC&C Architecture
Logdog C&C Architecture
SAAS 구축
BugSense - 시각화 문제점
BugSense - 일별 보기만 제공                 일별 보기                 - 7일 구간 -일별 보기- 30일 구간 -
부족한 날짜 별 에러 그래프    주간  에러 변화는?        시간에 따른     오류의 변화를 관측하기는       너무 부족한 정보!!일별 보기- 30일 구간 -      월간              에러 변화는?
LogDog - 개선된 Date 그래프 일별                     보다 다양한 형태로                    분석 가능한 Date 그래프주별                월별
BugSense - 관계없는 버전 정보 App 버전 그래프   OS 버전 그래프
부족한 에러 그래프          이 App 버전에서는                  어떤 OS 버전이 문제인가?    App 버전과 OS 버전    둘의 관계성을 파악이      불가능한 구조!!App 업데이트가 문...
LogDog - Version 그래프   1.4   1.5    1.1    1.55
BugSense - 유일한 상호작용                  드래그                  하면…확대…?
LogDog - 의미있는 상호작용
LogDog - 에러 분포 리포트 제공         에러가 발생하는 클래스의 분포도를 한눈에 파악할 수 있는 리포트
LogDog web의 초기 구조                                             Google App                                             Engin...
Servlet만을 이용한 개발 1. 개발하기가 다른 것에 비해 힘들다. 2. 유지보수가 힘들다. 3. 특히 다른 개발자가 구조를 파악하기 힘들다.               이게 도대체               무슨 구조야?
REST 기반 서버 구성REST: ROA(Resource Oriented Architecture)를       따르는 웹 서비스 디자인 표준                             http 메소드:      ...
GAE Frontend의 한계GAE – frontend                   작업 요청                  30초 내에 응답                 (못하면 자동 취소)Data Store의 정...
GAE Backend Backend는 30초의 시간 제한이 존재하지 않는다.                           작업 요청                      작업이 승인됨을 알림 Task queue    ...
Logdog web의 작동 구조                                            Google App Engine Error             에러                       ...
Web Front End – HighCharts
Logdog Web Architecture                  Frontend                  Communicator                  Framework
4. Open Source Engineering
4.1 Facebook 의 가치    그리고 문제점..
세계에서 가장 큰 서비스   10 억...
?가장 오랜시간 이용하는 서비스
을 개발하려면…너무 많은 것을 알아야 한다.           Social Plugin ?           Open Graph ?           Social Channels ?           Authentica...
을 개발하려면… 쓸만한 녀석이 없다..batchFBfacebook-AWDzendFBlibfacebook SDK for Androidfacebook SDK for .net
기존       Framework의 문제점..          ?     확장성 편의성 사용성 안정성
그래서 우리는..            framework            facebook framework Project        를 시작했습니다.
4.2 Facebook 기본 개념
소셜 그래프
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.Read...
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,  ...
4.4.3 튼튼한 아키텍쳐
왜 오픈소스에서아키텍쳐가 중요한가?
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. 가독성있는 네이밍 정의
아키텍쳐 구조 – fHaloFramework
fHalo 아키텍쳐 오염도       Pollution : 0.97
fHalo C&C Diagram
4.4.5 3 Example로 품질 확보하기   1. 자체적인 Target Application 개발   2. 페이스북을 활용하는 „Yellow Ribbon‟ 팀과의 협력   3. 페이스북 헤카톤으로 또 한번의 검증  ...
Target Application - enjoybazaar
Target Application – Yellow Ribbon
Target Application – Promise Mind
Target Application소셜 기부 앱 – 아름다운 약속
5. 외부로 오픈하기
오픈소스 프로젝트 공개절차           아키텍쳐및 라이센스 설정           문서화           코드 구성 컨트류뷰터             메일링           버젼화  관리하기            ...
5.1 라이센스 선택원저작자                 사용자GPL 류.             MIT/BSD 류       라이센스누구에게 더 많은 권한을 줘야할까?
라이센스 선택          MIT          BSD3         BSD3 ,      Academic Free          MIT
5.2 투명한(이해할 수 있는) 아키텍쳐및 코드 구조
Simple Framework의 예 이중 데이터를 마샬링(변환)하는    녀석은 무엇일까요?
어디에 무슨 기능이 있는지 알게.코드 , 아키텍처 구조화를 잘 하자
5.3 문서화             Developer               Guide           End User          License
이 오픈소스를   어떻게사용할수 있나요?
End User GuideStep1                 Step2              Step3             Step4Import fHalo.jar      Get access token   Cre...
Video Tutorial도..
상황에 따라서는직접 데모도 돌려볼수 있게..
개발자 문서도..•   어떻게 소스코드를 얻는지•   아키텍쳐(코드구조)가 어떻게 되어 있는지•   빌드 시스템 구축하는 법•   어떻게 빌드하는 지•   어떻게 코드를 Contribute하는지
5.4 Mailing List 구축 Google Groups vs Yahoo Groups      - http://bit.ly/Zx0bVN
5.5 버전을 관리해라
Git Flow
Git 사용에 있어서는.. Win            Mac
Gource – Version Visualizatio             nhttp://code.google.com/p/gource/
5.6 조직 관리
Webkit 사례.• Contributor 에서 Committer로.  – 3명의 Reviewer의 추천이 필요  – 10 ~ 20개의 Good Patch들.  – 5 Business Days 동안 반대가 없어야 함• ...
이사회 맘대로 (폐쇄형)
정부 주도형
기업 컨소시엄 및 기업 주도형
참고 자료• 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
참고 자료 - Ohloh.net- 오픈소스SW의 탄생부터 현재까지의 역사를 한눈에 보여주는 박물관- 오픈소스SW의 개발과 진화과정을 추적하고 공개하는 사이트- 품질을 평가할 수 있는 다양한 지표들을 제공
참고 자료• 구글독스를 통한 사용성 회의 – goo.gl/WhABe
Q&A
Upcoming SlideShare
Loading in...5
×

Open Source Engineering V2

3,554

Published on

0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,554
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
86
Comments
0
Likes
14
Embeds 0
No embeds

No notes for slide
  • mies van der rohe
  • Erci s. raymond (성당과 시장)
  • 정부 주도형 Webinos (EU에서 주관)기업 컨소시엄 주도형Webkit ( Apple + Google)폐쇄형jQuery (개인마음대로 -&gt; Board 맴버 선정)
  • Transcript of "Open Source Engineering V2"

    1. 1. Open Source Engineering
    2. 2. 손영수 NHN NEXT 교수 PLoP 이사회 위원 AsianPLoP 공동의장 동북아 오픈소스 포럼 인력양성 분과 좌장 지경부 소마에 멘토손영수
    3. 3. 도움 준 친구들양현철, 정승수,오혜성 신재명, 오유환, 강미경, 김영호 Stanly fHalo
    4. 4. 주제 오픈소스아키텍트 트랜드 적인 기업에서입장에서 어떻게 오픈소스를 사용해야 할까?오픈소스 어떻게이야기. 배포해야 할까?
    5. 5. 0. 오픈소스의 시작점..
    6. 6. 3명의 거장.Richard Stallman Linus Torvalds Eric S. Raymond
    7. 7. 이 3명과 오픈소스를잘 이해할수 있는 영화 영문 자막 - http://bit.ly/eO7UwH 한글 자막 - http://bit.ly/YDb5TN
    8. 8. 처음 시작과 달리현재의 오픈 소스는...
    9. 9. 인류애의 사랑 그리고기업들의 총성 없는 전쟁이 공존하는 곳
    10. 10. MicrosoftApple Google 오픈소스계의 3명의 적!
    11. 11. 애플이 바라보는 Open Source소프트웨어 자산 나쁜 마켓 쉐어링 Half-Open/Half-Close
    12. 12. 구글이 바라보는 Open Source소프트웨어 자산 Free Outsourcing 표준화 및 비 표준화 (EcoSystem 구축)
    13. 13. 재미난 Web 브라우저 시장
    14. 14. Google이 잘될수 밖에 없는 이유..• CanvasGL – a GPU-accelerated Webkit
    15. 15. 1. 라이센스 이야기.
    16. 16. 원저작자 사용자누구에게 더 많은 권한을 줘야할까?
    17. 17. 원 저작자의 권한을..GPL / LGPL ..
    18. 18. 원 저작자의 권한을.. 고객 (사용자)의 권한을.. MIT / BSD / Apache..GPL / LGPL ..
    19. 19. 주요 License 비교 GPL LGPL MIT BSD Apache저작권 보호 기능 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
    20. 20. 주요 License 특허권 제공여부 GPL LGPL MIT BSD Apache저작권 보호 기능 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
    21. 21. 2008년 Open Source License 통 계 GPL (60%) GPL MIT (2%) LGPL BSD BSD (6%) MIT LGPL (7%) 기타출처 http://bit.ly/JqfTFz , 2008년
    22. 22. 2011년 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년
    23. 23. 왜 이렇게 BSD/MIT가 증가했 나?
    24. 24. 오픈 소스 라이선스 위반
    25. 25. 오픈 소스 라이선스 위반 사례
    26. 26. 특허 침해 관련 Apache License
    27. 27. 2.ArchitectureVisualization
    28. 28. 높이 (30000 feet)봐야 할까?
    29. 29. 뭐가 보이시나요??
    30. 30. 자세히(0 feet) 봐야 할까?
    31. 31. 제한된 코드로 프로젝트가 잘되고 있는지 판단은?
    32. 32. 3만 피트 vs 0 피트의 뷰. 3만 피트 • 다이어그램의 Line의 의미는? • 의존성? • 데이터 흐름? • 버스와 같은 공유자원? 0 피트 • 너무 상세한 정보임. • 전체적인 구조를 보지 못함.
    33. 33. 해결책은..적절한 1000 피트의 뷰
    34. 34. STAN (Structure Analysis for Java)STAN - http://stan4j.com/eclipse/eclipse-integration.html
    35. 35. Robert C. Martin의 그래프
    36. 36. Instability•패키지의 움직일 수 있는 여력을 판단하는지표•다른 패키지에 영향을 미치지 않고, 해당 패키지를 쉽게 변경 할 수 있는가?•Instability I = Ce / (Ca+Ce)•Ce = Efferent Coupling (Ingoing Dependencies)•Ca = Afferent Coupling (Outgoing Dependencies )
    37. 37. Instability Instability I = Ce / (Ca+Ce)당신의 패키지가 다른 사람이 많이 쓴다면,즉 Outgoing, Ca가 많다면, 여러분의 패키지는 변경하기 어렵다.반대로 Outgoing하는 Ca가 적고, Ingoing(다른 패키지만 사용만 하는) Ce,여러분의 패키지는 쉽게 변경해도 된다.즉 0.0에서 0.3이면 안정적인 버전, 0.7에서 1.0이면 불안정적인 상태다
    38. 38. 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만 있다.
    39. 39. 다시 보는 그래프 다른데서 많이 쓰는 녀석이니 조금 더 abstract를 높여야 돼!
    40. 40. 그 외 용어•Tangled Complexity •순환 참조가 있어 Boundary를 깰 때•Cyclomatic Complexity •분기 문이 많아 hotspot이 될 가망성이 높은 곳
    41. 41. 경고!!!환자의 외부 증상만고치는 의사가 되지 말자!!이러한 정보는 좋은 가이드일뿐!!숫자에 의존하다가오히려 문제가 보이지 않게 된다.
    42. 42. 3. Asset으로써 오픈소 스 Android의 문제들..http://openlogdog.appspot.com/index.html
    43. 43. 안드로이드의 개방성 Android Qt Symbian Meego Mozilla Webkit Linux Eclipse 84 68 71 61 65 58 58 23 OpennessVision Mobile Report July, 2011- http://bit.ly/oTmEmF
    44. 44. 오픈 소스 이긴 한데..구글러가 아니면 할수 있는게 없다…
    45. 45. 정리하면..버그만 잡아줘..
    46. 46. 구글의 폐쇄성으로 안드로이드에 반영되지 못한외부 로그 오픈소스와 서비스들은?
    47. 47. MicroLog4AndoridLogCat의 단점을 보완한 안드로이드용로그 오픈소스 라이브러리LogCat과 동시에 파일로도 저장 가능 그러나…
    48. 48. MicroLog4Andorid 소스 내부에서public class LogtestActivity extends Activity {static public Logger logger = LoggerFactory.getLogger(); @Override public void onCreate(Bundle savedInstanceState) { PatternFormatter formatter = new PatternFormatter(); 설정 formatter.setPattern( " %d{ISO8601} [%P] %m %T " ); logger.setLevel(Level.INFO); // write to LogCat LogCatAppender logCatAppender = new LogCatAppender(); logCatAppender.setFormatter(formatter); 로그를 보내는 logger.addAppender(logCatAppender); 기능이 없다 // write to text file of SD-card. FileAppender fileAppender = new FileAppender(); fileAppender.setAppend( true ); fileAppender.setFileName( "microlog4android.log" ); fileAppender.setFormatter(formatter); logger.addAppender(fileAppender);
    49. 49. MicroLog4Andorid 그래서! 직접 만듦...
    50. 50. ACRA - Application Crash Report for Android에러리포트를 Google Docs나 Email로 전송하는 오픈소스 하지만 ?
    51. 51. BugSenseACRA보다 나은 정보제공 하지만?? 웹 UI 제공
    52. 52. BugSense 가격 정책
    53. 53. Open Source충분한 편리한정보 UI
    54. 54. 클라이언트 구축방법
    55. 55. 로깅 방법public class LogtestActivity extends Activity { static public Logger logger = LoggerFactory.getLogger(); @Override public void onCreate(Bundle savedInstanceState) { PatternFormatter formatter = new PatternFormatter(); formatter.setPattern( " %d{ISO8601} [%P] %m %T " ); logger.setLevel(Level.INFO); // write to LogCat LogCatAppender logCatAppender = new LogCatAppender(); logCatAppender.setFormatter(formatter); logger.addAppender(logCatAppender);// write to text file of SD-card. FileAppender fileAppender = new FileAppender(); fileAppender.setAppend( true ); fileAppender.setFileName( "microlog4android.log" ); fileAppender.setFormatter(formatter); logger.addAppender(fileAppender);
    56. 56. LogDog 로깅 방법public class LogDogClient extends Application {@Overridepublic void onCreate() {// TODO Auto-generated method stub super.onCreate(); LogDog.LogDoginitialize(this,"설정.xml"); }}
    57. 57. <Log> <Level>debug</Level></Log><Appenders> <AppenderList class="java.util.ArrayList"> <Appender AppenderName="LogCat"> <Formatter class="com.logdog.Formatter.PatternFormatter"> <PatternString> %d{ISO8601} [%P] %m %T </PatternString> </Formatter> </Appender><Appender AppenderName="AppEngine"> </AppenderList> </Appenders> class="com.logdog.Formatter.PatternFormatter"> <Formatter <PatternString> %d{ISO8601} [%P] %m %T </PatternString> </Formatter> <LogFileName>log.txt</LogFileName> <SaveDirName>LogDog1</SaveDirName> <AppComunicator CommunicatorName="AppEngineComm"> <URL>http://swlogdog7.appspot.com/logdog/Report/</URL> </AppComunicator> </Appender></AppenderList></Appenders>
    58. 58. Simple Framework를 이용하세요.http://simple.sourceforge.net/
    59. 59. 이렇게 됩니다.<categoryList> @Root <categorys> public class CategoryList { <category> <id>1</id> @ElementList <name>fruit</name> private ArrayList<Category> categorys; <date>201110051200</date> </category> public void setCategorys(ArrayList<Category> categorys) <category> { <id>2</id> this.categorys = categorys; <name>animal</name> } <date>201110051200</date> </category> public ArrayList<Category> getCategorys() { <category> return categorys; <id>3</id> } <name>food</name> } <date>201110051200</date> </category> </categorys></categoryList>
    60. 60. 이렇게 됩니다. while(true) { int eventType = xpp.nextTag(); if(eventType == XmlPullParser.START_TAG) { String tag = xpp.getName(); if("id".equals(tag)) { category.setId(Integer.parseInt(xpp.nextText()));Serializer serializer =}else if ("name".equals(tag)) { new Persister();Reader reader = newcategory.setName(xpp.nextText()); StringReader(xmlData);CategoryList categoryList if ("date".equals(tag)) { }else =serializer.read(CategoryList.class, reader, false); category.setDate(xpp.nextText()); }else{ if(XmlPullParser.TEXT == xpp.next()) xpp.nextTag(); } } else break; }
    61. 61. 클라이언트 작동 방식 Factory 설정파일 Error Report File AppEngine LogCat Log AppenderList
    62. 62. 클라이언트 작동 방식 - 예 AppenderList File설정파일 LogCat Error Report Log
    63. 63. 버그 리포팅 기능 제공 AppEngine Jso Exception, n 불가피한 종료
    64. 64. 버그 리포팅 ReportTime 에러 발생 시간 Model 스마트폰 모델명 National 발생 국가 ErrorName 에러 이름 ErrorClassName 에러 클래스 이름 Line 에러 라인 AppVersion 앱버전 OSVersion OS버전 GPS GPS상태 WiFi WiFi 상태 MobileNetwork 3G상태 ScreenWidth 스크린 크기 ScreenHeight 스크린 크기 CallStack 콜스택 정보 Log 로그 정보
    65. 65. 클라이언트 아키텍처
    66. 66. LogDog ACRA
    67. 67. 클라이언트 오염도 LogDog LogDog ACRAPollution : 0.67Polution : 0.67 Polution : 3.70 ACRA Pollution : 3.70
    68. 68. Microlog4AndroidC&C Architecture
    69. 69. Logdog C&C Architecture
    70. 70. SAAS 구축
    71. 71. BugSense - 시각화 문제점
    72. 72. BugSense - 일별 보기만 제공 일별 보기 - 7일 구간 -일별 보기- 30일 구간 -
    73. 73. 부족한 날짜 별 에러 그래프 주간 에러 변화는? 시간에 따른 오류의 변화를 관측하기는 너무 부족한 정보!!일별 보기- 30일 구간 - 월간 에러 변화는?
    74. 74. LogDog - 개선된 Date 그래프 일별 보다 다양한 형태로 분석 가능한 Date 그래프주별 월별
    75. 75. BugSense - 관계없는 버전 정보 App 버전 그래프 OS 버전 그래프
    76. 76. 부족한 에러 그래프 이 App 버전에서는 어떤 OS 버전이 문제인가? App 버전과 OS 버전 둘의 관계성을 파악이 불가능한 구조!!App 업데이트가 문제인가? OS 버전만의 문제인가? App 버전 그래프 OS 버전 그래프
    77. 77. LogDog - Version 그래프 1.4 1.5 1.1 1.55
    78. 78. BugSense - 유일한 상호작용 드래그 하면…확대…?
    79. 79. LogDog - 의미있는 상호작용
    80. 80. LogDog - 에러 분포 리포트 제공 에러가 발생하는 클래스의 분포도를 한눈에 파악할 수 있는 리포트
    81. 81. LogDog web의 초기 구조 Google App Engine Error 에러 Java- servlet JDO JDO Web Data (HighChart, jqGrid, Store Bootstrap)
    82. 82. Servlet만을 이용한 개발 1. 개발하기가 다른 것에 비해 힘들다. 2. 유지보수가 힘들다. 3. 특히 다른 개발자가 구조를 파악하기 힘들다. 이게 도대체 무슨 구조야?
    83. 83. REST 기반 서버 구성REST: ROA(Resource Oriented Architecture)를 따르는 웹 서비스 디자인 표준 http 메소드: get, post, put ,delete Jersey 1.15 URL REST 서버 구축을 도와주는 오픈소스
    84. 84. GAE Frontend의 한계GAE – frontend 작업 요청 30초 내에 응답 (못하면 자동 취소)Data Store의 정보를 Select 하는 경우는 빠르지만, Insert, Update는 오랜 시간이 걸려 문제 발생!!
    85. 85. GAE Backend Backend는 30초의 시간 제한이 존재하지 않는다. 작업 요청 작업이 승인됨을 알림 Task queue Queue에 등록된 작업 등록 작업을 가져옴 GAE 작업 등록 Backend Task Queue Data Store
    86. 86. Logdog web의 작동 구조 Google App Engine Error 에러 GAE Backend Jersey 1.15 Task Queue JDO JDO Web Data (HighChart, jqGrid, Store Bootstrap)
    87. 87. Web Front End – HighCharts
    88. 88. Logdog Web Architecture Frontend Communicator Framework
    89. 89. 4. Open Source Engineering
    90. 90. 4.1 Facebook 의 가치 그리고 문제점..
    91. 91. 세계에서 가장 큰 서비스 10 억...
    92. 92. ?가장 오랜시간 이용하는 서비스
    93. 93. 을 개발하려면…너무 많은 것을 알아야 한다. Social Plugin ? Open Graph ? Social Channels ? Authentication ? Graph API ?
    94. 94. 을 개발하려면… 쓸만한 녀석이 없다..batchFBfacebook-AWDzendFBlibfacebook SDK for Androidfacebook SDK for .net
    95. 95. 기존 Framework의 문제점.. ? 확장성 편의성 사용성 안정성
    96. 96. 그래서 우리는.. framework facebook framework Project 를 시작했습니다.
    97. 97. 4.2 Facebook 기본 개념
    98. 98. 소셜 그래프
    99. 99. 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 형태로 응답을 받는다
    100. 100. Graph API Example• https://graph.facebook.com/100001066448386/ 신재명 ID• https://graph.facebook.com/40796308305/ 코카콜라 페이지 ID 100
    101. 101. 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/ 참고
    102. 102. Connection - Example• Graph API 예시 – https://graph.facebook.com/100001066448386/friends 그럼 보안문제는 ???
    103. 103. Access Token• 페이스북 API를 사용하기 위해 Access Token(인 증)이 필요하다.• Graph API Explorer를 통하여 쉽게 Access Token 을 받아올 수 있음
    104. 104. About Graph API• Graph API Explorer – Access Token 받을 수 있다 – 각종 Graph API를 테스트 해볼 수 있다 https://developers.facebook.com/tools/explorer#!/tools/explorer
    105. 105. 4.3 Facebook 개발 도구에 대한 문제인식
    106. 106. 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데이터를 일일이 파싱하는 과정을 거침
    107. 107. 타 framework의 문제점facebook SDK for Android 안정적이지 못한 구조, Circular dependency 발생
    108. 108. 타 framework의 문제점 TangledPollution : 4.19 Pollution : 2.18 facebook SDK for Android 높은 오염도 내포, 다양한 문제요소
    109. 109. 4.4 Facebook 프레임워크 개발하기
    110. 110. 먼저 프로젝트 목표(품질) 설정• Framework의 80대20 법칙• 높은 사용성 확보. (쉬운 개발)• 튼튼한 아키텍처 확보• 오픈 소스를 통한 공유와 확장
    111. 111. 4.4.1 팀원의 크기에 맞게 운용Small Team Large Team
    112. 112. Framework를 구축하는 팀원이 작으면.. Simple Design Consistency Design Focus on 80/20 RulesSmall Team
    113. 113. Framework 를 구축하는 팀원이 매우 많다면.. Powerful Design Lack Consistency Remove RequirementsLarge Team
    114. 114. Framework 핵심 기능 찾기내가 만들 FB App에 필요한 기능들 추출..
    115. 115. Framework 핵심 기능 찾기분류화 시키기
    116. 116. Framework 핵심 기능 찾기20/80 Rule에 의거한 기능 추출
    117. 117. 4.4.2 높은 사용성 확보우리가 만든 오픈소스 (프레임워크)를 과연 다른 개발자가 쓸까?사막을 달리고 있지 않나요?
    118. 118. You need Feedback.
    119. 119.  DO design APIs by first writing code samples for the main scenarios and then defining the object model to support the code samples.
    120. 120. Code Samples
    121. 121. 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); }}
    122. 122. Feedback (Read File) static void Main(string[] args) { foreach (string s in File.ReadAllLines("MyFiles.text")) { Console.WriteLine(s); } }
    123. 123. Object Model Listing
    124. 124. framework 사용자 시나리오 산출
    125. 125. framework 사용자 시나리오 산출
    126. 126. framework 사용자 시나리오 산출
    127. 127. framework 사용자 시나리오 산출
    128. 128. 친구 리스트 가져오기 (페이스북 API)
    129. 129. 친구 리스트 가져오기– Rest FB • Connection<User> myFriends = facebookClient.fetchConnection("me/friends", User.class);– fHalo • Connection<Friends> friends = user.friends();
    130. 130. 피드 올리기(페이스북 API)
    131. 131. 피드 올리기– 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);
    132. 132. 4.4.3 튼튼한 아키텍쳐
    133. 133. 왜 오픈소스에서아키텍쳐가 중요한가?
    134. 134. 4.4.4 fHalo 아키텍쳐 리팩토링
    135. 135. 아키텍쳐 구조도 및 오염도 1. facebook SDK for Android
    136. 136. 아키텍쳐 구조도 및 오염도 2. restFB Tangled
    137. 137. RestFB Refactoring• STEP 1. 구조 분석하기
    138. 138. RestFB Refactoring 전• STEP 2. 문제 원인 분석하기
    139. 139. fHalo Refactoring 결과• STEP 2. 문제 원인 분석하기
    140. 140. fHalo Refactoring 결과• STEP 3. 패키지 분리
    141. 141. RestFB Refactoring 전• STEP 4. 가독성있는 네이밍 정의
    142. 142. fHalo Refactoring 결과• STEP 4. 가독성있는 네이밍 정의
    143. 143. 아키텍쳐 구조 – fHaloFramework
    144. 144. fHalo 아키텍쳐 오염도 Pollution : 0.97
    145. 145. fHalo C&C Diagram
    146. 146. 4.4.5 3 Example로 품질 확보하기 1. 자체적인 Target Application 개발 2. 페이스북을 활용하는 „Yellow Ribbon‟ 팀과의 협력 3. 페이스북 헤카톤으로 또 한번의 검증 “안정화된 framework을 얻기 위해 최소 3번의 target application을 기반으로 만들어진 framework 여야 된다.” - Gof 디자인 패턴의 저자 / 프레임워크의 대가 Ralph Johnson - Gof 디자인 패턴의 저자 / 프레임워크의 창시자 Ralph Johnson
    147. 147. Target Application - enjoybazaar
    148. 148. Target Application – Yellow Ribbon
    149. 149. Target Application – Promise Mind
    150. 150. Target Application소셜 기부 앱 – 아름다운 약속
    151. 151. 5. 외부로 오픈하기
    152. 152. 오픈소스 프로젝트 공개절차 아키텍쳐및 라이센스 설정 문서화 코드 구성 컨트류뷰터 메일링 버젼화 관리하기 리스트
    153. 153. 5.1 라이센스 선택원저작자 사용자GPL 류. MIT/BSD 류 라이센스누구에게 더 많은 권한을 줘야할까?
    154. 154. 라이센스 선택 MIT BSD3 BSD3 , Academic Free MIT
    155. 155. 5.2 투명한(이해할 수 있는) 아키텍쳐및 코드 구조
    156. 156. Simple Framework의 예 이중 데이터를 마샬링(변환)하는 녀석은 무엇일까요?
    157. 157. 어디에 무슨 기능이 있는지 알게.코드 , 아키텍처 구조화를 잘 하자
    158. 158. 5.3 문서화 Developer Guide End User License
    159. 159. 이 오픈소스를 어떻게사용할수 있나요?
    160. 160. End User GuideStep1 Step2 Step3 Step4Import fHalo.jar Get access token Create instance Using API fHalo Tutorial - http://bit.ly/1591VDT
    161. 161. Video Tutorial도..
    162. 162. 상황에 따라서는직접 데모도 돌려볼수 있게..
    163. 163. 개발자 문서도..• 어떻게 소스코드를 얻는지• 아키텍쳐(코드구조)가 어떻게 되어 있는지• 빌드 시스템 구축하는 법• 어떻게 빌드하는 지• 어떻게 코드를 Contribute하는지
    164. 164. 5.4 Mailing List 구축 Google Groups vs Yahoo Groups - http://bit.ly/Zx0bVN
    165. 165. 5.5 버전을 관리해라
    166. 166. Git Flow
    167. 167. Git 사용에 있어서는.. Win Mac
    168. 168. Gource – Version Visualizatio nhttp://code.google.com/p/gource/
    169. 169. 5.6 조직 관리
    170. 170. Webkit 사례.• Contributor 에서 Committer로. – 3명의 Reviewer의 추천이 필요 – 10 ~ 20개의 Good Patch들. – 5 Business Days 동안 반대가 없어야 함• Committer 에서 Reviewer로. – 4명의 Reviewer 의 추천 /같은 기업/조직 추천 못 함 – 최소 80개의 Goop Patch들 – 5 Business Days동안 반대가 없어야 함 http://www.webkit.org/coding/commit-review-policy.html
    171. 171. 이사회 맘대로 (폐쇄형)
    172. 172. 정부 주도형
    173. 173. 기업 컨소시엄 및 기업 주도형
    174. 174. 참고 자료• License 분류 참고 자료 – http://bit.ly/KkPDBP• Open Source License 통계 – http://bit.ly/JqfTFz – http://bit.ly/K8dZtU
    175. 175. 참고 자료• Github Wiki page – https://github.com/fHalo/fHalo/wiki
    176. 176. 참고 자료 - Ohloh.net- 오픈소스SW의 탄생부터 현재까지의 역사를 한눈에 보여주는 박물관- 오픈소스SW의 개발과 진화과정을 추적하고 공개하는 사이트- 품질을 평가할 수 있는 다양한 지표들을 제공
    177. 177. 참고 자료• 구글독스를 통한 사용성 회의 – goo.gl/WhABe
    178. 178. 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.

    ×