학교에선 알려주지 않는 오픈소스이야기 - 박치완님

86
학교에선 알려주지 않는 오픈 소스 이야기 박치완 Data Mining Lab. @ SNU CSE 2016. 02. 26

Upload: naver-d2

Post on 14-Jan-2017

5.683 views

Category:

Technology


0 download

TRANSCRIPT

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

박치완�Data Mining Lab. @ SNU CSE

2016. 02. 26

2

발표자�소개

박치완�<[email protected]>�서울대학교 컴퓨터공학부 데이터 마이닝 연구실

대용량 데이터 처리에 관심이 많은 학생 Apache Flink Committer (since Jun. 2015)

2

발표자�소개

박치완�<[email protected]>�서울대학교 컴퓨터공학부 데이터 마이닝 연구실

대용량 데이터 처리에 관심이 많은 학생 Apache Flink Committer (since Jun. 2015)

대용량 그래프 데이터 처리, 스트림 데이터 처리, 기계 학습

분야에 관심 있으시면http://datalab.snu.ac.kr

3

Apache�Flink

스트리밍 데이터 처리 기술을 바탕으로 만든대용량 데이터 분산 처리 플랫폼

http://flink.apache.org

3

Apache�Flink

스트리밍 데이터 처리 기술을 바탕으로 만든대용량 데이터 분산 처리 플랫폼

http://flink.apache.org

Introduction to Apache Flinkhttp://j.mp/ossdevconf-2015-park

4

오늘의�할�얘기1. 오픈 소스, 그게 뭐죠? 2. 학생이 오픈 소스 프로젝트에 참여하면 좋은 점 3. 오픈 소스 프로젝트에 기여를 위한 몇 가지 팁 4. 오픈 소스 기여를 도와주는 다양한 프로그램

5

오픈�소스,�그게�뭐죠?

6

오픈�소스�소프트웨어에�대한�오해�(1)오픈 소스는 소프트웨어의 무료 사용에 관한 것이다.

http://www.mememaker.net/meme/did-someone-say...-free/

7

오픈�소스�소프트웨어에�대한�오해�(2)오픈 소스는 소프트웨어의 소스 코드 공개에 관한 것이다.

http://instacod.es/105327

8

오픈�소스�소프트웨어에�대한�오해�(3)둘 다다.

http://memegenerator.net/instance/59387679

9

The�Open�Source�Definition

https://opensource.org/osd

10

The�Open�Source�Definition1. 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

11

The�Open�Source�Definition1. 자유로운 재배포 2. 소스 코드 3. 파생 저작물 4. 저작자의 소스 코드 원형 유지 5. 개인 및 단체에 대한 차별 금지 6. 사용 분야에 대한 차별 금지 7. 사용 허가의 배포 8. 특정 제품에만 유효한 사용 허가의 금지 9. 다른 소프트웨어를 제한하는 사용 허가의 금지 10.사용 허가의 기술 중립성

http://korea.gnu.org/documents/copyleft/osd-korean.html

12

오픈�소스,�그게�뭐죠?오픈 소스는 소프트웨어를

수정할�수�있는�자유를 주려는 것이다.https://speakerdeck.com/minhee/opeun-soseu-yaegi

13

오픈�소스,�그게�뭐죠?자유롭게 수정해야하니까…

• 재배포 금지하면 안됨 • 소스 코드로 배포해야함 • 코드 내의 라이센스 문구 수정하면 안됨 • 누구든 수정할 수 있어야 함 • …

14

중요하니까�두�번�말합니다.오픈 소스는 소프트웨어를

수정할�수�있는�자유를 주려는 것이다.

15

학생이�참여해서�얻을�수�있는�것

16

학생 A: 오픈 소스 하면 좋냐?

학생과�오픈�소스

http://www.memecreator.org/meme/so-if-i-just-do-the-open-source-will-my-grade-be-improved

17

컴퓨터과학�전공�학생이�듣는�주요과목• 컴퓨터프로그래밍 • 객체지향프로그래밍 • 자료구조 • 운영체제 • 알고리즘분석 • 컴퓨터아키텍쳐 • 데이터베이스 • 오토마타형식언어 • 프로그래밍언어구조론 • …

18

현업에서�주로�다루는�기술

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, …) • …

20

대학교�컴퓨터과학과의�교육�목표A대 컴퓨터공학부

컴퓨터공학부는 컴퓨터 공학의 기초를 이루는 컴퓨터 구조 및 설계, 소프트웨어 시스템, 네트워크, 컴퓨터� 이론은 물론, … (중략) … 새로운 분야를 선도적으로 개척해 나가고 있다.

21

대학교�컴퓨터과학과의�교육�목표B대 전산학부

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

22

이론�중심의�교육과정

• 많은 학부 교과과정이 이론을 잘 학습하는 것에 무게를 두고 있어서, 전체적인 커리큘럼이 이론�중심!

• 실습은 각 과목별로 진행하는 텀 프로젝트나 졸업 프로젝트가 전부(작성한 코드에 대한 피드백이 전혀 없는 것은 덤)

22

이론�중심의�교육과정

• 많은 학부 교과과정이 이론을 잘 학습하는 것에 무게를 두고 있어서, 전체적인 커리큘럼이 이론�중심!

• 실습은 각 과목별로 진행하는 텀 프로젝트나 졸업 프로젝트가 전부(작성한 코드에 대한 피드백이 전혀 없는 것은 덤)

물론, 이론을 잘 학습하는 것은매우 매우 중요합니다!

23

쓰기�중심의�교육과정• 현대 프로그래밍 교육과정은 쓰기�중심 • 잘 짜는 것만 중요하게 생각하고, 다른 사람의 코드를 읽는 훈련은 안함

• 전공자들도 소스 코드를 읽는 것을 어려워 함 (자신이 작성한 코드라 하더라도!)

24

학부�과정을�착실하게�이수하면…

https://meensspeaks.wordpress.com/2015/10/15/the-browsing-position/

25

학부�과정을�착실하게�이수하면…• 컴퓨터과학 분야 이론의 기초를 잘 다질 수 있음 • 그러나 코드를 다루는 능력은 별로 향상되지 않음

26

오픈�소스로�모자른�부분을�채울�수�있다!

http://www.bigdatatrunk.com/open-source/

27

오픈�소스�프로젝트에�참여하면…• 학교에서 배운 이론을 실제로 적용해 볼 수 있음 • 다양한 사람들과 협업하는 경험을 얻을 수 있음 • 고수가 작성한 코드를 읽어볼 수 있음 • 다른�사람이�내�코드를�리뷰해�줌

(나도 다른 사람의 코드를 읽으며 리뷰할 수 있음) • 학교에서 아무도 신경 쓰지 않는 것의 중요함을 알게 됨

(문서화, 테스트 케이스 등) • …

28

사례�1

• 자료 구조 수업에서 Hash table에 대해서 배움 • Java는 HashMap이라는 Hash table 구현을 제공하지만,

때때로�직접�만들어�써야할�때도�있음 • 빠른 속도가 필요한 경우 • Garbage collection의 영향에서 벗어나고 싶은 경우

• Flink도 Hash table을 직접 구현한 MutableHashTable을 만들어서 씀 • 그런데 여기에 버그가�있었음

Background

29

https://github.com/apache/flink/pull/751

버그를�수정하는�패치�제출!

29

https://github.com/apache/flink/pull/751

버그를�수정하는�패치�제출!

테스트를 추가해줄 수 있어?

30

유닛�테스트• 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차 • 모든 함수와 메서드에 대한 테스트 케이스를 작성하는 절차 • 꼼꼼히 테스트 케이스를 만들어두면

• 리팩토링이 쉬움 • 디버깅이 쉬움

• 빌드/테스트 자동화 툴과 함께 적용되면 더욱 좋음https://ko.wikipedia.org/wiki/유닛_테스트

31

https://github.com/apache/flink/pull/751/files

치명적인�버그이나�쉬운�수정

32

https://github.com/apache/flink/pull/751/files

쉽지�않은�테스트�케이스�추가

33

사례�2Background

• Flink는 분석할 데이터를 CSV 파일에서 불러오는 기능을 제공

• 미리 제공되는 Tuple 객체는 지원을 했으나, 일반적인 Java 객체(POJO)는 지원하지 않았음

• Java 객체 정보는 Java Reflection API를 통해 가져올 수 있다는 사실을 공부하고, 패치 작성

34

https://github.com/apache/flink/pull/426

패치�제출!

34

https://github.com/apache/flink/pull/426

패치�제출!

필드 순서를 결정하는방법이 필요해

35

35

JPA 같은 다른 프로젝트에서는annotation을 자주 쓰니까

그런 API도 만들자

36

• Flink에는 FlinkML이라는 기계 학습 라이브러리가 있음 • FlinkML에 두 벡터의 거리 계산을 위한 구현이 없었음

• 두 벡터의 거리 계산은 선형대수 수업에서 배움 • 구현도 인터넷에 참조할 수 있는 것이 많이 있음

• 쉬운 작업이니 패치 제출

사례�2Background

37

https://github.com/apache/flink/pull/629

패치�제출!

38

그런데�또�버그가…

39

사례�4영어를 못해도 괜찮아요.

친절하게 틀린 부분을 알려 줍니다.

https://github.com/apache/flink/pull/1500

40

문서�4줄�추가�했는데…

40

문서�4줄�추가�했는데…

40

문서�4줄�추가�했는데…

40

문서�4줄�추가�했는데…

41

기여를�통해�얻어�갈�수�있는�것�(요약)• 다른 사람이 작성한 코드를 읽는 능력 • 기여에 필요한 새로운 지식 • 커뮤니티의 높은 기준을 바탕으로 한 내가 작성한 코드에 대

한 꼼꼼한 리뷰 (영어 실력은 덤) • 버전 관리 시스템의 고급 기능 (cherry-pick, rebase, …) • 문서화와 테스트 케이스 작성 요령 • …

42

기여는�어떻게?오픈 소스 프로젝트 기여를 위한 몇 가지 팁

43

버그�리포팅• 개발을 하다보면 필연적으로 오픈 소스 라이브러리나

소프트웨어를 사용하게 됨 • 자주 쓰다 보면 버그나 불편한 점을 찾게 됨 • 버그를 발견하면 버그 리포팅! (버그 리포팅도 중요한 기여 중 하나) • 기대한 행동과 실제 현상을 적어주면 아주 좋음

44

https://issues.apache.org/jira/browse/FLINK-1937

버그�리포팅�예시

45

뉴비를�위한�문서�읽기규모가 좀 되는 프로젝트라면

새로운 기여자가 알아야 될 사항을 정리해 둔 문서가 있음

https://flink.apache.org/how-to-contribute.html

46

초보자용�이슈처음 기여하는 사람을 위해 초보자용 이슈를

남겨두는 프로젝트도 있음

46

초보자용�이슈처음 기여하는 사람을 위해 초보자용 이슈를

남겨두는 프로젝트도 있음

47

초보자용�이슈

47

초보자용�이슈

48

일단,�메일을�보냅시다

http://goo.gl/qFgdgd

49

일단,�메일을�보냅시다

“나 어디에서 온 누구인데 너네 프로젝트 좀 좋은거 같아.기여가 하고 싶은데 안내 좀 해줄 수 있니?”

• 오픈 소스 프로젝트를 운영하는 입장에서 사용자의 증가는 환영할 일

• 대부분 친절하게 응대해주므로 겁먹지 말 것

50

기다림이�필요합니다• 오픈 소스 프로젝트의 운영 = 자원 봉사자들의 자발적 기여 • 응답은 빠르게, 그러나 답장은 늦을 수 있음

51

길게는 3개월, 6개월 씩 걸리는 이슈도 있음

51

길게는 3개월, 6개월 씩 걸리는 이슈도 있음

51

길게는 3개월, 6개월 씩 걸리는 이슈도 있음

52

시도�하세요• 오픈 소스 소프트웨어도 사람이 만든 것 • 사소한 실수로 인한 버그, 쉽게 개선할 수 있는 것이

많이 존재 • 기여가 반영되는 과정을 1번만 경험하면, 이후에는 쉽게 지속 가능

그러니까,�일단�기여를�시도하세요.

53

이외에도…오픈 소스 프로젝트의 기여를 도와주는

다양한 프로그램이 있습니다.

54

해외�컨퍼런스�참여�기회Apache Big Data Europe 2015

ApacheCon: Europe 2015

54

해외�컨퍼런스�참여�기회Apache Big Data Europe 2015

ApacheCon: Europe 2015

54

해외�컨퍼런스�참여�기회Apache Big Data Europe 2015

ApacheCon: Europe 2015

54

해외�컨퍼런스�참여�기회Apache Big Data Europe 2015

ApacheCon: Europe 2015

54

해외�컨퍼런스�참여�기회Apache Big Data Europe 2015

ApacheCon: Europe 2015

55

해외�컨퍼런스�참여�기회Flink Forward 2015

55

해외�컨퍼런스�참여�기회Flink Forward 2015

55

해외�컨퍼런스�참여�기회Flink Forward 2015

55

해외�컨퍼런스�참여�기회Flink Forward 2015

56

회사에서도�좋게�봐줍니다

장태희, For 학생 & 취준생 오픈 소스와 커뮤니티, SOSCON 2015

(대학원에서도)

57

D2�CAMPUS�FEST

http://d2campusfest.kr/

58

D2�CAMPUS�FEST• 오픈 소스 소프트웨어 경진 대회 • 나의 프로젝트를 오픈 소스로! • 50만원에서 300만원의 상금 • 네이버 채용 특전 • 스터디 장소 및 서버 제공 • DEVIEW 2016 초대권 • D2 CAMPUS SEMINAR 발표 지원 • 프로젝트 홍보 지원 • …

59

Google�Summer�of�Code

https://developers.google.com/open-source/gsoc/

60

Google�Summer�of�Code• 2005년부터 시작된 Google의 오픈 소스 기여 지원 프로그램 • 만 18세 이상의 학생이 여름 방학 동안 기여 활동 진행 • 기여하는 오픈 소스 커뮤니티에서 1명이 멘토로 참여 • 기여 활동 결과를 평가하고, 통과되면 $5500 (약 650만원) 지급

61

오픈�프론티어

http://devlab.oss.kr

62

오픈�프론티어• NIPA에서 주관하는 오픈 소스 개발자 지원 프로그램 • 풀 타임, 파트 타임 기여자로 나누어 매달 장려금 지급 • 개발에 필요한 장비 구매 비용 지원 • 다양한 현업 개발자 분에게 멘토링을 받을 수 있도록 필요 경비 지원

• 24시간 개방 되어 있는 개발 공간 제공 (누리꿈스퀘어) • 세미나, 소모임 등을 할 수 있도록 공간 (토즈) 대여비용 지원

• 가상 개발 환경 비용 지원 • …

63

Summary• 오픈 소스 = 수정할�자유가 있는 소프트웨어 • 오픈 소스 프로젝트 기여를 통해 많은�것을�얻을�수�있음

• 내 코드에 대한 리뷰 • 이론의 실제 적용

• 적용하려면 탄탄한 이론적 배경이 필요! • 기여에 필요한 다양한 지식 • 다양한 사람들과의 협업 경험

• 시도하기만�하면, 기여하는 것은 크게 어렵지 않음 • 다양한 지원�프로그램도 있음!

64

Thank�youhttp://j.mp/d2-campus-seminar-4th-park

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

66

Appendix.�도움이�되는�자료�(cont.)• 에릭 레이먼드, “성당과 시장”

• http://www.hanbit.co.kr/ebook/look.html?isbn=9788968486562

• 송우일, “꾸준히, 자유롭게, 즐겁게: 한국 오픈 소스 개발자들 이야기” • http://osdi.insightbook.co.kr/

• 허준회, “만화로 나누는 오픈소스 이야기” • http://www.joone.net/