SlideShare une entreprise Scribd logo
1  sur  178
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
처음 시작과 달리

현재의 오픈 소스는...
인류애의 사랑 그리고
기업들의 총성 없는 전쟁이 공존하는 곳
Microsoft



Apple

                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 사용 가능          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
주요 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
2008년 Open Source License 통
              계


                                  GPL (60%)
                                              GPL

 MIT (2%)                                     LGPL

                                              BSD
 BSD (6%)
                                              MIT
 LGPL (7%)
                                              기타


출처 http://bit.ly/JqfTFz , 2008년
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년
왜 이렇게 BSD/MIT가 증가했
        나?
오픈 소스 라이선스 위반
오픈 소스 라이선스 위반 사례
특허 침해 관련




       Apache License
2.
Architecture
Visualization
높이 (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)
•Ce = Efferent Coupling (Ingoing Dependencies)
•Ca = Afferent Coupling (Outgoing Dependencies )
Instability




                   Instability I = Ce / (Ca+Ce)
당신의 패키지가 다른 사람이 많이 쓴다면,
즉 Outgoing, Ca가 많다면, 여러분의 패키지는 변경하기 어렵다.

반대로 Outgoing하는 Ca가 적고, Ingoing(다른 패키지만 사용만 하는) Ce,
여러분의 패키지는 쉽게 변경해도 된다.

즉 0.0에서 0.3이면 안정적인 버전, 0.7에서 1.0이면 불안정적인 상태다
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만 있다.
다시 보는 그래프




        다른데서 많이 쓰는
         녀석이니 조금 더
        abstract를 높여야
               돼!
그 외 용어

•Tangled Complexity
 •순환 참조가 있어 Boundary를 깰 때

•Cyclomatic Complexity
 •분기 문이 많아 hotspot이 될 가망성이 높은 곳
경고!!!
환자의 외부 증상만
고치는 의사가 되지 말자!!

이러한 정보는 좋은 가이드일뿐!!

숫자에 의존하다가
오히려 문제가 보이지 않게 된다.
3. Asset으로써 오픈소
               스
                 Android의 문제들..




http://openlogdog.appspot.com/index.html
안드로이드의 개방성
               Android    Qt       Symbian    Meego
               Mozilla    Webkit   Linux      Eclipse
                                                        84
                                         68    71
                              61   65
                 58      58


          23




                              Openness


Vision Mobile Report July, 2011- http://bit.ly/oTmEmF
오픈 소스 이긴 한데..
구글러가 아니면 할수 있는게 없다…
정리하면..


버그만 잡아줘..
구글의 폐쇄성으로 안드로이드에 반영되지 못한



외부 로그 오픈소스와 서비스들은?
MicroLog4Andorid
LogCat의 단점을 보완한 안드로이드용
로그 오픈소스 라이브러리

LogCat과 동시에 파일로도 저장 가능



           그러나…
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);
MicroLog4Andorid
     그래서! 직접 만듦...
ACRA - Application Crash Report for Android
에러리포트를 Google Docs나 Email로 전송하는 오픈소스


                 하지만
                   ?
BugSense



ACRA보다 나은 정보제공
      하지만??

           웹 UI 제공
BugSense 가격 정책
Open
      Source


충분한            편리한

정보              UI
클라이언트 구축방법
로깅 방법
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);
LogDog 로깅 방법

public class LogDogClient extends Application {
@Override
public void onCreate() {
// TODO Auto-generated method stub
   super.onCreate();
   LogDog.LogDoginitialize(this,"설정.xml");
   }
}
<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>
Simple Framework를
    이용하세요.

http://simple.sourceforge.net/
이렇게 됩니다.
<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>
이렇게 됩니다.
        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;
             }
클라이언트 작동 방식


          Factory
                                   설정파일


                                    Error
                                   Report

 File
                       AppEngine
           LogCat
                                    Log
        AppenderList
클라이언트 작동 방식 - 예
           AppenderList


         File
설정파일                 LogCat




        Error
       Report
                      Log
버그 리포팅 기능 제공




                     AppEngine
               Jso
  Exception,
               n
  불가피한 종료
버그 리포팅
   ReportTime       에러 발생 시간
   Model            스마트폰 모델명
   National         발생 국가
   ErrorName        에러 이름
   ErrorClassName   에러 클래스 이름
   Line             에러 라인
   AppVersion       앱버전
   OSVersion        OS버전
   GPS              GPS상태
   WiFi             WiFi 상태
   MobileNetwork    3G상태
   ScreenWidth      스크린 크기
   ScreenHeight     스크린 크기
   CallStack        콜스택 정보
   Log              로그 정보
클라이언트 아키텍처
LogDog   ACRA
클라이언트 오염도


                                      LogDog
      LogDog                             ACRA
Pollution : 0.67
Polution : 0.67                       Polution : 3.70

    ACRA
                   Pollution : 3.70
Microlog4Android
C&C Architecture
Logdog C&C Architecture
SAAS 구축
BugSense - 시각화 문제점
BugSense - 일별 보기만 제
공
                 일별 보기
                 - 7일 구간 -




일별 보기
- 30일 구간 -
부족한 날짜 별 에러 그래프
    주간
  에러 변화는?

        시간에 따른
     오류의 변화를 관측하기는
       너무 부족한 정보!!
일별 보기
- 30일 구간 -      월간
              에러 변화는?
LogDog - 개선된 Date 그래프
 일별


                     보다 다양한 형태로
                    분석 가능한 Date 그래프




주별                월별
BugSense - 관계없는 버전 정보




 App 버전 그래프   OS 버전 그래프
부족한 에러 그래프          이 App 버전에서는
                  어떤 OS 버전이 문제인가?



    App 버전과 OS 버전
    둘의 관계성을 파악이
      불가능한 구조!!

App 업데이트가 문제인가?
 OS 버전만의 문제인가?
 App 버전 그래프        OS 버전 그래프
LogDog - Version 그래프




   1.4   1.5    1.1    1.55
BugSense - 유일한 상호작용

                  드래그
                  하면…




확대…?
LogDog - 의미있는 상호작용
LogDog - 에러 분포 리포트 제공
         에러가 발생하는
 클래스의 분포도를 한눈에 파악할 수 있는 리포트
LogDog web의 초기 구조
                                             Google App
                                             Engine
 Error
             에러

                       Java- servlet

                                                    JDO




                                       JDO



       Web                                            Data
 (HighChart, jqGrid,                                  Store
     Bootstrap)
Servlet만을 이용한 개발
 1. 개발하기가 다른 것에 비해 힘들다.
 2. 유지보수가 힘들다.
 3. 특히 다른 개발자가 구조를 파악하기 힘들다.


               이게 도대체
               무슨 구조야?
REST 기반 서버 구성
REST: ROA(Resource Oriented Architecture)를
       따르는 웹 서비스 디자인 표준


                             http 메소드:
                        get, post, put ,delete


          Jersey 1.15            URL
        REST 서버 구축을
        도와주는 오픈소스
GAE Frontend의 한계
GAE – frontend


                   작업 요청



                  30초 내에 응답
                 (못하면 자동 취소)


Data Store의 정보를 Select 하는 경우는 빠르지만,
  Insert, Update는 오랜 시간이 걸려 문제 발생!!
GAE Backend
 Backend는 30초의 시간 제한이 존재하지 않는다.
                           작업 요청



                      작업이 승인됨을 알림

 Task queue           Queue에 등록된
  작업 등록                작업을 가져옴
                                     GAE   작업 등록
                                   Backend
              Task Queue
                                                   Data
                                                   Store
Logdog web의 작동 구조
                                            Google App Engine
 Error
             에러
                                                     GAE
                                                   Backend
                       Jersey 1.15   Task Queue

                                                   JDO



                                      JDO



       Web                                           Data
 (HighChart, jqGrid,                                 Store
     Bootstrap)
Web Front End – HighCharts
Logdog Web Architecture


                  Frontend




                  Communicator




                  Framework
4. Open Source Engineering
4.1 Facebook 의 가치
    그리고 문제점..
세계에서 가장 큰 서비스




   10 억...
?
가장 오랜시간 이용하는 서비스
을 개발하려면…
너무 많은 것을 알아야 한다.


           Social Plugin ?
           Open Graph ?
           Social Channels ?
           Authentication ?
           Graph API ?
을 개발하려면…
 쓸만한 녀석이 없다..

batchFB
facebook-AWD
zendFBlib
facebook SDK for Android
facebook 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_ID/CONNECTION_TYPE


• ID는 사용자, 페이지, 이벤트, 사진 등의 Object ID
  – 약 20개의 Object를 지원
  – 모든 Object의 ID는 unique하다
  – JSON 형태로 응답을 받는다
Graph API Example
• https://graph.facebook.com/100001066448386/

                                                신재명 ID




• https://graph.facebook.com/40796308305/


                                       코카콜라 페이지 ID




                                                         100
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/ 참고
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/tools/explorer#!/tools/explorer
4.3 Facebook 개발 도구에
      대한 문제인식
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데이터를 일일이 파싱하는 과정을 거침
타 framework의 문제점




facebook SDK for Android

  안정적이지 못한 구조, Circular dependency 발생
타 framework의 문제점



                                  Tangled




Pollution : 4.19                Pollution : 2.18



     facebook SDK for Android

                    높은 오염도 내포, 다양한 문제요소
4.4 Facebook 프레임워크
        개발하기
먼저 프로젝트 목표(품질) 설정

•   Framework의 80대20 법칙
•   높은 사용성 확보. (쉬운 개발)
•   튼튼한 아키텍처 확보
•   오픈 소스를 통한 공유와 확장
4.4.1 팀원의 크기에 맞게 운용




Small Team   Large Team
Framework를 구축하는 팀원이 작으면..



               Simple Design

             Consistency Design


             Focus on 80/20 Rules

Small Team
Framework 를 구축하는
      팀원이 매우 많다면..


               Powerful Design

               Lack Consistency


              Remove Requirements

Large Team
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 the code samples.
Code Samples
Read File
static void Main(string[] args)
 {
        StreamReader sr = File.OpenText("MyFile.txt");
        string s = sr.ReadLine();

       while (s != null)
       {
         s = sr.ReadLine();
         Console.WriteLine(s);
       }
}
Feedback (Read File)

  static void Main(string[] args)
  {
     foreach (string s in File.ReadAllLines("MyFiles.text"))
    {
             Console.WriteLine(s);
     }
  }
Object Model Listing
framework 사용자 시나리오 산출
framework 사용자 시나리오 산출
framework 사용자 시나리오 산출
framework 사용자 시나리오 산출
친구 리스트 가져오기 (페이스북 API)
친구 리스트 가져오기
– Rest FB
  • Connection<User> myFriends =
    facebookClient.fetchConnection("me/friends", User.class);


– fHalo
  • Connection<Friends> friends = user.friends();
피드 올리기(페이스북 API)
피드 올리기
– 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);
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. 가독성있는 네이밍 정의
아키텍쳐 구조 – fHalo
Framework
fHalo 아키텍쳐 오염도




       Pollution : 0.97
fHalo C&C Diagram
4.4.5 3 Example로 품질 확보하기




   1. 자체적인 Target Application 개발
   2. 페이스북을 활용하는 „Yellow Ribbon‟ 팀과의 협력
   3. 페이스북 헤카톤으로 또 한번의 검증

  “안정화된 framework을 얻기 위해 최소 3번의 target application을
   기반으로 만들어진 framework 여야 된다.”
                 - Gof 디자인 패턴의 저자 / 프레임워크의 대가 Ralph Johnson
                    - Gof 디자인 패턴의 저자 / 프레임워크의 창시자 Ralph Johnson
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 Guide


Step1                 Step2              Step3             Step4
Import fHalo.jar      Get access token   Create instance   Using API




                   fHalo Tutorial - http://bit.ly/1591VDT
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
             n




http://code.google.com/p/gource/
5.6 조직 관리
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
이사회 맘대로 (폐쇄형)
정부 주도형
기업 컨소시엄 및 기업 주도형
참고 자료
• 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

Contenu connexe

Tendances

자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineeringYoungSu Son
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조Wanbok Choi
 
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표 URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표 YoungSu Son
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화Sungchul Park
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍NAVER D2
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙Hong Hyo Sang
 
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비NAVER D2
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guideSungchul Park
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1YoungSu Son
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental systemJaehoon Oh
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10hungrok
 
Spring 교육 자료
Spring 교육 자료Spring 교육 자료
Spring 교육 자료Hyosang Hong
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로Dongmin Shin
 
GraphQL overview
GraphQL overviewGraphQL overview
GraphQL overview기동 이
 

Tendances (20)

자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineering
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조
 
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표 URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guide
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
Spring 교육 자료
Spring 교육 자료Spring 교육 자료
Spring 교육 자료
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
GraphQL overview
GraphQL overviewGraphQL overview
GraphQL overview
 

En vedette

대표적인 오픈 소스 라이센스 요약 - 장형주
대표적인 오픈 소스 라이센스 요약 - 장형주대표적인 오픈 소스 라이센스 요약 - 장형주
대표적인 오픈 소스 라이센스 요약 - 장형주ETRIBE_STG
 
[D2 fest 2014]오픈소스sw 그리고 라이선스
[D2 fest 2014]오픈소스sw 그리고 라이선스[D2 fest 2014]오픈소스sw 그리고 라이선스
[D2 fest 2014]오픈소스sw 그리고 라이선스NAVER D2
 
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)NAVER D2
 
Mc kinsey big_data_full_report
Mc kinsey big_data_full_reportMc kinsey big_data_full_report
Mc kinsey big_data_full_reportJyrki Määttä
 
Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)
Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)
Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)BigDataEverywhere
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스라한사 아
 
Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...
Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...
Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...BigDataEverywhere
 
The Evolution of Data and New Opportunities for Analytics
The Evolution of Data and New Opportunities for AnalyticsThe Evolution of Data and New Opportunities for Analytics
The Evolution of Data and New Opportunities for AnalyticsSAS Canada
 
Data: Open for Good and Secure by Default | Eddie Garcia
Data: Open for Good and Secure by Default | Eddie GarciaData: Open for Good and Secure by Default | Eddie Garcia
Data: Open for Good and Secure by Default | Eddie GarciaCloudera, Inc.
 
Data, data, everywhere… - SEE UK - 2016
Data, data, everywhere… - SEE UK - 2016Data, data, everywhere… - SEE UK - 2016
Data, data, everywhere… - SEE UK - 2016TOPdesk
 
Big Data Insights & Opportunities
Big Data Insights & OpportunitiesBig Data Insights & Opportunities
Big Data Insights & OpportunitiesCompTIA
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
101 Marketing Charts
101 Marketing Charts101 Marketing Charts
101 Marketing ChartsHubSpot
 
Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...
Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...
Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...Data Con LA
 
오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님NAVER D2
 
개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님NAVER D2
 
오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님NAVER D2
 
MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧
MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧
MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧Mix Taiwan
 

En vedette (20)

대표적인 오픈 소스 라이센스 요약 - 장형주
대표적인 오픈 소스 라이센스 요약 - 장형주대표적인 오픈 소스 라이센스 요약 - 장형주
대표적인 오픈 소스 라이센스 요약 - 장형주
 
[D2 fest 2014]오픈소스sw 그리고 라이선스
[D2 fest 2014]오픈소스sw 그리고 라이선스[D2 fest 2014]오픈소스sw 그리고 라이선스
[D2 fest 2014]오픈소스sw 그리고 라이선스
 
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
[D2 fest 2014]개발자와 오픈소스(git기반 협업모델 소개)
 
Mc kinsey big_data_full_report
Mc kinsey big_data_full_reportMc kinsey big_data_full_report
Mc kinsey big_data_full_report
 
Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)
Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)
Big Data Everywhere Chicago: Getting Real with the MapR Platform (MapR)
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스
 
Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...
Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...
Big Data Everywhere Chicago: Platfora - Practices for Customer Analytics on H...
 
The Evolution of Data and New Opportunities for Analytics
The Evolution of Data and New Opportunities for AnalyticsThe Evolution of Data and New Opportunities for Analytics
The Evolution of Data and New Opportunities for Analytics
 
Analytics3.0 e book
Analytics3.0 e bookAnalytics3.0 e book
Analytics3.0 e book
 
Data: Open for Good and Secure by Default | Eddie Garcia
Data: Open for Good and Secure by Default | Eddie GarciaData: Open for Good and Secure by Default | Eddie Garcia
Data: Open for Good and Secure by Default | Eddie Garcia
 
Data, data, everywhere… - SEE UK - 2016
Data, data, everywhere… - SEE UK - 2016Data, data, everywhere… - SEE UK - 2016
Data, data, everywhere… - SEE UK - 2016
 
Big Data Insights & Opportunities
Big Data Insights & OpportunitiesBig Data Insights & Opportunities
Big Data Insights & Opportunities
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
101 Marketing Charts
101 Marketing Charts101 Marketing Charts
101 Marketing Charts
 
Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...
Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...
Big Data Day LA 2016/ Use Case Driven track - Reliable Media Reporting in an ...
 
오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님
 
Banking Operations
Banking Operations Banking Operations
Banking Operations
 
개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님
 
오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님
 
MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧
MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧
MixTaiwan 20170104-趨勢-陳昇瑋-從資料科學到人工智慧
 

Similaire à Open Source Engineering V2

초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
오픈소스를 사용하고, 준비하는 개발자를 위한 가이드
오픈소스를 사용하고, 준비하는 개발자를 위한 가이드오픈소스를 사용하고, 준비하는 개발자를 위한 가이드
오픈소스를 사용하고, 준비하는 개발자를 위한 가이드if kakao
 
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...OpenStack Korea Community
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)정명훈 Jerry Jeong
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신WooSangHwang
 
안드로이드 오픈소스 어플리케이션 블록
안드로이드 오픈소스 어플리케이션 블록안드로이드 오픈소스 어플리케이션 블록
안드로이드 오픈소스 어플리케이션 블록YoungSu Son
 
Java8 - Oracle Korea Magazine
Java8 - Oracle Korea MagazineJava8 - Oracle Korea Magazine
Java8 - Oracle Korea MagazineJay Lee
 
Open Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewOpen Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewMinsuk Lee
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1]
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1][개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1]
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1]Tommy Lee
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반BJ Jang
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)Yoonseok Pyo
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2plusperson
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 Joohyun Han
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 

Similaire à Open Source Engineering V2 (20)

초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
Why use git
Why use gitWhy use git
Why use git
 
오픈소스를 사용하고, 준비하는 개발자를 위한 가이드
오픈소스를 사용하고, 준비하는 개발자를 위한 가이드오픈소스를 사용하고, 준비하는 개발자를 위한 가이드
오픈소스를 사용하고, 준비하는 개발자를 위한 가이드
 
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
Introducing Fragments
Introducing FragmentsIntroducing Fragments
Introducing Fragments
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
 
안드로이드 오픈소스 어플리케이션 블록
안드로이드 오픈소스 어플리케이션 블록안드로이드 오픈소스 어플리케이션 블록
안드로이드 오픈소스 어플리케이션 블록
 
Java8 - Oracle Korea Magazine
Java8 - Oracle Korea MagazineJava8 - Oracle Korea Magazine
Java8 - Oracle Korea Magazine
 
Open Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewOpen Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code review
 
Modern android
Modern androidModern android
Modern android
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1]
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1][개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1]
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 4. 종합분석[1]
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 

Plus de YoungSu Son

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴 YoungSu Son
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningYoungSu Son
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화YoungSu Son
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) YoungSu Son
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)YoungSu Son
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기) YoungSu Son
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) YoungSu Son
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) YoungSu Son
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 YoungSu Son
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항 YoungSu Son
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법YoungSu Son
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법 YoungSu Son
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionYoungSu Son
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 

Plus de YoungSu Son (20)

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 

Open Source Engineering V2

  • 2. 손영수 NHN NEXT 교수 PLoP 이사회 위원 AsianPLoP 공동의장 동북아 오픈소스 포럼 인력양성 분과 좌장 지경부 소마에 멘토 손영수
  • 3. 도움 준 친구들 양현철, 정승수,오혜성 신재명, 오유환, 강미경, 김영호 Stanly fHalo
  • 4. 주제 오픈소스 아키텍트 트랜드 적인 기업에서 입장에서 어떻게 오픈소스를 사용해야 할까? 오픈소스 어떻게 이야기. 배포해야 할까?
  • 6. 3명의 거장. Richard Stallman Linus Torvalds Eric S. Raymond
  • 7. 이 3명과 오픈소스를 잘 이해할수 있는 영화 영문 자막 - http://bit.ly/eO7UwH 한글 자막 - http://bit.ly/YDb5TN
  • 8. 처음 시작과 달리 현재의 오픈 소스는...
  • 9. 인류애의 사랑 그리고 기업들의 총성 없는 전쟁이 공존하는 곳
  • 10. Microsoft Apple Google 오픈소스계의 3명의 적!
  • 11. 애플이 바라보는 Open Source 소프트웨어 자산 나쁜 마켓 쉐어링 Half-Open/Half-Close
  • 12. 구글이 바라보는 Open Source 소프트웨어 자산 Free Outsourcing 표준화 및 비 표준화 (EcoSystem 구축)
  • 14. Google이 잘될수 밖에 없는 이유.. • CanvasGL – a GPU-accelerated Webkit
  • 16. 원저작자 사용자 누구에게 더 많은 권한을 줘야할까?
  • 18. 원 저작자의 권한을.. 고객 (사용자)의 권한을.. MIT / BSD / Apache.. GPL / LGPL ..
  • 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. 주요 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. 2008년 Open Source License 통 계 GPL (60%) GPL MIT (2%) LGPL BSD BSD (6%) MIT LGPL (7%) 기타 출처 http://bit.ly/JqfTFz , 2008년
  • 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. 왜 이렇게 BSD/MIT가 증가했 나?
  • 25. 오픈 소스 라이선스 위반 사례
  • 26. 특허 침해 관련 Apache License
  • 31. 제한된 코드로 프로젝트가 잘되고 있는지 판단은?
  • 32. 3만 피트 vs 0 피트의 뷰. 3만 피트 • 다이어그램의 Line의 의미는? • 의존성? • 데이터 흐름? • 버스와 같은 공유자원? 0 피트 • 너무 상세한 정보임. • 전체적인 구조를 보지 못함.
  • 34. STAN (Structure Analysis for Java) STAN - http://stan4j.com/eclipse/eclipse-integration.html
  • 35. Robert C. Martin의 그래프
  • 36. Instability •패키지의 움직일 수 있는 여력을 판단하는 지표 •다른 패키지에 영향을 미치지 않고, 해당 패키지를 쉽게 변경 할 수 있는가? •Instability I = Ce / (Ca+Ce) •Ce = Efferent Coupling (Ingoing Dependencies) •Ca = Afferent Coupling (Outgoing Dependencies )
  • 37. Instability Instability I = Ce / (Ca+Ce) 당신의 패키지가 다른 사람이 많이 쓴다면, 즉 Outgoing, Ca가 많다면, 여러분의 패키지는 변경하기 어렵다. 반대로 Outgoing하는 Ca가 적고, Ingoing(다른 패키지만 사용만 하는) Ce, 여러분의 패키지는 쉽게 변경해도 된다. 즉 0.0에서 0.3이면 안정적인 버전, 0.7에서 1.0이면 불안정적인 상태다
  • 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. 다시 보는 그래프 다른데서 많이 쓰는 녀석이니 조금 더 abstract를 높여야 돼!
  • 40. 그 외 용어 •Tangled Complexity •순환 참조가 있어 Boundary를 깰 때 •Cyclomatic Complexity •분기 문이 많아 hotspot이 될 가망성이 높은 곳
  • 41. 경고!!! 환자의 외부 증상만 고치는 의사가 되지 말자!! 이러한 정보는 좋은 가이드일뿐!! 숫자에 의존하다가 오히려 문제가 보이지 않게 된다.
  • 42. 3. Asset으로써 오픈소 스 Android의 문제들.. http://openlogdog.appspot.com/index.html
  • 43. 안드로이드의 개방성 Android Qt Symbian Meego Mozilla Webkit Linux Eclipse 84 68 71 61 65 58 58 23 Openness Vision Mobile Report July, 2011- http://bit.ly/oTmEmF
  • 44. 오픈 소스 이긴 한데.. 구글러가 아니면 할수 있는게 없다…
  • 46. 구글의 폐쇄성으로 안드로이드에 반영되지 못한 외부 로그 오픈소스와 서비스들은?
  • 47. MicroLog4Andorid LogCat의 단점을 보완한 안드로이드용 로그 오픈소스 라이브러리 LogCat과 동시에 파일로도 저장 가능 그러나…
  • 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. MicroLog4Andorid 그래서! 직접 만듦...
  • 50. ACRA - Application Crash Report for Android 에러리포트를 Google Docs나 Email로 전송하는 오픈소스 하지만 ?
  • 51. BugSense ACRA보다 나은 정보제공 하지만?? 웹 UI 제공
  • 53. Open Source 충분한 편리한 정보 UI
  • 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. LogDog 로깅 방법 public class LogDogClient extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); LogDog.LogDoginitialize(this,"설정.xml"); } }
  • 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. Simple Framework를 이용하세요. http://simple.sourceforge.net/
  • 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. 이렇게 됩니다. 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. 클라이언트 작동 방식 Factory 설정파일 Error Report File AppEngine LogCat Log AppenderList
  • 62. 클라이언트 작동 방식 - 예 AppenderList File 설정파일 LogCat Error Report Log
  • 63. 버그 리포팅 기능 제공 AppEngine Jso Exception, n 불가피한 종료
  • 64. 버그 리포팅 ReportTime 에러 발생 시간 Model 스마트폰 모델명 National 발생 국가 ErrorName 에러 이름 ErrorClassName 에러 클래스 이름 Line 에러 라인 AppVersion 앱버전 OSVersion OS버전 GPS GPS상태 WiFi WiFi 상태 MobileNetwork 3G상태 ScreenWidth 스크린 크기 ScreenHeight 스크린 크기 CallStack 콜스택 정보 Log 로그 정보
  • 66. LogDog ACRA
  • 67. 클라이언트 오염도 LogDog LogDog ACRA Pollution : 0.67 Polution : 0.67 Polution : 3.70 ACRA Pollution : 3.70
  • 71. BugSense - 시각화 문제점
  • 72. BugSense - 일별 보기만 제 공 일별 보기 - 7일 구간 - 일별 보기 - 30일 구간 -
  • 73. 부족한 날짜 별 에러 그래프 주간 에러 변화는? 시간에 따른 오류의 변화를 관측하기는 너무 부족한 정보!! 일별 보기 - 30일 구간 - 월간 에러 변화는?
  • 74. LogDog - 개선된 Date 그래프 일별 보다 다양한 형태로 분석 가능한 Date 그래프 주별 월별
  • 75. BugSense - 관계없는 버전 정보 App 버전 그래프 OS 버전 그래프
  • 76. 부족한 에러 그래프 이 App 버전에서는 어떤 OS 버전이 문제인가? App 버전과 OS 버전 둘의 관계성을 파악이 불가능한 구조!! App 업데이트가 문제인가? OS 버전만의 문제인가? App 버전 그래프 OS 버전 그래프
  • 77. LogDog - Version 그래프 1.4 1.5 1.1 1.55
  • 78. BugSense - 유일한 상호작용 드래그 하면… 확대…?
  • 79. LogDog - 의미있는 상호작용
  • 80. LogDog - 에러 분포 리포트 제공 에러가 발생하는 클래스의 분포도를 한눈에 파악할 수 있는 리포트
  • 81. LogDog web의 초기 구조 Google App Engine Error 에러 Java- servlet JDO JDO Web Data (HighChart, jqGrid, Store Bootstrap)
  • 82. Servlet만을 이용한 개발 1. 개발하기가 다른 것에 비해 힘들다. 2. 유지보수가 힘들다. 3. 특히 다른 개발자가 구조를 파악하기 힘들다. 이게 도대체 무슨 구조야?
  • 83. REST 기반 서버 구성 REST: ROA(Resource Oriented Architecture)를 따르는 웹 서비스 디자인 표준 http 메소드: get, post, put ,delete Jersey 1.15 URL REST 서버 구축을 도와주는 오픈소스
  • 84. GAE Frontend의 한계 GAE – frontend 작업 요청 30초 내에 응답 (못하면 자동 취소) Data Store의 정보를 Select 하는 경우는 빠르지만, Insert, Update는 오랜 시간이 걸려 문제 발생!!
  • 85. GAE Backend Backend는 30초의 시간 제한이 존재하지 않는다. 작업 요청 작업이 승인됨을 알림 Task queue Queue에 등록된 작업 등록 작업을 가져옴 GAE 작업 등록 Backend Task Queue Data Store
  • 86. Logdog web의 작동 구조 Google App Engine Error 에러 GAE Backend Jersey 1.15 Task Queue JDO JDO Web Data (HighChart, jqGrid, Store Bootstrap)
  • 87. Web Front End – HighCharts
  • 88. Logdog Web Architecture Frontend Communicator Framework
  • 89. 4. Open Source Engineering
  • 90. 4.1 Facebook 의 가치 그리고 문제점..
  • 91. 세계에서 가장 큰 서비스 10 억...
  • 93. 을 개발하려면… 너무 많은 것을 알아야 한다. Social Plugin ? Open Graph ? Social Channels ? Authentication ? Graph API ?
  • 94. 을 개발하려면… 쓸만한 녀석이 없다.. batchFB facebook-AWD zendFBlib facebook SDK for Android facebook SDK for .net
  • 95. 기존 Framework의 문제점.. ? 확장성 편의성 사용성 안정성
  • 96. 그래서 우리는.. framework facebook framework Project 를 시작했습니다.
  • 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. Graph API Example • https://graph.facebook.com/100001066448386/ 신재명 ID • https://graph.facebook.com/40796308305/ 코카콜라 페이지 ID 100
  • 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. Connection - Example • Graph API 예시 – https://graph.facebook.com/100001066448386/friends 그럼 보안문제는 ???
  • 103. Access Token • 페이스북 API를 사용하기 위해 Access Token(인 증)이 필요하다. • Graph API Explorer를 통하여 쉽게 Access Token 을 받아올 수 있음
  • 104. About Graph API • Graph API Explorer – Access Token 받을 수 있다 – 각종 Graph API를 테스트 해볼 수 있다 https://developers.facebook.com/tools/explorer#!/tools/explorer
  • 105. 4.3 Facebook 개발 도구에 대한 문제인식
  • 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. 타 framework의 문제점 facebook SDK for Android 안정적이지 못한 구조, Circular dependency 발생
  • 108. 타 framework의 문제점 Tangled Pollution : 4.19 Pollution : 2.18 facebook SDK for Android 높은 오염도 내포, 다양한 문제요소
  • 110. 먼저 프로젝트 목표(품질) 설정 • Framework의 80대20 법칙 • 높은 사용성 확보. (쉬운 개발) • 튼튼한 아키텍처 확보 • 오픈 소스를 통한 공유와 확장
  • 111. 4.4.1 팀원의 크기에 맞게 운용 Small Team Large Team
  • 112. Framework를 구축하는 팀원이 작으면.. Simple Design Consistency Design Focus on 80/20 Rules Small Team
  • 113. Framework 를 구축하는 팀원이 매우 많다면.. Powerful Design Lack Consistency Remove Requirements Large Team
  • 114. Framework 핵심 기능 찾기 내가 만들 FB App에 필요한 기능들 추출..
  • 115. Framework 핵심 기능 찾기 분류화 시키기
  • 116. Framework 핵심 기능 찾기 20/80 Rule에 의거한 기능 추출
  • 117. 4.4.2 높은 사용성 확보 우리가 만든 오픈소스 (프레임워크)를 과연 다른 개발자가 쓸까? 사막을 달리고 있지 않나요?
  • 119.  DO design APIs by first writing code samples for the main scenarios and then defining the object model to support the code samples.
  • 121. Read File static void Main(string[] args) { StreamReader sr = File.OpenText("MyFile.txt"); string s = sr.ReadLine(); while (s != null) { s = sr.ReadLine(); Console.WriteLine(s); } }
  • 122. Feedback (Read File) static void Main(string[] args) { foreach (string s in File.ReadAllLines("MyFiles.text")) { Console.WriteLine(s); } }
  • 128. 친구 리스트 가져오기 (페이스북 API)
  • 129. 친구 리스트 가져오기 – Rest FB • Connection<User> myFriends = facebookClient.fetchConnection("me/friends", User.class); – fHalo • Connection<Friends> friends = user.friends();
  • 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);
  • 134. 4.4.4 fHalo 아키텍쳐 리팩토링
  • 135. 아키텍쳐 구조도 및 오염도 1. facebook SDK for Android
  • 136. 아키텍쳐 구조도 및 오염도 2. restFB Tangled
  • 137. RestFB Refactoring • STEP 1. 구조 분석하기
  • 138. RestFB Refactoring 전 • STEP 2. 문제 원인 분석하기
  • 139. fHalo Refactoring 결과 • STEP 2. 문제 원인 분석하기
  • 140. fHalo Refactoring 결과 • STEP 3. 패키지 분리
  • 141. RestFB Refactoring 전 • STEP 4. 가독성있는 네이밍 정의
  • 142. fHalo Refactoring 결과 • STEP 4. 가독성있는 네이밍 정의
  • 143. 아키텍쳐 구조 – fHalo Framework
  • 144. fHalo 아키텍쳐 오염도 Pollution : 0.97
  • 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. Target Application - enjoybazaar
  • 148. Target Application – Yellow Ribbon
  • 149. Target Application – Promise Mind
  • 150. Target Application 소셜 기부 앱 – 아름다운 약속
  • 152. 오픈소스 프로젝트 공개절차 아키텍쳐및 라이센스 설정 문서화 코드 구성 컨트류뷰터 메일링 버젼화 관리하기 리스트
  • 153. 5.1 라이센스 선택 원저작자 사용자 GPL 류. MIT/BSD 류 라이센스 누구에게 더 많은 권한을 줘야할까?
  • 154. 라이센스 선택 MIT BSD3 BSD3 , Academic Free MIT
  • 155. 5.2 투명한(이해할 수 있는) 아키텍쳐및 코드 구조
  • 156. Simple Framework의 예 이중 데이터를 마샬링(변환)하는 녀석은 무엇일까요?
  • 157. 어디에 무슨 기능이 있는지 알게. 코드 , 아키텍처 구조화를 잘 하자
  • 158. 5.3 문서화 Developer Guide End User License
  • 159. 이 오픈소스를 어떻게 사용할수 있나요?
  • 160. End User Guide Step1 Step2 Step3 Step4 Import fHalo.jar Get access token Create instance Using API fHalo Tutorial - http://bit.ly/1591VDT
  • 162. 상황에 따라서는 직접 데모도 돌려볼수 있게..
  • 163. 개발자 문서도.. • 어떻게 소스코드를 얻는지 • 아키텍쳐(코드구조)가 어떻게 되어 있는지 • 빌드 시스템 구축하는 법 • 어떻게 빌드하는 지 • 어떻게 코드를 Contribute하는지
  • 164. 5.4 Mailing List 구축 Google Groups vs Yahoo Groups - http://bit.ly/Zx0bVN
  • 168. Gource – Version Visualizatio n http://code.google.com/p/gource/
  • 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
  • 173. 기업 컨소시엄 및 기업 주도형
  • 174. 참고 자료 • License 분류 참고 자료 – http://bit.ly/KkPDBP • Open Source License 통계 – http://bit.ly/JqfTFz – http://bit.ly/K8dZtU
  • 175. 참고 자료 • Github Wiki page – https://github.com/fHalo/fHalo/wiki
  • 176. 참고 자료 - Ohloh.net - 오픈소스SW의 탄생부터 현재까지의 역사를 한눈에 보여주는 박물관 - 오픈소스SW의 개발과 진화과정을 추적하고 공개하는 사이트 - 품질을 평가할 수 있는 다양한 지표들을 제공
  • 177. 참고 자료 • 구글독스를 통한 사용성 회의 – goo.gl/WhABe
  • 178. Q&A

Notes de l'éditeur

  1. mies van der rohe
  2. Erci s. raymond (성당과 시장)
  3. 정부 주도형 Webinos (EU에서 주관)기업 컨소시엄 주도형Webkit ( Apple + Google)폐쇄형jQuery (개인마음대로 -&gt; Board 맴버 선정)