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