Upgrade to Pro — share decks privately, control downloads, hide ads and more …

학교에선 알려주지 않는 오픈 소스 이야기

Chiwan Park
February 26, 2016

학교에선 알려주지 않는 오픈 소스 이야기

제 4회 네이버 D2 캠퍼스 세미나 발표자료 입니다. 제 오픈 소스 기여 경험을 공유하고, 학생들이 오픈 소스 기여를 통해 얻을 수 있는 것들을 소개하는 데 초점을 맞췄습니다.

Chiwan Park

February 26, 2016
Tweet

More Decks by Chiwan Park

Other Decks in Programming

Transcript

  1. 2 발표자 소개 박치완 <[email protected]> 서울대학교 컴퓨터공학부 데이터 마이닝 연구실

    대용량 데이터 처리에 관심이 많은 학생 Apache Flink Committer (since Jun. 2015)
  2. 2 발표자 소개 박치완 <[email protected]> 서울대학교 컴퓨터공학부 데이터 마이닝 연구실

    대용량 데이터 처리에 관심이 많은 학생 Apache Flink Committer (since Jun. 2015) 대용량 그래프 데이터 처리, 
 스트림 데이터 처리, 기계 학습 분야에 관심 있으시면
 http://datalab.snu.ac.kr
  3. 3 Apache Flink 스트리밍 데이터 처리 기술을 바탕으로 만든
 대용량

    데이터 분산 처리 플랫폼 http://flink.apache.org
  4. 3 Apache Flink 스트리밍 데이터 처리 기술을 바탕으로 만든
 대용량

    데이터 분산 처리 플랫폼 http://flink.apache.org Introduction to Apache Flink
 http://j.mp/ossdevconf-2015-park
  5. 4 오늘의 할 얘기 1. 오픈 소스, 그게 뭐죠? 2.

    학생이 오픈 소스 프로젝트에 참여하면 좋은 점 3. 오픈 소스 프로젝트에 기여를 위한 몇 가지 팁 4. 오픈 소스 기여를 도와주는 다양한 프로그램
  6. 6 오픈 소스 소프트웨어에 대한 오해 (1) 오픈 소스는 소프트웨어의

    무료 사용에 관한 것이다. http://www.mememaker.net/meme/did-someone-say...-free/
  7. 7 오픈 소스 소프트웨어에 대한 오해 (2) 오픈 소스는 소프트웨어의

    소스 코드 공개에 관한 것이다. http://instacod.es/105327
  8. 10 The Open Source Definition 1. Free Redistribution 2. Source

    Code 3. Derived Works 4. Integrity of The Author’s Source Code 5. No Discrimination Against Person or Groups 6. No Discrimination Against Fields of Endeavor 7. Distribution of License 8. License Must Not Be Specific to a Product 9. License Must Not Restrict Other Software 10.License Must Be Technology-Neutral
  9. 11 The Open Source Definition 1. 자유로운 재배포 2. 소스

    코드 3. 파생 저작물 4. 저작자의 소스 코드 원형 유지 5. 개인 및 단체에 대한 차별 금지 6. 사용 분야에 대한 차별 금지 7. 사용 허가의 배포 8. 특정 제품에만 유효한 사용 허가의 금지 9. 다른 소프트웨어를 제한하는 사용 허가의 금지 10.사용 허가의 기술 중립성 http://korea.gnu.org/documents/copyleft/osd-korean.html
  10. 12 오픈 소스, 그게 뭐죠? 오픈 소스는 소프트웨어를
 수정할 수

    있는 자유를 주려는 것이다. https://speakerdeck.com/minhee/opeun-soseu-yaegi
  11. 13 오픈 소스, 그게 뭐죠? 자유롭게 수정해야하니까… • 재배포 금지하면

    안됨 • 소스 코드로 배포해야함 • 코드 내의 라이센스 문구 수정하면 안됨 • 누구든 수정할 수 있어야 함 • …
  12. 16 학생 A: 오픈 소스 하면 좋냐? 학생과 오픈 소스

    http://www.memecreator.org/meme/so-if-i-just-do-the-open- source-will-my-grade-be-improved
  13. 17 컴퓨터과학 전공 학생이 듣는 주요과목 • 컴퓨터프로그래밍 • 객체지향프로그래밍

    • 자료구조 • 운영체제 • 알고리즘분석 • 컴퓨터아키텍쳐 • 데이터베이스 • 오토마타형식언어 • 프로그래밍언어구조론 • …
  14. 19 현업에서 주로 다루는 기술 • C, C++ 이외의 다양한

    언어 (Python, Java, PHP, …) • 스마트폰 어플 개발 환경 (Android, iOS, Tizen, …) • 웹 프레임워크 (Django, Spring, Play, …) • 프론트엔드 관련 패키지 (jQuery, React.js, Jindo, …) • 객체 관계 매핑 (Hibernate, SQLAlchemy, …) • 빌드 및 배포 자동화 (Maven, Gradle, SBT, Fabric, …) • 버전 관리 시스템 (Git, Mercurial, Subversion, …) • …
  15. 20 대학교 컴퓨터과학과의 교육 목표 A대 컴퓨터공학부 컴퓨터공학부는 컴퓨터 공학의

    기초를 이루는 컴 퓨터 구조 및 설계, 소프트웨어 시스템, 네트워크, 컴퓨터 이론은 물론, … (중략) … 새로운 분야를 선도적으로 개척해 나가고 있다.
  16. 21 대학교 컴퓨터과학과의 교육 목표 B대 전산학부 전산학부는 확고한 이론적

    기반을 바탕으로 미래 사회 컴퓨팅 패러다임의 변화를 주도하 는 인간 중심의 컴퓨팅 연구와 교육을 통하여 인류를 위한 컴퓨팅과 정보 서비스 기술의 무 한한 가능성을 추구한다.
  17. 22 이론 중심의 교육과정 • 많은 학부 교과과정이 이론을 잘

    학습하는 것에 무 게를 두고 있어서, 전체적인 커리큘럼이 이론 중심! • 실습은 각 과목별로 진행하는 텀 프로젝트나 졸업 프로젝트가 전부
 (작성한 코드에 대한 피드백이 전혀 없는 것은 덤)
  18. 22 이론 중심의 교육과정 • 많은 학부 교과과정이 이론을 잘

    학습하는 것에 무 게를 두고 있어서, 전체적인 커리큘럼이 이론 중심! • 실습은 각 과목별로 진행하는 텀 프로젝트나 졸업 프로젝트가 전부
 (작성한 코드에 대한 피드백이 전혀 없는 것은 덤) 물론, 이론을 잘 학습하는 것은
 매우 매우 중요합니다!
  19. 23 쓰기 중심의 교육과정 • 현대 프로그래밍 교육과정은 쓰기 중심

    • 잘 짜는 것만 중요하게 생각하고, 다른 사람의 코드를 읽는 훈련은 안함 • 전공자들도 소스 코드를 읽는 것을 어려워 함
 (자신이 작성한 코드라 하더라도!)
  20. 25 학부 과정을 착실하게 이수하면… • 컴퓨터과학 분야 이론의 기초를

    잘 다질 수 있음 • 그러나 코드를 다루는 능력은 별로 향상되지 않음
  21. 27 오픈 소스 프로젝트에 참여하면… • 학교에서 배운 이론을 실제로

    적용해 볼 수 있음 • 다양한 사람들과 협업하는 경험을 얻을 수 있음 • 고수가 작성한 코드를 읽어볼 수 있음 • 다른 사람이 내 코드를 리뷰해 줌
 (나도 다른 사람의 코드를 읽으며 리뷰할 수 있음) • 학교에서 아무도 신경 쓰지 않는 것의 중요함을 알게 됨
 (문서화, 테스트 케이스 등) • …
  22. 28 사례 1 • 자료 구조 수업에서 Hash table에 대해서

    배움 • Java는 HashMap이라는 Hash table 구현을 제공하지만, 때때로 직접 만들어 써야할 때도 있음 • 빠른 속도가 필요한 경우 • Garbage collection의 영향에서 벗어나고 싶은 경우 • Flink도 Hash table을 직접 구현한 MutableHashTable 을 만들어서 씀 • 그런데 여기에 버그가 있었음 Background
  23. 30 유닛 테스트 • 특정 모듈이 의도된 대로 정확히 작동하는지

    검증하는 절차 • 모든 함수와 메서드에 대한 테스트 케이스를 작성하는 절차 • 꼼꼼히 테스트 케이스를 만들어두면 • 리팩토링이 쉬움 • 디버깅이 쉬움 • 빌드/테스트 자동화 툴과 함께 적용되면 더욱 좋음 https://ko.wikipedia.org/wiki/유닛_테스트
  24. 33 사례 2 Background • Flink는 분석할 데이터를 CSV 파일에서

    불러오는 기능을 제공 • 미리 제공되는 Tuple 객체는 지원을 했으나, 일반적인 Java 객체(POJO)는 지원하지 않았음 • Java 객체 정보는 Java Reflection API를 통해 가져올 수 있다는 사실을 공부하고, 패치 작성
  25. 35

  26. 36 • Flink에는 FlinkML이라는 기계 학습 라이브러리가 있음 • FlinkML에

    두 벡터의 거리 계산을 위한 구현이 없었음 • 두 벡터의 거리 계산은 선형대수 수업에서 배움 • 구현도 인터넷에 참조할 수 있는 것이 많이 있음 • 쉬운 작업이니 패치 제출 사례 2 Background
  27. 39 사례 4 영어를 못해도 괜찮아요. 친절하게 틀린 부분을 알려

    줍니다. https://github.com/apache/flink/pull/1500
  28. 41 기여를 통해 얻어 갈 수 있는 것 (요약) •

    다른 사람이 작성한 코드를 읽는 능력 • 기여에 필요한 새로운 지식 • 커뮤니티의 높은 기준을 바탕으로 한 내가 작성한 코드에 대 한 꼼꼼한 리뷰 (영어 실력은 덤) • 버전 관리 시스템의 고급 기능 (cherry-pick, rebase, …) • 문서화와 테스트 케이스 작성 요령 • …
  29. 43 버그 리포팅 • 개발을 하다보면 필연적으로 오픈 소스 라이브러리나


    소프트웨어를 사용하게 됨 • 자주 쓰다 보면 버그나 불편한 점을 찾게 됨 • 버그를 발견하면 버그 리포팅! (버그 리포팅도 중요한 기여 중 하나) • 기대한 행동과 실제 현상을 적어주면 아주 좋음
  30. 45 뉴비를 위한 문서 읽기 규모가 좀 되는 프로젝트라면
 새로운

    기여자가 알아야 될 사항을 정리해 둔 문서가 있음 https://flink.apache.org/how-to-contribute.html
  31. 49 일단, 메일을 보냅시다 “나 어디에서 온 누구인데 너네 프로젝트

    좀 좋은거 같아.
 기여가 하고 싶은데 안내 좀 해줄 수 있니?” • 오픈 소스 프로젝트를 운영하는 입장에서 사용자의 증가는 환영할 일 • 대부분 친절하게 응대해주므로 겁먹지 말 것
  32. 50 기다림이 필요합니다 • 오픈 소스 프로젝트의 운영 = 자원

    봉사자들의 자발적 기여 • 응답은 빠르게, 그러나 답장은 늦을 수 있음
  33. 52 시도 하세요 • 오픈 소스 소프트웨어도 사람이 만든 것

    • 사소한 실수로 인한 버그, 쉽게 개선할 수 있는 것이 많이 존재 • 기여가 반영되는 과정을 1번만 경험하면, 이후에는 쉽게 지속 가능 그러니까, 일단 기여를 시도하세요.
  34. 56 회사에서도 좋게 봐줍니다 장태희, For 학생 & 취준생 오픈

    소스와 커뮤니티, SOSCON 2015 (대학원에서도)
  35. 58 D2 CAMPUS FEST • 오픈 소스 소프트웨어 경진 대회

    • 나의 프로젝트를 오픈 소스로! • 50만원에서 300만원의 상금 • 네이버 채용 특전 • 스터디 장소 및 서버 제공 • DEVIEW 2016 초대권 • D2 CAMPUS SEMINAR 발표 지원 • 프로젝트 홍보 지원 • …
  36. 60 Google Summer of Code • 2005년부터 시작된 Google의 오픈

    소스 기여 지원 프로그램 • 만 18세 이상의 학생이 여름 방학 동안 기여 활동 진행 • 기여하는 오픈 소스 커뮤니티에서 1명이 멘토로 참여 • 기여 활동 결과를 평가하고, 통과되면 $5500 (약 650만원) 지급
  37. 62 오픈 프론티어 • NIPA에서 주관하는 오픈 소스 개발자 지원

    프로그램 • 풀 타임, 파트 타임 기여자로 나누어 매달 장려금 지급 • 개발에 필요한 장비 구매 비용 지원 • 다양한 현업 개발자 분에게 멘토링을 받을 수 있도록 필요 경비 지원 • 24시간 개방 되어 있는 개발 공간 제공 (누리꿈스퀘어) • 세미나, 소모임 등을 할 수 있도록 공간 (토즈) 대여
 비용 지원 • 가상 개발 환경 비용 지원 • …
  38. 63 Summary • 오픈 소스 = 수정할 자유가 있는 소프트웨어

    • 오픈 소스 프로젝트 기여를 통해 많은 것을 얻을 수 있음 • 내 코드에 대한 리뷰 • 이론의 실제 적용 • 적용하려면 탄탄한 이론적 배경이 필요! • 기여에 필요한 다양한 지식 • 다양한 사람들과의 협업 경험 • 시도하기만 하면, 기여하는 것은 크게 어렵지 않음 • 다양한 지원 프로그램도 있음!
  39. 65 Appendix. 도움이 되는 자료 • 홍민희, “오픈 소스 얘기”

    • https://speakerdeck.com/minhee/opeun-soseu-yaegi • 서상현, “How to Contribute to OSS” • http://www.slideshare.net/sanxiyn/how-to-contribute-to-oss • 장태희, “For 학생 & 취준생 오픈소스와 커뮤니티” • http://www.soscon.net/download/day28/ST1/F_28_1650_장태희.pdf • 장혜식, “구글 Summer of Code 필승전략(?)” • http://highthroughput.org/wp/cb-1077/ • 장혜식, “오픈소스 프로젝트 생존 가이드” • http://highthroughput.org/wp/cb-1059/ • 빈꿈, “한 토종 개발자의 실리콘밸리 구직 체험기…” • http://ppss.kr/archives/7676
  40. 66 Appendix. 도움이 되는 자료 (cont.) • 에릭 레이먼드, “성당과

    시장” • http://www.hanbit.co.kr/ebook/look.html?isbn=9788968486562 • 송우일, “꾸준히, 자유롭게, 즐겁게: 한국 오픈 소스 개발자 들 이야기” • http://osdi.insightbook.co.kr/ • 허준회, “만화로 나누는 오픈소스 이야기” • http://www.joone.net/